专栏目录请点击
列级约束
列级约束一般在定义列的时候就直接把约束定义上
CREATE TABLE studentinfo (
id INT PRIMARY KEY,
stuName VARCHAR(20) NOT NULL,
gender CHAR(1) CHECK(gender="男" OR gender="女"),
age INT DEFAULT 18,
majorId INT REFERENCES magor(id)
)
DESC studentinfo;
通过desc我们可以看到相关的表结构
或者使用SHOW INDEX FROM studentinfo; 来查看所有的索引,包括主键、外键、唯一值
表级约束
表级约束需要在表的所有的字段下面定义约束,语法如下
[CONSTRAINT 约束名] 约束类型(字段名)
如上的表格,可以也可以用一下定义
CREATE TABLE studentinfo (
id INT,
stuName VARCHAR(20),
gender CHAR(1) ,
age INT DEFAULT 18,
majorId INT
CONSTRAINT pk PRIMARY KEY(id),
CONSTRAINT uq UNIQUE(stuName),
CONSTRAINT ck CHECK(gender="男" OR gender="女")
CONSTRAINT fk_student_major FOREIGN KEY(majorId) REFERENCES major(id)
)
主键与唯一键
类型 | 保证唯一性 | 是否允许为空 | 数量 | 是否允许组合 |
---|
主键 | ? | ? | 最多有一个 | 可以,但不推荐 | 唯一键 | ? | ? | 可以有多个 | 可以,但不推荐 |
外键
- 在从表中设置外键关系
- 从表的外键列的类型和主表的关联列额类型要求一致或者兼容,名称无要求
- 主表的关联列必须是一个key(一般是主键或者唯一)
- 插入数据的时候要先插入主表在插入从表,删除数据的时候,要先删除从表,在删除主表
标识列
标识列又称自增长列,可以不用手动插入值,系统提供默认的序列值
特点
- 标识列不一定和主键搭配,但是要求是一个key
- 一个表最多有一个标识列
- 标识列的类型只能是数值
- 标识列可以通过
SET auto_increment_incremenet=2; 来设置步长
创建表时
在创建表的时候设置标识列
CREATE TABLE studentinfo (
id INT PRIMARY KEY AUTO_INCREMENT,
)
修改表时
修改
ALTER TABLE studentinfo MODIFY COLUMN id INT PRIMARY KEY AUTO_INCREMENT;
删除
也相当于修改列
ALTER TABLE studentinfo MODIFY COLUMN id INT PRIMARY KEY;
约束的增删
修改表时添加
- 添加主键约束
ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (index_col_name)
CONSTRAINT 是可以添加,也可以不添加。如果添加的话,表示为约束起名字的意思。
ALTER TABLE user2 ADD CONSTRAINT pk_user2_id PRIMARY KEY(id);
- 添加唯一约束
ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY] [index_name] [index_type](index_col_name,…)
ALTER TABLE user2 ADD UNIQUE(username);
- 添加外键约束
ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name,…) reference_definition
ALTER TABLE user2 ADD foregin KEY(pid) REFERENCES provinces(id);
- 添加默认约束
ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name,…) reference_definition
ALTER TABLE user2 ALTER age SET DEFAULT 15;
修改表时删除
- 删除非空约束
ALTER TABLE studentinfo MODIFY COLUMN stuName VARCHAR(20) NULL;
- 删除默认约束
ALTER TABLE studentinfo MODIFY COLUMN age INT;
- 删除主键
ALTER TABLE studentinfo DROP PRIMARY KEY;
- 删除唯一
ALTER TABLE studentinfo DROP INDEX `name`;
- 删除外键
ALTER TABLE studentinfo DROP FOREIGN KEY;
|