架构
create table course
(course_id varchar(8),
title varchar(50),
dept_name varchar(20),
credits numeric(2,0) check (credits > 0),
primary key (course_id),
foreign key (dept_name) references department (dept_name)
on delete set null
);
我想将此数据添加到表中,但无法添加 0 个积分。
“CS-001”,标题为“每周研讨会”,0 学分
插入查询
INSERT INTO `course`(`course_id`, `title`, `credits`) VALUES ('CS-001','Weekly Seminar','0');
查询结果:
有没有其他方法可以在不改变表结构的情况下插入相同的数据?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
foreign_key_checks选项影响外键强制执行,而不是检查约束强制执行。mysql> set foreign_key_checks=0; Query OK, 0 rows affected (0.00 sec) mysql> INSERT INTO `course`(`course_id`, `title`, `credits`) VALUES ('CS-001','Weekly Seminar','0'); ERROR 3819 (HY000): Check constraint 'course_chk_1' is violated.您必须使用
ALTER TABLE,但不必删除约束。mysql> alter table course alter check course_chk_1 not enforced; Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> INSERT INTO `course`(`course_id`, `title`, `credits`) VALUES ('CS-001','Weekly Seminar','0'); Query OK, 1 row affected (0.00 sec)但是一旦插入该行,就无法重新启用检查约束,因为启用约束时将重新检查行。
您可以随后删除或更新违反检查约束的行,然后重新启用约束。
如果您需要能够向
credits列插入零值,那么check (credits > 0)似乎不是正确的选择那个专栏。也许需要检查(学分> = 0)。