Bagaimana untuk memintas kekangan semakan dalam SQL
P粉642436282
P粉642436282 2024-04-01 15:19:51
0
1
506

Seni bina

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
        );

Saya ingin menambah data ini pada jadual tetapi tidak boleh menambah 0 mata.

"CS-001", bertajuk "Seminar Mingguan", 0 Kredit

Sisipkan pertanyaan

INSERT INTO `course`(`course_id`, `title`, `credits`) VALUES ('CS-001','Weekly Seminar','0');

Hasil pertanyaan:

Adakah terdapat cara lain untuk memasukkan data yang sama tanpa mengubah struktur jadual?

P粉642436282
P粉642436282

membalas semua(1)
P粉554842091

Pilihan

foreign_key_checks mempengaruhi penguatkuasaan kunci asing, bukan menyemak penguatkuasaan kekangan.

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.

Anda mesti menggunakan ALTER TABLE, tetapi anda tidak perlu mengeluarkan kekangan.

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)

Tetapi sebaik sahaja baris dimasukkan, tiada cara untuk mendayakan semula kekangan semak kerana baris itu akan disemak semula apabila kekangan didayakan.

mysql> alter table course alter check course_chk_1 enforced;
ERROR 3819 (HY000): Check constraint 'course_chk_1' is violated.

Anda kemudiannya boleh memadam atau mengemas kini baris yang melanggar kekangan semak dan mendayakan semula kekangan tersebut.

Jika perlu boleh bertanya credits 列插入零值,那么 check (credits > 0) 似乎不是正确的选择那个专栏。也许需要检查(学分> = 0).

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan