主键约束
使某个字段不重复且不得为空,确保表内数据的唯一性。
CREATE TABLE user(
id INT PRIMARY KEY,
name VARCHAR(20)
);
INSERT INTO user VALUES (1,'张三');
+----+------+
| id | name |
+----+------+
| 1 | 张三 |
+----+------+
运行DESCRIBE user;
±------±------------±-----±----±--------±------+
| Field | Type | Null | Key | Default | Extra |
±------±------------±-----±----±--------±------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(20) | YES | | NULL | |
±------±------------±-----±----±--------±------+
发现 id是不可以为null 而且 key的值 也变为:PRI(primary)
联合主键
联合主键的每一个字段不能为空,并且加起来不能和已设置的联合主键重复。
```sql
create TABLE user(
id int,
name varchar(20),
passw varchar(20),
primary key(id,name)
);
运行DESCRIBE user2;
±---------±------------±-----±----±--------±------+
| Field | Type | Null | Key | Default | Extra |
±---------±------------±-----±----±--------±------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(20) | NO | PRI | NULL | |
| password | varchar(20) | YES | | NULL | |
±---------±------------±-----±----±--------±------+
INSERT INTO user2 VALUES (1,'老王','123456');
INSERT INTO user2 VALUES (2,'老王','123456');
±—±-----±---------+
| id | name | password |
±—±-----±---------+
| 1 | 老王 | 123456 |
| 2 | 老王 | 123456 |
±—±-----±---------+
说明了复合主键只要所有的字段都不是相同的情况下可以允许其中的字段重复:
自增约束
自增约束的主键由系统自动递增分配
create table user(
id int primary key AUTO_INCREMENT,
name varchar(20)
);
添加主键约束
如果忘记设置主键,可以通过以下两种方式设置
alter table user add primary key(id);
alter table user modify id int primary key;
删除主键
alter table user drop primary key;