一、主键
1、规则:不重复 ; 不能为空 ; 会自动创建索引 ;尽量使用业务无法的数据作为主键,例如id ;
2、建表时添加主键
create table tb1( id int primary key, name varchar(20) ); |
3、双主键:字段组合作为主键
create table tb1( name varchar(20), ip varchar(20),
扫描二维码关注公众号,回复:
2502333 查看本文章
..... primary key(name,ip) ); |
4、查看主键约束 desc tb3;
5、删除主键约束
alter table tb3 drop primary key ; |
6、自增主键: 如果插入null,自动填入新的自增值 ; 如果插入较大值,以后会从插入的值继续向后递增 ;
create table tb1( id int primary key auto_increment, name varchar(20) ); |
1)查看自增值 show create table tb5\G;
2)取消自增主键(不删主键约束)
字段后面不加 auto_increment 就是取消:
alter table tb5 modify id int; |
3)获得刚刚插入的自增值 : 使用 last_insert_id()函数 ;多个客户端都产生了自增,只会查询当前会话的自增值 ;
二、外键
1、概念:
通过使用外键引用另一张表中主键中存在的值 ;
外键允许重复,也允许有null值 ;
外键会降低表的访问效率,在大型互联网都不添加外键约束,而是使用程序来保证数据的正确性 ;
2、例子
-- 创建学生表 drop table xuesheng; create table xuesheng( id int primary key auto_increment, name varchar(20) )engine=innodb charset=utf8; -- 创建班级表 drop table banji; create table banji( id int primary key auto_increment, name varchar(20) )engine=innodb charset=utf8; -- 修改学生表,添加banji_id外键,引用班级的主键 alter table xuesheng add ( banji_id int, foreign key(banji_id) references banji(id) ); insert into banji(name) values('一班'),('二班'),('三班'); insert into xuesheng(name,banji_id) values('张三',1) , ('李四',3) , ('王五',3) , ('赵六',1); select * from banji; select * from xuesheng; |
3、其他 //等重新找到工作后,再更新
三、唯一约束
1、保证字段中的值不重复,但允许重复的null值 ;
2、例子:
create table tb5( id int primary key auto_increment, email varchar(100) unique, ... ); |
3、其他
四、非空约束
1、约束字段不能取null(空)值
2、例子:
create table tb5( ..., email varchar(100) not null, ... ); |