MySQL约束的分类、创建、删除和修改

约束的分类

1、NOT NULL 非空约束,用于约束字段值不能为空
2、DEFAULT 默认约束,用于约束字段有默认值
3、PRIMARY KEY 主键约束,用于约束字段的唯一、非空属性
4、UNIQUE 唯一约束,用于约束字段具有唯一的值
5、CHECK 检查约束,用于检查数据表中字段是否有效
6、FOREIGN KEY 外键约束,通常与主键一起使用,确保数据的一致性

创建表使添加约束

-- students表
CREATE TABLE student (
    id INT AUTO_INCREMENT PRIMARY KEY,  -- 主键自增
    name VARCHAR(50) NOT NULL,         -- 非空字段
    gender ENUM('Male', 'Female') NOT NULL, -- 枚举类型
    age TINYINT UNSIGNED CHECK (age >= 18), -- 检查约束
    email VARCHAR(255) UNIQUE,         -- 唯一性约束
    department_id INT NOT NULL,        -- 外键约束
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP -- 默认值约束
    CONSTRAINT fk_department FOREIGN KEY (department_id) REFERENCES department(id)
);
-- department表
CREATE TABLE department (
    id INT AUTO_INCREMENT PRIMARY KEY,  -- 主键自增
    name VARCHAR(50) NOT NULL          -- 非空字段
);

解释:

  1. id 声明为主键,并使用 AUTO_INCREMENT 关键字进行自增。
  2. name 声明为 VARCHAR(50) 类型的非空字段,即 NOT NULL
  3. gender 声明为 ENUM('Male', 'Female') 类型的非空字段,即只能取这两个枚举值。
  4. age 声明为 TINYINT UNSIGNED 类型,使用 CHECK 约束确保其值大于等于 18。
  5. email 声明为 VARCHAR(255) 类型的唯一性约束字段,即 UNIQUE
  6. department_id 声明为 INT 类型的外键约束字段,即 NOT NULL,并在最后定义了一个名为 fk_department 的外键约束,它关联到 department 表中的 id 字段。
  7. created_at 声明为 TIMESTAMP 类型,并设置默认值为当前时间戳,即 DEFAULT CURRENT_TIMESTAMP
  8. CONSTRAINT 关键字用于在创建表时定义约束条件,它可以用于定义多种类型的约束,包括主键、唯一、检查、外键等。

修改表并删除约束

这将删除名为 email 的索引,因为默认情况下唯一性约束是通过创建一个唯一索引来实现的。

ALTER ATBLE student
	DROP INDEX email

如果我们显式地为一个列创建唯一性约束,并且给这个约束命名,例如:

ALTER TABLE student 
	ADD CONSTRAINT uk_email UNIQUE (email);

这将为 student 表中的 email 列创建一个名为 uk_email 的唯一性约束。要删除这个唯一性约束,就需要使用 DROP CONSTRAINT 语法来删除它,而不能直接使用 DROP INDEX。因为这种情况下,唯一性约束和唯一性索引不再是同一个概念。

ALTER TABLE student DROP CONSTRAINT uk_email;

修改表添加约束条件

-- 添加唯一约束
ALTER TABLE student
	ADD UNIQUE(email);
-- 添加外键约束条件
ALTER TABLE student
	ADD CONSTRAINT fk_department
	FOREIGN KEY (department_id) 
	REFERENCE department(id);

猜你喜欢

转载自blog.csdn.net/weixin_45735297/article/details/129499112
今日推荐