主键约束
主键是非空且唯一的,只允许一个主键,主键可以是单个字段或多字段的组合(联合主键)。
可以根据主键定位到唯一一行的数据。
CREATE TABLE user(
id INT PRIMARY KEY,
name VARCHAR(20),
password VARCHAR(20)
);
CREATE TABLE user(
id INT,
name VARCHAR(20),
password VARCHAR(20),
PRIMARY KEY(id, name)
);
以上是创建表时定义主键、联合主键的方法。
下面是在表已经创建后添加、删除主键约束。
ALTER TABLE user ADD PRIMARY KEY(id);
ALTER TABLE user ADD PRIMARY KEY(id, name);
ALTER TABLE user MODIFY id INT PRIMARY KEY;
ALTER TABLE user DROP PRIMARY KEY;
自增约束
AUTO_INCREMENT可以约束任何一个字段,该字段不一定是PRIMARY KEY字段,也就是说自增的字段并不等于主键字段。
CREATE TABLE user(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20),
password VARCHAR(20)
);
唯一约束
被修饰的字段的值不可重复。
CREATE TABLE user(
id INT,
name VARCHAR(20) UNIQUE,
UNIQUE(id)
);
ALTER TABLE user ADD UNIQUE(name);
ALTER TABLE user MODIFY name VARCHAR(20) UNIQUE;
ALTER TABLE user DROP INDEX name;
非空约束
被修饰的字段不能为空。
CREATE TABLE user(
id INT,
name VARCHAR(20) NOT NULL
);
默认约束
被修饰的字段如果在插入字段时没有定义其值就使用默认值。
CREATE TABLE user(
id INT,
name VARCHAR(20) DEFAULT '张三'
);
外键约束
上面介绍的键约束都只涉及一个表,外键约束设计两个表,一个主表一个副表。
副表外键不可有主表字段不存在的值,主表中的数据如果被附副表引用了,那么是不可以删除主表对应数据的。
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)
);