数据结构定义语言
如cre ate table, alter table , create index, …
数据控制语言
如grant, revoke…
数据操纵语言
insert, delete, update, select(严 格意义上属于DQL)
事务控制语言
如start transaction, commit, rollback, set transaction level read commited
每条SQL命令必须以;结尾
SQL命令不区分大小写
使用\c来终止命令的执行
4个命令:增create 删 drop… 查show desc
1、表的基本操作
1、创建表(指定字符集)
create table 表名(
字段名 数据类型,
字段名 数据类型,
… …
);
2、查看创建表的语句(字符集)
show create table 表名;
3、查看表结构
desc 表名;
4、删除表
drop table 表名;
增 删除 修改
1、在表中插入记录 insert into 表名 values(值1),(值2),...,(值N);
1、insert into 表名 values(值1),(值2),...,(值N);
2、insert into 表名(字段名列表) values(值1),...(值N);
2、查询表记录 select * from 表名 或者
1、select * from 表名;
2、select 字段1,
字段名2,…,字段名N from 表名;
1、数值类型(有符号signed和无符号unsigned)
1、整型 int(n)n不影响 ,tinyint,smallint,bigint,
1、int 大整型(4个字节)
取值范围:0 ~ 2 ** 32 -1(42亿多)
2、tinyint 微小整型(1个字节)
1、有符号(signed默认): -128 ~ 127
2、无符号(unsigned): 0 ~ 255
3、smallint 小整型(2个字节)
取值范围:0 ~ 65535
4、bigint 极大整型(8个字节)
取值范围:0 ~ 2 ** 64 - 1
2、浮点型 float,double,decimal
1、float(4个字节,最多显示7个有效位)
1、用法
字段名 float(m,n) m:表示总位数 n:小数位位数
示例:
salary float(5,2) 取值范围? -999.99 ~ 999.99
2、注意
1、浮点型插入整数时会自动补全小数位位数
2、小数位如果多于指定的位数,会对指定位的下一位进行四舍五入
示例:float(5,2) -> 23.128 -> 23.13
2、double(8个字节,最多显示15个有效位)
1、用法
字段名 double(m,n)
3、decimal(M+2个字节,最多显示28个有效位)
1、用法
decimal(28,5)
2、字符类型
1、char(定长)
1、取值范围:1 ~ 255
2、不给定宽度默认为 1
2、varchar(变长)
1、取值范围:1 ~ 65535
2、注意
1、varchar没有默认宽度,必须给定一个宽度值
示例:name varchar(20)
3、char 和 varchar 的特点
1、char
浪费存储空间,但是性能高
2、varchar
节省存储空间,但是性能低
2、查看表结构 : desc stuinfo
3、在表 stuinfo 中插入2条记录(行)
insert into stuinfo values
(1,“张三丰”,“AID1803”,23,175.00)
4、查询所有表记录
select * from stuinfo;
5、查询所有学生的姓名、年龄和身高
select name,age,height from stuinfo;
3、枚举类型
1、定义
字段值只能在列举的范围内选择
2、enum(…) 单选(最多有65535个不同的值)
字段名 enum(值1,值2,…,值N)
3、set(…) 多选(最多有64个不同的值)
字段名 set(值1,值2,…,值N)
插入记录时 “Python,boy,Mysql”
4、日期时间类型
1、year :年 YYYY
2、date :日期 YYYYMMDD
3、time :时间 HHMMSS
4、datetime :日期时间 YYYYMMDDHHMMSS
5、timestamp :日期时间 YYYYMMDDHHMMSS
6、注意
1、插入记录时datetime字段不给值默认返回NULL
2、插入记录时timestamp字段不给值默认返回系统当前时间
修改 表 alter table 表名
1、语法:alter table 表名 执行动作;
1、添加字段 add
alter table 表名 add 字段名 数据类型 first | after 字段名;
2、删除字段 drop
alter table 表名 drop 字段名;
3、修改字段数据类型 modify
alter table 表名 modify 字段名 新数据类型;
# 修改数据类型时会受到表中原有数据的限制
4、修改字段名 change
alter table 表名 change 旧名 新名 数据类型;
5、修改表名 rename
alter table 表名 rename 新表名;
1、数值比较&字符比较
1、数值比较运算符:=、!=、>、>=、<、<=
2、字符比较运算符:=、!=
1、运算符:
and (两个或者多个条件同时满足)
or (两个或者多个条件有一个满足就可以)
3、范围内比较 between, in, not in
1、运算符
between and、 in 、not in
2、语法
between 值1 and 值2
in(值1,值2,...,值N)
not in(值1,值2,...,值N)
4、匹配空、非空 is null, is not null
1、空 :is null
2、非空 :is not null
4、注意
1、null :空值,必须用 is 或者 is not 去匹配
2、"" :空字符串,用 = 或者 != 去匹配
5、模糊比较
1、where 字段名 like 表达式;
2、表达式
1、_ : 匹配单个字符
2、% : 匹配0到多个字符
6、正则匹配查询 regexp
1、where 字段名 regexp "正则表达式";
2、正则表达式符号
^ : 以...开头
$ : 以...结尾
. : 匹配任意一个字符 除了 换行符
[]: 包含...内容 在正则里表示匹配1个
[0-9]:匹配带数字的
[a-z]:匹配带小写字母的
[A-Z]
* : 星号前面的字符出现0个或者多次 "^赵.*"
1、总结(执行顺序)
3、select ... 聚合函数 from 表名
1、where ...
2、group by ...
4、having ...
5、order by ...
6、limit ...
2、order by 排序的asc 升序
1、作用:给查询的结果进行排序
2、语法格式:order by 字段名 排序方式;
3、排序方式
1、ASC(默认) : 升序
2、DESC : 降序
3、limit(永远放在SQL语句的最后写)
1、作用:限制显示查询记录的个数
2、用法
1、limit n :-->显示n条记录
2、limit m,n :-->从第(m+1)条开始,显示n条记录
limit 4,5 :显示 第5名-第9名
## m的值是从0开始计数的
4、聚合函数 5个avg ,sum,max,min,count
1、分类
1、avg(字段名) : 求字段的平均值
2、sum(字段名) : 求和
3、max(字段名) : 求最大值
4、min(字段名) : 求最小值
5、count(字段名):统计该字段记录的个数
5、group by(先分组,再聚合)
1、作用 :给查询的结果进行分组
执行过程:
1、先分组(此时未去重) group by country
2、再聚合(求每组的平均攻击值)
3、去重
注意
1、group by之后的字段名必须要为select之后的字段名
2、如果select之后的字段没有在group by语句之后,则必须要对该字段进行聚合处理(聚合函数)
6、having 对分组group by 后的进一步处理
1、作用 :对查询的结果进行进一步筛选
注意
1、having语句通常与group by语句联合使用,用来过滤由group by语句返回的记录集
2、having语句的存在弥补了where条件子句不能与聚合函数联合使用的不足, where操作的是表中实际存在的字段, having操作的是聚合函数生成的显示列
7、distinct
1、作用:不显示字段的重复值
注意
1、distinct处理的是distinct和from之间的所有字段,所有字段的值必须完全相同才可以去重
2、distinct不能对任何字段做聚合处理
8、查询表记录时可以做数学运算
1、运算符
+ - * / %
1、定义
对数据库中表的一列或者多列的值进行排序的一种结构(MySQL中索引用Btree方式) 分支树
2、索引的优点
可以加快数据的检索速度
3、索引的缺点 1、维护 /2、占用空间
1、当对表中的数据进行增加、修改、删除的时候,索引需要动态维护,降低了数据的维护速度
2、索引需要占用物理存储空间(数据库目录/var/lib/mysql)
普通/唯一/主键/外键索引 4种方式
1、普通索引
2、唯一索引
3、主键索引
4、外键索引
2、普通索引(index)
1、使用规则
1、一个表中可以有多个index字段
2、字段的值可以有重复,也可以为NULL值
3、经常把做查询条件的字段设置为index字段
4、index字段的key标志为: MUL
2、创建 方法1:index() /方法2:create index 索引名 on 表名(字段名);
1、创建表时创建index
create table t1(
… …,
… …,
index(id),
index(name));
2、在已有表中添加索引字段
1、语法格式
create index 索引名 on 表名(字段名);
# 索引名一般和字段名一样
3、查看 1方法:desc 表名;/2方法: show index from 表名\G;
1、desc 表名; ->查看KEY标志为 MUL
2、show index from 表名\G;
4、删除 drop index 索引名 on 表名;
drop index 索引名 on 表名;
注意:
删除普通索引只能一个一个删除
3、唯一索引(unique)
1、使用规则 条件:值不重复
1、一个表中可以有多个 unique 字段
2、unique字段的值不允许重复,可以为空值NULL
3、unique的KEY标志是 UNI
2、创建(基本等同index创建)
1、创建表时创建
unique(字段名),
unique(字段名)
2、已有表中创建
create unique index 索引名 on 表名(字段名); 不同
3、查看、删除唯一索引
desc 表名;
show index from 表名;
drop index 索引名 on 表名;
4、主键索引(primary key) && 自增长属性(auto_increment)
1、使用规则
1、一个表中只能有一个主键字段
2、对应字段的值不允许重复 且 不能为空值NULL
3、主键字段的KEY标志为 PRI
4、把表中能够唯一标识一条记录的字段设置为主键,通常把表中记录编号的字段设置为主键
2、创建主键(PRI)
1、创建表时创建 2种
1、字段名 数据类型 primary key auto_increment,
2、
id int auto_increment,
… …, # 设置自增长起始值
primary key(id))auto_increment=10000;
2、删除主键 2步骤
1、先删除自增长属性(modify)
1.alter table 表名 modify id int;
2、删除主键
2.alter table 表名 drop primary key;
3、在已有表中添加主键
alter table 表名 add primary key(字段名);
5、外键
1、定义
让当前表字段的值在另一个表的范围内选择
2、语法格式 针对于从表
foreign key(参考字段名)
references 被参考表名(被参考字段名)
on delete 级联动作
on update 级联动作
1、select 字段名列表 from 表名列表; # 笛卡尔积
2、select 字段名列表 from 表名列表 where 条件;
等同于 内连接 inner join
1、內连接(只显示匹配到的记录)
2、外连接
1、左连接(以左表为主去显示查询结果)
2、右连接
3、select 字段名列表 from 表1 left join 表2 on 条件;
1、内连接 inner join 表2 on 条件
1、定义
从表中删除与其他被连接的表中没有匹配到的行
2、语法格式
select 字段名列表 from 表1
inner join 表2 on 条件 inner join 表3 on 条件;
1、左连接
1、定义
以左表为主显示查询结果
2、语法格式
select 字段名列表 from 表1
left join 表2 on 条件;
2、右连接
用法同左连接,以右表为主显示查询结果
定义 :把内层的查询结果作为外层的查询条件
把内层的 查询结果 作为外层 的查询条件