全卷积扩散模型FCDM:高效图像生成新方案
2026/5/9 2:06:06
MySQL 中的数据库约束是作用于数据表列 / 行的规则,用于限制存入数据的格式、范围和关联性,核心目的是保障数据的完整性(准确性、一致性),避免无效、冗余或冲突的数据进入数据库,是数据库设计和数据质量管理的核心环节。
MySQL 支持 6 类核心约束,可分为列级约束(仅作用于单个列)和表级约束(可作用于多个列),具体如下:
| 约束类型 | 核心作用 | 适用场景 | 示例语法(创建表时) |
|---|---|---|---|
| 非空约束(NOT NULL) | 限制列的值不能为 NULL(空值) | 必须填写的字段(如用户名、手机号) | username VARCHAR(50) NOT NULL |
| 唯一约束(UNIQUE) | 限制列的值在整张表中唯一(可包含一个 NULL) | 唯一标识字段(如邮箱、身份证号) | email VARCHAR(100) UNIQUE |
| 主键约束(PRIMARY KEY) | 非空 + 唯一,唯一标识表中每一行(一张表仅一个主键) | 核心标识字段(如用户 ID、订单 ID) | id INT PRIMARY KEY AUTO_INCREMENT |
| 外键约束(FOREIGN KEY) | 建立两张表的关联,限制外键列的值必须来自主表的主键 / 唯一列 | 关联表(如订单表关联用户表) | user_id INT FOREIGN KEY REFERENCES user(id) |
| 检查约束(CHECK) | 限制列的值满足指定条件(MySQL 8.0.16+ 正式支持) | 数值范围 / 格式校验(如年龄、金额) | age INT CHECK (age >= 0 AND age <= 120) |
| 默认约束(DEFAULT) | 列未赋值时自动填充默认值 | 可选字段(如性别、状态) | gender CHAR(1) DEFAULT '男' |
order_id + product_id)。AUTO_INCREMENT实现主键自增(仅适用于 INT/BIGINT 等数值类型),避免手动赋值冲突。sql
CREATE TABLE user ( id INT PRIMARY KEY AUTO_INCREMENT, -- 自增主键 username VARCHAR(50) NOT NULL );ON DELETE/UPDATE定义关联行为:ON DELETE CASCADE:主表删除,从表关联数据同步删除(如删除用户时,删除其所有订单);ON DELETE SET NULL:主表删除,从表外键列设为 NULL(需外键列允许 NULL);ON DELETE RESTRICT:主表存在关联数据时,禁止删除(默认行为)。sql
CREATE TABLE order ( order_id INT PRIMARY KEY, user_id INT, FOREIGN KEY (user_id) REFERENCES user(id) ON DELETE CASCADE );sql
CREATE TABLE product ( price DECIMAL(10,2) CHECK (price > 0), -- 价格必须大于0 stock INT CHECK (stock >= 0) -- 库存不能为负 );sql
CREATE TABLE student ( id INT PRIMARY KEY AUTO_INCREMENT, -- 主键+自增 name VARCHAR(50) NOT NULL, -- 非空 phone VARCHAR(11) UNIQUE, -- 唯一 grade INT DEFAULT 0, -- 默认值 class_id INT, FOREIGN KEY (class_id) REFERENCES class(id), -- 外键 score INT CHECK (score >= 0 AND score <= 100) -- 检查 );sql
-- 给student表添加唯一约束(手机号) ALTER TABLE student ADD UNIQUE (phone); -- 给student表添加外键约束 ALTER TABLE student ADD FOREIGN KEY (class_id) REFERENCES class(id);sql
-- 删除主键约束 ALTER TABLE student DROP PRIMARY KEY; -- 删除唯一约束(需先查约束名:SHOW INDEX FROM student;) ALTER TABLE student DROP INDEX phone; -- 删除外键约束(需先查约束名:SHOW CREATE TABLE student;) ALTER TABLE student DROP FOREIGN KEY student_ibfk_1;