Heim > Fragen und Antworten > Hauptteil
Architektur
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 );
Ich möchte diese Daten zur Tabelle hinzufügen, kann aber keine 0 Punkte hinzufügen.
„CS-001“, mit dem Titel „Wöchentliches Seminar“, 0 Credits
Abfrage einfügen
INSERT INTO `course`(`course_id`, `title`, `credits`) VALUES ('CS-001','Weekly Seminar','0');
Abfrageergebnisse:
Gibt es eine andere Möglichkeit, dieselben Daten einzufügen, ohne die Tabellenstruktur zu ändern?
P粉5548420912024-04-02 09:49:12
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)
但是一旦插入该行,就无法重新启用检查约束,因为启用约束时将重新检查行。
mysql> alter table course alter check course_chk_1 enforced; ERROR 3819 (HY000): Check constraint 'course_chk_1' is violated.
您可以随后删除或更新违反检查约束的行,然后重新启用约束。
如果您需要能够向 credits
列插入零值,那么 check (credits > 0)
似乎不是正确的选择那个专栏。也许需要检查(学分> = 0)
。