一、SQL语法规则
SQL语法规则:SQL是一种结构化编程语言
- 基础SQL指令通常是以行为单位
- SQL指令需要语句结束符,默认是英文分号:
;
、\g、\G- \G:主要用于查询数据,立体展示结果
- SQL指令类似自然语言
- 编写的SQL中如果用到了关键字或者保留字,需要使用反引号``来包裹,让系统忽略
1、结构创建
create 结构类型 结构名 结构描述;
2、显示结构
#显示结构
show 结构类型(复数);
#显示结构创建详情
show create 结构类型 结构名;
3、数据操作(数据表)
#新增数据
insert into 表名 values
#查看数据
select from 表名
#更新数据
update 表名 set
#删除数据
delete from 表名
二、SQL库操作
1、创建数据库
创建数据库:根据项目需求创建一个存储数据的仓库
- 使用create database 数据库名字创建
- 数据库层面可以指定字符集:charset / character set
- 数据库层面可以指定校对集:collate
- 创建数据库会在磁盘指定存放处产生一个文件夹
- 创建语法
create database 数据库名字 [数据库选项];
1、创建一个指定名字的数据库
create database db_1;
2、创建一个指定字符集的数据库
create database db_2 charset utf8MB4;
3、创建一个指定校对集的数据库
create database db_3 charset utf8MB4 collate utf8mb4_general_ci;
小结
1、数据库的创建是存储数据的基础,数据库的创建通常是一次性的
2、创建数据库的语法包含几个部分
- 关键字: create database
- 数据库名字: 自定义名字
- 数字、字母和下划线组成
- 不区分大小写
- 数字不能开头
- 使用下划线法创建复杂数据库名字
- 数据库选项:非必须的规定
- 字符集:charset /character set 字符集。非必须,默认继承DBMS
- 校对集:collate 校对集。非必须,依赖字符集
3、创建好的数据库可以在数据存储指定地点(安装时指定)看到
- 一个数据库对应一个文件夹
- 每个数据库下有个对应的文件,里面有字符集和校对集信息(Mysql7以前)
2、显示数据库
1、显示所有数据库
show databases;
2、显示数据库创建指令
show create database db_1;
小结
1、查看数据库分为两种方式
- 查看全部:show databases;
- 查看具体创建指令:show create database 数据库名字;
2、查看数据库的目的和应用
- 开发人员确认数据库是否存在
- 数据库管理员维护
3、使用数据库
使用数据库:指在进行具体SQL指令之前,让系统知道操作针对的是哪个数据库
- 数据库的操作通常是针对数据表或者数据
- 通过使用数据库可以让后续指令默认针对具体数据库环境
- 使用数据库语法:use 数据库名字;
use db_1;
小结
1、使用数据库的指令是:use 数据库名字;
2、使用数据库的目标
- 让系统知道后续SQL指令都是针对当前选择的数据库
- 简化后续SQL指令的复杂度(如果不指定数据库,那么所有的SQL操作都必须强制指定数据库名字)
4、修改数据库
修改数据库:修改数据库的相关库选项
- 数据库名字不可修改(老版本可以)
- 先新增
- 后迁移
- 最后删除
- 数据库修改分为两个部分(库选项)
- 字符集
- 校对集
- 数据库修改指令(与创建指令差不多)
alter database 数据库名字 库选项
1、修改数据库字符集
alter database db_2 charset gbk;
2、修改数据库校对集(如果字符集修改必须同时改变字符集)
alter database db_3 charset gbk collate gbk_chinese_ci;
小结
1、数据库的修改只能修改库选项,不能修改名字
2、字符集的修改指令使用alter,其他跟创建指令一致
3、数据库修改通常有两部分
- 字符集修改
- 校对集修改(校对集必须对应字符集)
4、一般我们都不会使用数据库修改(一般要改也是删除后新增)
5、删除数据库
删除数据库:将当前已有数据库删除
- 删除数据库会删除数据库内所有的表和数据
- 删除数据库操作要慎重(删前备份)
- 删除数据库后,对应的存储文件夹就会消失
- 删除语法
drop database 数据库名字;
示例
drop database db_1;
小结
1、删除数据库使用指令:drop database 数据库名字
2、数据库的删除不可逆
- 删除会清空当前数据库内的所有数据表(表里数据一并删除)
- 删除数据库会将对应的文件夹从磁盘抹掉
- 数据库删除要谨慎(一般不建议删除)
6、总结
1、数据库的操作通常是一次性的,即在进行业务代码开展之前将数据库维护好
2、数据库的删除需要非常慎重,尤其是生产环境,数据库的删除是不可逆(会将数据库中的所有数据全部删除)
三、SQL表(字段)操作
1、创建数据表
创建数据表:根据业务需求,确定数据表的字段信息,然后创建表结构
- 表与字段不分家,相辅相成
- 表的创建需要指定存储的数据库
- 明确指定数据库:
数据库.表名
- 先使用数据库:
use 数据库名字
- 明确指定数据库:
- 字段至少需要指定名字、类型
- 数据库表不限定字段数量
- 每个字段间使用逗号
,
分隔 - 最后一个字段不需要逗号
- 每个字段间使用逗号
- 表可以指定表选项(都有默认值)
- 存储引擎:engine [=] 具体存储引擎
- 字符集:[default] charset 具体字符集(继承数据库)
- 校对集:collate(继承数据库)
- 表创建语法
create table [数据库名.]表名(
字段名 字段类型,
...
字段名 字段类型
)表选项;
示例
1、创建简单数据表(指定数据库创建数据表)
create table db_2.t_1(
name varchar(50)
);
2、创建数据表——多字段
# 使用数据库(进入数据库环境)
use db_2;
create table t_2(
name varchar(50),
age int,
gender varchar(10)
);
3、创建数据表——表选项
create table t_3(
name varchar(50)
)engine Innodb charset utf8MB4;
小结
1、创建数据库表是为了存储具体数据
2、数据表的创建与字段是同时存在的
3、数据表的创建需要指定数据库
- 在表名字前指定数据库:数据库名.表名
- 进入数据库环境(常用)
4、一张数据表用来存一组相关数据
5、扩展:存储引擎是指数据存储和管理的方式,MySQL中提供了多种存储引擎,一般使用默认存储引擎
- InnoDB
- 默认存储引擎
- 支持事务处理和外键
- 数据统一管理
- MyIsam
- 不支持事务和外键
- 数据、表结构、索引独立管理
- MySQL5.6以后不再维护
6、扩展:如果想创建一个与已有表一样的数据表,MySQL提供了一种便捷的复制模式
- create table 表名 like 数据库名字.表名
2、显示数据表
显示数据表:客户端通过指令显示已有的数据表
- 数据表的显示跟用户权限有关
- 显示数据表有两种方式
- 显示所有数据表
- 显示具体数据表的创建指令
示例
1、显示所有数据表——当前数据库下
show tables;
2、显示所有数据表——指定数据库
show tables from db_3;
3、显示部分关联数据表——匹配
show tables like '%like'; # _表示匹配一个字符(固定位置),%表示匹配N个字符
4、显示数据表的创建指令
show create table t_1; # 看到的结果未必一定是真实创建的指令(系统会加工)
小结
1、显示数据表有两种形式
- 显示所有数据表:show tables [from 指定数据库];
- 显示部分:show tables like 'pattern'; 匹配模式:_匹配单个字符,%匹配不限量字符
- 显示数据表创建指令:show create table 表名;
2、显示数据表通常是为了验证数据表是否存在或者验证数据表的创建指令是否正确
3、在显示数据的时候可以使用不同的语句结束符
- \g:与普通分号无区别
- \G:纵向显示列数据
3、查看数据表
查看数据表:指查看数据表中的具体结构
- 通常是查看字段信息
- 详细的显示字段的各项信息
- 查看语法有三种(效果一样)
desc 表名;
describe 表名;
show columns from 表名;
示例
desc t_1;
小结
1、数据表的查看是为了查看表中具体字段的信息
2、查看数据表的指令有多个,效果都一样
- desc 表名;(常用)
- describe 表名;
- show columns from 表名;
3、查看表结构的原因通常是在开发过程中为了更清晰的了解数据的存储形式和要求
4、更改数据表
更改数据表:修改表名字和表选项
- 修改表名:
rename table 表名 to 新表名
- 修改表选项:
alter table 表名
示例
1、修改表名
rename table t_1 to t1;
注意:如果有时候想要跨库修改的话,需要使用数据库名.表名
2、修改表选项
alter table t1 charset utf8;
小结
1、更改数据表分为两个部分
- 更改表名:rename table 原表名 to 新表名;
- 更改表选项:alter table 表名 表选项
2、通常我们较少使用更改数据表,数据表应该在创建时就定义好
5、更改字段
更改字段:指针对表创建好后,里面字段的增删改
- 字段操作包含字段名字、类型和属性的操作
- 字段操作分为四类
- 新增字段:add [column]
- 更改字段名:change
- 修改类型:modify
- 删除字段:drop
- 字段操作还有位置处理
- 字段操作通常是在表已经存在数据后进行
5.1、新增字段
新增字段:在表创建好后往里面增加其他字段
字段的新增必须同时存在字段类型
新增语法
alter table 表名 add [column] 字段名 字段类型 [字段属性] [字段位置]
示例
1、给已经存在的t_3表增加一个字段age
alter table t_3 add age int;
2、给已经存在的t_3表增加一个字段nickname
alter table t_3 add column nickname varchar(10);
小结
1、新增字段就是给已有表追加一个字段(较少)
2、字段新增必须指定字段类型
3、字段新增语法为:alter table 表名 add [column] 字段名 字段类型;
4、字段的追加默认是在所有字段之后
5.2、字段位置
字段位置:指字段放到某个指定字段之后
- 字段位置分为两种
- 第一个字段:first
- 某个字段后:after 已经存在字段名
- 字段位置适用于追加字段、修改字段、更改字段名
- 字段位置语法
alter table 表名 字段操作 字段位置;
示例
1、为t_3表增加一个id字段,放到最前面
alter table t_3 add id int first;
2、在t_3表name字段后增加一个身份证字段card
alter table t_3 add card varchar(18) after name;
小结
1、字段位置是配合字段操作的(新增、修改)
2、字段位置分两种
- 最前面(第一个字段):first
- 字段后面:after 已存在字段名
5.3、更改字段名
更改字段名:指对已经存在的字段名进行修改
- 字段名的修改也必须跟上字段类型
- 字段名修改语法
alter table 表名 change 原字段名 新字段名 字段类型 [字段属性] [位置]
示例
修改字段名card为sfz
alter table t_3 change card sfz varchar(18);
小结
1、字段名更改通常只是修改字段名字,但是也必须跟随类型
2、字段名修改语法:alter table 表名 change 原字段名 新字段名 字段类型
3、字段名修改change其实也可以修改字段类型、属性和位置,但是通常不使用(专人专事)
5.4、修改字段
修改字段:指修改字段的相关信息
- 修改字段类型、字段属性和位置
- 修改字段语法
alter table 表名 modify 字段名 字段类型 [字段属性] [位置];
示例
修改身份证的类型为char(18)并且位置放到id后面
alter table t_3 modify sfz char(18) after id;
小结
1、修改字段包含多个操作
- 字段类型修改
- 字段属性修改
- 字段位置修改
2、修改字段语法:alter table 表名 modify 字段名 字段类型 [字段属性] [位置];
6、删除字段
删除字段:即将某个不要的字段从表中剔除
- 删除字段会将数据也删除(不可逆)
- 删除字段语法
alter table 表名 drop 字段名;
示例
删除年龄字段
alter table t_3 drop age;
小结
1、字段删除在删除字段名的同时会删除字段对应的数据,而且不可逆
2、字段删除语法:alter table 表名 drop 字段名
7、总结
1、数据表结构的操作是数据操作的基础
2、一般情况下新手都不会接触数据表的设计,但是作为一名新手一定要在使用数据表之前查看数据表的结构信息
3、不要轻易的修改或者删除数据表结构(数据会一并被处理掉)
4、数据表结构的维护通常是一次性的,在业务开展前尽可能好的设计好数据表,而不要后期再进行其他维护
四、SQL数据操作
- 新增数据
- 查看数据
- 更新数据
- 删除数据
1、新增数据
新增数据:将数据插入到数据表永久存储
- 新增数据是根据表的字段顺序和数据类型要求将数据存放到数据表中
- 数据表中的数据以行(row)为存储单位,实际存储属于字段(field)存储数据
- 数据插入分两种方式
- 全字段插入:
insert into 表名 values(字段列表顺序对应的所有值);
- 部分字段插入:
insert into 表名 (字段列表) values(字段列表对应的值顺序列表);
- 全字段插入:
示例
1、给t_3表插入一条完整数据
insert into t_3 values(1,'440111200011111101','Jim','Green');
2、根据字段插入数据
insert into t_3 (id,sfz,name) values(2,'441000200011111211','Tom');
小结
1、数据插入是利用insert指令将数据永久存储到数据表中
2、数据存储以行为单位,字段为最小实际存储单位
3、数据插入分为两种方式插入数据
- 全字段插入
- insert into 表名 values(值列表)
- 值列表必须与字段列表顺序一致
- 值列表的每个数据类型必须与字段类型一致
- 部分字段插入
- insert into 表名 (字段列表) values(值列表)
- 字段列表可以顺序随意
- 值列表必须与指定的字段列表顺序一致
- 值列表元素的类型必须与字段列表的类型一致
2、查看数据
查看数据:将表中已经存在的数据按照指定的要求显示出来
- 查到的数据显示出来是一张二维表
- 数据显示包含字段名和数据本身
- 数据查看分两种方式
- 查看全部字段:使用
*
代替所有字段 - 查看部分字段:明确字段名,使用逗号分隔
- 查看全部字段:使用
- 查看数据很多时候也是根据条件查询部分数据
- 查看语法
select *|字段列表 from 表名;
示例
1、查看t_3表中所有数据
select * from t_3;
2、查看t_3表中的name和身份证信息
select name,sfz from t_3;
3、查看t_3表中id值为1的信息
select * from t_3 where id = 1;
小结
1、数据查看是数据库中最常用的操作(99%)
2、数据查看分两种情况
- 查看全部:select * (*叫做通配符)
- 查看部分:select 字段列表(建议)
3、实际使用时通常会带where条件进行数据筛选
3、更新数据
更新数据:即更新某个已有字段的值
- 更新数据通常是根据条件更新某些数据,而不是全部记录都更新
- 更新数据语法
update 表名 set 字段 = 新值[,字段 = 新值] [where条件筛选];
示例
1、更新所有记录的身份证信息
update t_3 set sfz = '440100200010100001';
2、更新某个记录的多个字段数据
update t_3 set name = 'Lily',sfz = '440100200010100002' where id = 1;
小结
1、更新数据的针对记录的字段数据进行更新
2、更新通常是限定条件更新(一般不会更新全部)
4、删除数据
删除数据:将数据从已有数据表中清除(针对的是记录record)
- 删除数据是一种不可逆操作
- 数据删除通常都是有条件删除
- 数据删除语法
delete from 表名 [where条件];
示例
删除t_3表中id为2的数据
delete from t_3 where id = 2;
小结
1、数据删除是不可逆的操作
2、数据删除通常都匹配条件部分删除
5、总结
1、数据操作不论是初级开发者还是高级开发者都频繁接触的操作
2、数据操作中读操作,往往占据了整个操作的99%以上
3、基本的增删改查是作为进阶的必要知识,必须熟练掌握和频繁练习(尽可能使用原码,集成工具后期开发时使用)