主键约束
-- mysql 约束 -- primary key(主键) 的使用 字段名 字段类型 primary key 用于唯一的标识表行的数据,当定义主键约束后,该列不能重复,且不能为null create table test1( id int primary key, `name` varchar(30), email varchar(30) ) 或者 create table test2( id int , `name` varchar(30), email varchar(30), primary key(id) ) desc test1; desc test2; select * from test1; insert into test1 values(1 , '张三' , '1111@test.com'); insert into test1 values(1 , '张三' , '1111@test.com'); -- 一张表只能有一个主键,但是可以有复合主键(别白痴说有第二个主键) create table test3( id int , `name` varchar(30), `email` varchar(30), primary key(id , name) ) select * from test3; insert into test3 values(1 , '张三' , '234212'); insert into test3 values(1 , '李四' , '234212'); insert into test3 values(1 , '张三' , '234244412'); 复合主键,可以是多个,这里是id+name ,其中一个相同无所谓,只要别两个一起相同就可以了。 desc test3; -- unique 关键字 优里龟 表示该列不能重复,但是如果是null,就可以重复 unique + not null = primary key 主键 create table test4( id int unique, `name` varchar(30), `email` varchar(30) ) select * from test4; insert into test4 values(1 , '张三' , '234212'); insert into test4 values(1 , '张三' , '234212'); insert into test4 values(null , '张三' , '234212'); insert into test4 values(null , '张三11' , '234212'); desc test4;
外键约束
-- 外键约束 foreign key(外键) 外键约束 1.外键指向的表的字段,要求必须是unique 或者 primary key 约束的 2.表的类型是innodb,这样的表才支持外键 3.外键字段的类型必须与主键字段的类型一致(长度可以不同) 4.外键字段的值,必须在主键字段里面出现过,或者为null(前提是外键字段可以为null) 5.一旦建立主外键的关系,数据就不能随便删除了。也就是必须主键的值先删,才可以删掉外键的值。 select * from test4; desc test4; create table test5( id int primary key, `name` varchar(30), test4_id int, foreign key (test4_id) REFERENCES test4(id) ) select * from test5; insert into test5 values (1,'张三' , 1); 插入成功 insert into test5 values (2,'张三' , 2); 插入失败,因为test4没有id为2的。 -- 删除数据 delete from test4 where id =1; 删除失败 删除成功。需要先删掉使用到的其他表的外键,才可以删掉这个数据。 delete from test5 where id =1; delete from test4 where id =1; 实际开发当中,基本上不会用到外键约束,都是逻辑约束。
check
用于强制满足某些条件。
条件:mysql8.0以下不支持这个约束条件。以上就可以。oracle和SqlServer都满足。
create table test6( id int unique CHECK(id > 10 and id < 20), `name` varchar(30) check (`name` in ('石' , '张三' , '李四')), `email` varchar(30) ) insert into test6 values(1 , '张三' , 'asdasdad'); 插入失败,不满足约束条件。 insert into test6 values(11 , '张三' , 'asdasdad'); 插入成功,满足约束条件。 insert into test6 values(16 , '张三1' , 'asdasdad'); 插入失败,不满足约束条件。 insert into test6 values(16 , '还好' , 'asdasdad'); 插入成功,满足约束条件。 select * from test6; desc test6;
DEFAULT
给个默认值。DEFAULT create table test7( id int unique CHECK(id > 10 and id < 20), `name` varchar(30) check (`name` in ('与' , '张三' , '李四')), `email` varchar(30) DEFAULT '2648532' ) select * from test7; insert into test7(id , `name`) values(11 , '张三'); 一般直接给`email` varchar(30) DEFAULT '' 就可以了。
自增
auto_increment
在要自增的字段后面加上这个就可以了。
在插入的时候,自增的字段插入null就可以,实现自增了。或者直接不指明插入这个列,就可以了。
1.一般来说,也主键一起使用。
2.如果单独使用,也可以,但是需要配合unique一起来使用。
3.都是与int也就是整形使用,小数也可以,但是不推荐。