【JavaWeb】:MySQL 约束(五种)

53 阅读3分钟

我正在参加「掘金·启航计划」

约束

什么是约束?

  • 约束是作用于表中列上的规则,用于限制加入表的数据;
  • 约束的存在保证了数据库中数据的正确性、有效性以及完整性。

约束的分类

  • 非空约束NOT NULL ,保证列中所有数据不能有 null 值
  • 唯一约束UNIQUE ,保证列中所有数据各不相同
  • 主键约束PRIMARY KEY ,主键是一行数据的唯一标识,要求非空且唯一
  • 默认约束DEFAULT ,保存数据时,未指定值则采用默认值
  • 检查约束CHECK ,保证列中的值满足某一条件(MySQL中没有检查约束)
  • 外键约束FOREIGN KEY ,外键用于让两个表的数据之前建立链接,保证数据的一致性和完整性。

举例子

CREATE TABLE emp (
    -- 员工 id ,设置为主键约束,并且自增长
    id INT PRIMARY KEY auto_increment,
    -- 员工姓名 非空且唯一
    ename VARCHAR(20) NOT NULL UNIQUE,
    -- 入职日期 非空
    joindate DATE NOT NULL,
    -- 工资 非空
    salary DOUBLE(7, 2) NOT NULL,
    -- 奖金 默认为 0
    bonus DOUBLE(7, 2) DEFAULT 0
);

非空约束

概念

  • NOT NULL:非空约束用于保证列中的所有数据不能有 null

语法

添加非空约束:

-- 创建表时添加非空约束:
CREATE TABLE 表名{
    列名 数据类型 NOT NULL,
    ...
};

-- 键完表后添加非空约束:
ALTER TABLE 表名 MODIFY 字段名 数据类型 NOT NULL;

删除非空约束:

ALTER TABLE 表名 MODIFY 字段名 数据类型

唯一约束

概念

  • UNIQUE:唯一约束,保证列中所有数据各不相同(AUTO_INCREMENT:当不指定值时自动增长)

语法

添加唯一约束:

-- 创建表时添加唯一约束
-- 方式一:
CREATE TABLE 表名{
    列名 数据类型 UNIQUE [AUTO_INCREMENT],
    ...
};


-- 方式二:
CREATE TABLE 表名{
    列名 数据类型,
    ...
    [CONSTRAINT][约束名称] UNIQUE(列名)
};


-- 键完表后添加唯一约束:
ALTER TABLE 表名 MODIFY 字段名 数据类型 UNIQUE;

删除唯一约束:

ALTER TABLE 表名 DROP INDEX 字段名;

主键约束

概念

  • PRIMARY KEY:主键是一行数据的唯一标识,要求非空且唯一
  • 一张表只能有一个主键
  • 当某一列是数字类型并且唯一(当作主键约束),此时可以添加自动增长的属性,即auto_increment

语法

添加主键约束:

-- 创建表时添加主键约束
-- 方式一:
CREATE TABLE 表名{
    列名 数据类型 PRIMARY KEY [AUTO_INCREMENT];
    ...
};
-- 方式二:
CREATE TABLE 表名{
    列名 数据类型,
    ...
    [CONSTRAINT][约束名称] PRIMARY KEY(列名)
};
​
-- 建完表后添加主键约束:
ALTER TABLE 表名 ADD PRIMARY KEY(字段名);

删除主键约束:

ALTER TABLE 表名 DROP PRIMARY KEY;

默认约束

概念

  • DEFAULT:保存数据时未指定值则采用默认值

语法

添加默认约束:

-- 创建表时添加默认约束:
CREATE TABLE 表名{
    列名 数据类型  默认值,
    ...
};

-- 建完表后添加默认约束:
ALTER TABLE 表名 ALTER 列名 SET DEFAULT 默认值;

删除默认约束:

ALTER TABLE 表名 ALTER 列名 DROP DEFAULT;

外键约束

概念

  • FOREIGN KEY:外键是用来让两个表的数据之间建立链接,以保证数据的一致性和完整性。

语法

添加外键约束:

-- 创建表时添加外键约束:
CREATE TABLE 表名 {
	列名 数据类型,
	...
	[CONSTRAINT] [外键名称] FOREIGN KEY(外键列名) REFERENCES 主表(主表列名)
};

-- 键完表后添加外键约束:
ALTER TABLE 表名
ADD CONSTRAINT 外键名 
FOREIGN KEY(外键列名)
REFERENCES 主表(主表列名);

删除外键约束:

ALTER TABLE 表名 DROP FOREIGN KEY 外键名;

举例子

-- 部门表:
CREATE TABLE dept {
	id int primary key auto_increment,
	dep_name varchar(20),
	addr varchar(20)
};

-- 员工表:
CREATE TABLE emp {
	id int primary key auto_increment,
	name varchar(20),
	age int,
	dep_id int,
	
	-- 添加外键(dep_id 关联 dept 表的 id 主键):
	CONSTRAINT fk_emp_dept FOREIGN KEY(dep_id) REFERENCES dept(id);
};

-- 添加 2 个部门:
INSERT INTO
	dept(dep_name, addr)
VALUES
	('研发部', '广州'),
	('销售部', '上海');

-- 添加员工, dep_id 表示员工所在的部门:
INSERT INTO
	emp (NAME, age, dep_id)
VALUES
	('张三', 22, 1),
	('李四', 20, 1),
	('王五', 18, 2),
	('赵六', 20, 2),
	('孙七', 22, 3),
	('周八', 18, 3);