Maison > Questions et réponses > le corps du texte
Architecture
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 );
Je souhaite ajouter ces données au tableau mais je ne peux pas ajouter 0 point.
"CS-001", intitulé "Séminaire hebdomadaire", 0 crédit
Insérer une requête
INSERT INTO `course`(`course_id`, `title`, `credits`) VALUES ('CS-001','Weekly Seminar','0');
Résultats de la requête :
Existe-t-il un autre moyen d'insérer les mêmes données sans modifier la structure du tableau ?
P粉5548420912024-04-02 09:49:12
L'option
foreign_key_checks
affecte l'application des clés étrangères, et non l'application des contraintes.
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.
Vous devez utiliser ALTER TABLE
, mais vous n'êtes pas obligé de supprimer la contrainte.
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)
Mais une fois la ligne insérée, il n'y a aucun moyen de réactiver la contrainte de vérification car la ligne sera revérifiée lorsque la contrainte sera activée.
mysql> alter table course alter check course_chk_1 enforced; ERROR 3819 (HY000): Check constraint 'course_chk_1' is violated.
Vous pouvez ensuite supprimer ou mettre à jour la ligne qui viole la contrainte de vérification et réactiver la contrainte.
Si vous avez besoin de pouvoir demander credits
列插入零值,那么 check (credits > 0)
似乎不是正确的选择那个专栏。也许需要检查(学分> = 0)
.