zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

sql之约束

SQL 约束
2023-09-11 14:19:18 时间

专栏目录请点击

列级约束

列级约束一般在定义列的时候就直接把约束定义上

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) # 外键
)

主键与唯一键

类型保证唯一性是否允许为空数量是否允许组合
主键最多有一个可以,但不推荐
唯一键可以有多个可以,但不推荐

外键

  1. 在从表中设置外键关系
  2. 从表的外键列的类型和主表的关联列额类型要求一致或者兼容,名称无要求
  3. 主表的关联列必须是一个key(一般是主键或者唯一)
  4. 插入数据的时候要先插入主表在插入从表,删除数据的时候,要先删除从表,在删除主表

标识列

标识列又称自增长列,可以不用手动插入值,系统提供默认的序列值

特点

  1. 标识列不一定和主键搭配,但是要求是一个key
  2. 一个表最多有一个标识列
  3. 标识列的类型只能是数值
  4. 标识列可以通过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;

约束的增删

修改表时添加

  1. 添加主键约束
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);
  1. 添加唯一约束
ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY] [index_name] [index_type](index_col_name,)
ALTER TABLE user2 ADD UNIQUE(username);
  1. 添加外键约束
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);
  1. 添加默认约束
ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name,) reference_definition
ALTER TABLE user2 ALTER age SET DEFAULT 15;

修改表时删除

  1. 删除非空约束
ALTER TABLE studentinfo MODIFY COLUMN stuName VARCHAR(20) NULL;
  1. 删除默认约束
ALTER TABLE studentinfo MODIFY COLUMN age INT;
  1. 删除主键
ALTER TABLE studentinfo DROP PRIMARY KEY;
  1. 删除唯一
ALTER TABLE studentinfo DROP INDEX `name`;
  1. 删除外键
ALTER TABLE studentinfo DROP FOREIGN KEY;