约束条件与数据类型的宽度一样,都是可选参数
作用:用于保证数据的完整性和一致性
- not null 与 default
- not null :标识该字段不能为空
- default:为该字段设置默认值
- unique:标识该字段的值是唯一的,不能重复
- 添加unique的两种方式
- 联合唯一
- primary key 标识该字段为该表的主键,可以唯一的标识记录,not null unique
- 对于innodb存储引擎来说,一张表必须有一个主键
- 单列主键(三种方式)
- 方式一:not null + unique
- 方式二:在某一个字段后用primary key
- 方式三:在所有字段后单独定义primary key
- 复合主键
- auto_increment :标识该字段的值自动正常(整数类型,而且为主键)
- 约束字段为自动增长,被约束的字段必须同时被key约束
- 默认从1开始自增
- 清空表
- delete from 表名;
- 对于自增的字段,在用delete删除后,再插入值,该字段仍然安装删除前的位置继续增长
- truncate 表名
- 用truncate 清空表后,自增字段会重新从1开始自增;
- 清空表通常用truncate,delete通常和where一起用
- delete from 表名;
- 查询自增步长
-
- show variables like 'auto_inc%';
- 步长:auto_increment_increment 默认为1
- 起始偏移量:auto_increment_offset 默认为1
- 设置步长
- set session auto_increment_increment = 5;本次连接的
- set global auto_increment_increment = 5;全局的
- 设置起始偏移量
- set global auto_increment_offset=3;
- 强调:起始偏移量<=步长
- foreign key :标识该字段为该表的外键
- 用来建立表之间的关系
-
#表类型必须是innodb存储引擎,且被关联的字段,即references指定的另外一个表的字段,必须保证唯一 create table department( id int primary key, name varchar(20) not null )engine=innodb; #dpt_id外键,关联父表(department主键id),同步更新,同步删除 create table employee( id int primary key, name varchar(20) not null, dpt_id int, constraint fk_name foreign key(dpt_id) references department(id) on delete cascade on update cascade )engine=innodb; #先往父表department中插入记录 insert into department values (1,'欧德博爱技术有限事业部'), (2,'艾利克斯人力资源部'), (3,'销售部'); #再往子表employee中插入记录 insert into employee values (1,'egon',1), (2,'alex1',2), (3,'alex2',2), (4,'alex3',2), (5,'李坦克',3), (6,'刘飞机',3), (7,'张火箭',3), (8,'林子弹',3), (9,'加特林',3) ; #删父表department,子表employee中对应的记录跟着删 mysql> delete from department where id=3; mysql> select * from employee; +----+-------+--------+ | id | name | dpt_id | +----+-------+--------+ | 1 | egon | 1 | | 2 | alex1 | 2 | | 3 | alex2 | 2 | | 4 | alex3 | 2 | +----+-------+--------+ #更新父表department,子表employee中对应的记录跟着改 mysql> update department set id=22222 where id=2; mysql> select * from employee; +----+-------+--------+ | id | name | dpt_id | +----+-------+--------+ | 1 | egon | 1 | | 3 | alex2 | 22222 | | 4 | alex3 | 22222 | | 5 | alex1 | 22222 | +----+-------+--------+
- 如何找出两张表之间的关系
-
分析步骤: #1、先站在左表的角度去找 是否左表的多条记录可以对应右表的一条记录,如果是,则证明左表的一个字段foreign key 右表一个字段(通常是id) #2、再站在右表的角度去找 是否右表的多条记录可以对应左表的一条记录,如果是,则证明右表的一个字段foreign key 左表一个字段(通常是id) #3、总结: #多对一: 如果只有步骤1成立,则是左表多对一右表 如果只有步骤2成立,则是右表多对一左表 #多对多 如果步骤1和2同时成立,则证明这两张表时一个双向的多对一,即多对多,需要定义一个这两张表的关系表来专门存放二者的关系 #一对一: 如果1和2都不成立,而是左表的一条记录唯一对应右表的一条记录,反之亦然。这种情况很简单,就是在左表foreign key右表的基础上,将左表的外键字段设置成unique即可
- 建立表之间的关系
- unsigned:无符号型
- zerofill:填充零