MySQL 创建表时 对某一属性进行check约束 该怎么写
时间: 2024-05-13 13:20:31 浏览: 9
在 MySQL 中,可以使用 CHECK 约束来限制数据插入或更新时的条件,以确保数据的完整性。但是,MySQL 不支持在创建表时直接添加 CHECK 约束。
要实现类似 CHECK 约束的功能,可以使用触发器来实现。例如,假设要创建一个名为 students 的表,其中一个属性是 age,要求 age 的取值必须在 18 到 60 之间,可以按照以下步骤进行操作:
1. 创建 students 表,不包含 CHECK 约束:
```
CREATE TABLE students (
id INT PRIMARY KEY,
name VARCHAR(50),
age INT
);
```
2. 创建一个 BEFORE INSERT 和 BEFORE UPDATE 触发器,检查 age 是否在合法范围内:
```
DELIMITER //
CREATE TRIGGER students_check_age
BEFORE INSERT ON students
FOR EACH ROW
BEGIN
IF NEW.age < 18 OR NEW.age > 60 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Age must be between 18 and 60';
END IF;
END //
DELIMITER ;
DELIMITER //
CREATE TRIGGER students_check_age_update
BEFORE UPDATE ON students
FOR EACH ROW
BEGIN
IF NEW.age < 18 OR NEW.age > 60 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Age must be between 18 and 60';
END IF;
END //
DELIMITER ;
```
3. 插入数据时,如果 age 不在合法范围内,将会抛出异常:
```
INSERT INTO students (id, name, age) VALUES (1, 'Alice', 17);
-- ERROR 1644 (45000): Age must be between 18 and 60
INSERT INTO students (id, name, age) VALUES (2, 'Bob', 61);
-- ERROR 1644 (45000): Age must be between 18 and 60
INSERT INTO students (id, name, age) VALUES (3, 'Charlie', 30);
-- OK
```
4. 更新数据时,同样会检查 age 是否在合法范围内:
```
UPDATE students SET age = 17 WHERE id = 1;
-- ERROR 1644 (45000): Age must be between 18 and 60
UPDATE students SET age = 61 WHERE id = 2;
-- ERROR 1644 (45000): Age must be between 18 and 60
UPDATE students SET age = 40 WHERE id = 3;
-- OK
```
通过以上步骤,可以实现类似 CHECK 约束的功能。注意,使用触发器实现 CHECK 约束可能会影响性能,因为每次插入或更新数据时都要执行触发器。