主键:primary key,主要的键,一张表只能有一个字段可以使用对应的键,用来唯一的约束该字段里面的数据,不能重复,这种称之为主键
增加主键:
方案一:在创建表的时候,直接在字段之后,跟primary key关键字(主键本身不允许为空)
方案二:在创建表的时候,在所有的字段之后,使用primary key(主键字段列表)来创建主键,如果有多个字段作为主键,可以是复合主键
方案三:当表已经创建好之后,额外追加主键,可以通过修改表字段属性,也可以直接追加
alter table 表名 add primary key(字段列表);
主键约束:主键对应的字段中的数据不允许重复,一旦重复,数据操作(增和改)失败
更新主键 & 删除主键
alter table 表名 drop primary key;
主键分类:业务主键、逻辑主键
create table my_student(
id int primary key auto_increment comment '逻辑主键:自增长',
number char(10) not null comment '学号',
name varchar(10) not null
)
自动增长:auto_increment,当对应的字段,不给值,或给默认值、或给NULL值,会自动的被系统触发,系统会从当前字段中已有的最大值基础上,再进行+1操作,得到一个新的不同的数据
特点:
任何一个字段要做自增长,前提必须本身就是一个索引
自增长字段必须是数字,而且是整型
一张表最多只能有一个自增长
修改自增长:alter table 表名 auto_increment=值;
查看自增长对应的变量:show variables like 'auto_increment%';
删除自增长:alter table 表名 modify 字段 类型;
唯一键(unique key)
默认允许自动为空,而且可以多个为空
增加唯一键
方案一:在创建表的时候,字段之后直接跟unique / unique key
方案二:在所有的字段之后增加unique key(字段列表);
方案三:在创建表之后增加唯一键
select 选项:select对查出来的结果的处理方式
all:默认的,保留所有的结果
distinct:去重,查出来的结果,将重复给去除
字段别名
字段名 [as] 别名;
数据源:单表数据源、多表数据源、查询语句
单表数据源:select * from 表名;
多表数据源:select * from 表名1,表名2, ...;
子查询:select * from (select 语句) as 别名;
where子句:返回结果0或1,0代表false,1代表true
判断条件
比较运算符:>、<、>=、<=、!=、<>、=、like、between、and、in/not in
逻辑运算符:&&(and)、||(or)、!(not)
group by子句
基本语法:group by 字段名 [asc|desc];
统计函数:
count():统计分组后的记录数,每一组有多少记录
max():统计每组中最大的值
min():统计最小值
avg():统计平均值
sum():统计和
limit子句
方案一:只用来限制长度,即数据量:limit 数据量;
方案二:限制起始位置,限制数量:limit 起始位置,长度;
limit offset,length;
length:每页显示的数据量,基本不变
offset = (页码-1)*每页显示量
连接查询(join)分类:内连接、外连接、自然连接、交叉连接
使用方式:左表 join 右表
交叉连接(cross join)
基本语法:左表 cross join 右表; -- 等价于:from 左表,右表;
内连接([inner] join)
基本语法:左表 [inner] join 右表 on 左表.字段=右表.字段;
on表示连接条件
增加外键
创建表的时候增加外键:在所有的表字段之后,使用foreign key(外键字段) references 外部表(主键字段)
在新增表之后增加外键:修改表结构,使用alter table 表名 add [constraint 外键名字] foreign key(外键字段) references 父表(主键字段);
修改外键&删除外键
alter table 表名 drop foreign key 外键名;
外键条件
外键要存在,首先必须保证表的存储引擎是innodb
列类型必须与父表的主键类型一致
一张表中的外键名字不能重复
增加外键的字段数据已经存在,必须保证数据与父表主键要求对应
外键约束
有三种约束模式
district:严格模式(默认的)
cascade:级联模式
set null:置空模式
语法:foreign key(外键字段) references 父表(主键字段) on delete 模式 on update 模式;