定义:主键约束在表中定义一个主键来唯一确定表中每一行数据的标识符。(唯一、非空)
--id为主键
create table user(
id int primary key,
name varchar(20)
);
联合主键:多个字段组成一个主键,每个单独的字段允许重复,但不能都重复。
--id,name组成复合主键
create table user2(
id int ,
name varchar(20),
password varchar(20),
primary key(id,name)
);
---添加主键
alter table user add primary key(id);
---删除主键
alter table user drop primary key;
---通过修改字段的方式添加主键
alter table user modify id int primary key;
与主键约束经常搭配使用
--id为主键且自增
create table user3(
id int primary key auto_increment,
name varchar(20)
);
唯一约束保证在一个字段或者一组字段里的数据与表中其它行的数据相比是唯一的。
---id为唯一约束
create table user5(
id int unique,
name varchar(20)
);
或者是
---id为唯一约束
create table user5(
id int,
name varchar(20),
unique(id)
);
当约束的是一组字段时,只要不同时重复即可。
---约束的是一组字段
create table user5(
id int,
name varchar(20),
unique(id,name)
);
但是分别添加的unique约束,是每个都不能重复的,其describe如下:
非空约束保证字段不能为空。
create table user7(
id int not null,
name varchar(20)
);
默认约束指定某列的默认值,如果没有传值,则使用默认值。
create table user7(
id int,
name varchar(20),
age int default 10
);
外键约束(FOREIGN KEY)用来在两个表的数据之间建立链接,它可以是一列或者多列。一个表可以有一个或多个外键。涉及到两个表:主表、从表。
----班级表
create table classes(
id int primary key,
name varchar(20)
);
----学生表
create table students(
id int primary key,
name varchar(20),
class_id int,
foreign key(class_id) references classes(id)
);
外键的作用:先向classes中添加记录
insert into classes values(1,'一班');
insert into classes values(2,'二班');
insert into classes values(3,'三班');
insert into classes values(4,'四班');
mysql> select * from classes;
+----+--------+
| id | name |
+----+--------+
| 1 | 一班 |
| 2 | 二班 |
| 3 | 三班 |
| 4 | 四班 |
+----+--------+
4 rows in set (0.00 sec)
再向students中添加记录,班级id的值不能在1-4之外
insert into students values(1001,'张三',1);
Query OK, 1 row affected (0.07 sec)
insert into students values(1002,'李四',5);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`test`.`students`, CONSTRAINT `students_ibfk_1` FOREIGN KEY (`class_id`) REFERENCES `classes` (`id`))
1. 主表中没有的数据值,在从表中,是不可以使用的。
2. 主表中的记录被从表引用,是不可以删除的。