Jadual Kandungan
Kekangan
1.NULL
2.SEMAK
3.UNIK
4.KUNCI UTAMA
5.KUNCI ASING
6.DEFAULT
Rumah pangkalan data tutorial mysql Analisis mendalam tentang 6 jenis kekangan biasa dalam MySQL

Analisis mendalam tentang 6 jenis kekangan biasa dalam MySQL

Sep 16, 2021 pm 07:55 PM
mysql kekangan

Analisis mendalam tentang 6 jenis kekangan biasa dalam MySQL

Maksud literal kekangan adalah untuk menetapkan atau mengehadkan bagaimana sesuatu harus dilakukan Dalam MySQL, kekangan adalah untuk menentukan peraturan untuk data dalam jadual data, iaitu, untuk mengehadkan data. Ini adalah untuk memastikan kebolehpercayaan Sebagai contoh, nilai Null tidak dibenarkan muncul dalam lajur tertentu, kita akan menghadapi jenis kekangan berikut.

  • NOT NULL: Pastikan lajur tidak boleh mempunyai nilai NULL
  • CHECK: Pastikan nilai dalam lajur memenuhi syarat tertentu
  • UNIQUE: Pastikan nilai dalam lajur Semua nilai
  • PRIMARY KEY adalah berbeza: Gabungan NOT NULL dan UNIQUE secara unik mengenal pasti setiap baris dalam jadual
  • FOREIGN KEY: Kekangan kunci asing
  • DEFAULT: Jika tiada nilai dinyatakan, tetapkan nilai lalai untuk lajur

[Cadangan berkaitan: tutorial video mysql]

Kekangan

1.NULL

MySQL menggunakan NOT NULL untuk memastikan nilai Null akan tidak muncul dalam lajur. Semasa membuat jadual, formatnya adalah seperti berikut:

mysql> create table user(name varchar(255)not null);
Query OK, 0 rows affected (0.06 sec)
Salin selepas log masuk

Jika anda cuba memasukkan nilai nol, pengecualian akan dilemparkan.

mysql> insert user values(null);
ERROR 1048 (23000): Column 'name' cannot be null
Salin selepas log masuk

atau tambahkan kekangan NOT NULL baharu pada jadual sedia ada.

mysql> alter table user modify name varchar(255) not null;
Query OK, 0 rows affected (0.07 sec)
Records: 0  Duplicates: 0  Warnings: 0
Salin selepas log masuk

Padamkan kekangan NOT NULL.

mysql> alter table user modify name varchar(255)  null;
Query OK, 0 rows affected (0.09 sec)
Records: 0  Duplicates: 0  Warnings: 0
Salin selepas log masuk

2.SEMAK

Jika anda ingin menentukan kekangan bersyarat pada lajur, anda boleh menggunakan CHECK, seperti berikut untuk memaksa medan umur untuk lebih besar daripada 18 dan kurang daripada 80, Jika tidak, ralat akan dilaporkan.

mysql> create table user(age int(11) check(age>18 and age <80));
Query OK, 0 rows affected, 1 warning (0.06 sec)
Salin selepas log masuk

Ujian sisipan, anda boleh menemui pengecualian lontaran 9 dan 81 semasa memasukkan.

mysql> insert user values(9);
ERROR 3819 (HY000): Check constraint &#39;user_chk_1&#39; is violated.

mysql> insert user values(19);
Query OK, 1 row affected (0.01 sec)

mysql> insert user values(81);
ERROR 3819 (HY000): Check constraint &#39;user_chk_1&#39; is violated.
mysql>
Salin selepas log masuk

Anda juga boleh melakukan kekangan berbilang lajur, seperti umur mestilah lebih daripada 18 tahun dan bandar itu mestilah China.

mysql> create table user(age int(11),city varchar(255) ,check(age>18 and city=&#39;中国&#39;));
Query OK, 0 rows affected, 1 warning (0.05 sec)
Salin selepas log masuk

Sisipkan ujian.

mysql> insert user values(81,&#39;2&#39;);
ERROR 3819 (HY000): Check constraint &#39;user_chk_1&#39; is violated.
mysql> insert user values(8,&#39;2&#39;);
ERROR 3819 (HY000): Check constraint &#39;user_chk_1&#39; is violated.
mysql> insert user values(20,&#39;2&#39;);
ERROR 3819 (HY000): Check constraint &#39;user_chk_1&#39; is violated.
mysql> insert user values(20,&#39;中国&#39;);
Query OK, 1 row affected (0.01 sec)

mysql> insert user values(20,&#39;中国1&#39;);
ERROR 3819 (HY000): Check constraint &#39;user_chk_1&#39; is violated.
mysql> insert user values(85,&#39;中国&#39;);
Query OK, 1 row affected (0.01 sec)

mysql> insert user values(9,&#39;中国&#39;);
ERROR 3819 (HY000): Check constraint &#39;user_chk_1&#39; is violated.
Salin selepas log masuk

Anda juga boleh menentukan bahawa nilai lajur mestilah dalam set yang ditentukan, seperti jantina mestilah dalam set lelaki, perempuan, tidak diketahui dan shemale.

mysql> create table user(sex varchar(255) check (sex in (&#39;男&#39;,&#39;女&#39;,&#39;未知&#39;,&#39;人妖&#39;)));
Query OK, 0 rows affected (0.05 sec)
Salin selepas log masuk

Sisipkan ujian.

mysql> insert user values("男");
Query OK, 1 row affected (0.02 sec)

mysql> insert user values("男男");
ERROR 3819 (HY000): Check constraint &#39;user_chk_1&#39; is violated.
mysql> insert user values("女");
Query OK, 1 row affected (0.01 sec)

mysql> insert user values("人妖");
Query OK, 1 row affected (0.00 sec)
Salin selepas log masuk

Namakan kekangan dan padamkan kekangan.

mysql> create table user (age int(11) ,constraint CHK_AGE check(age>18));
Query OK, 0 rows affected, 1 warning (0.05 sec)

mysql> insert user values(5);
ERROR 3819 (HY000): Check constraint &#39;CHK_AGE&#39; is violated.

mysql> alter table user drop check CHK_AGE;
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> insert user values(5);
Query OK, 1 row affected (0.01 sec)
Salin selepas log masuk

Tetapi, pernahkah anda melihatnya ditulis seperti ini?

Teka apa yang berikut lakukan.

Ini sebenarnya adalah kes apabila penghakiman bersyarat, yang membenarkannya hanya memasukkan >=18, atau nombor antara 0-10.

CREATE TABLE `user` (`age` int(11) CHECK 
(((case when (`age` >=18) then 1 
else 
(case when age<10 and age >0 then 1 else 2 end) end) =1)));
Salin selepas log masuk

3.UNIK

UNIQUE kekangan memastikan tiada nilai pendua dalam lajur kedua-dua UNIQUE dan PRIMARY KEY adalah untuk satu lajur nilai Keunikan dijamin, tetapi UNIQUE boleh muncul beberapa kali dalam setiap jadual, manakala PRIMARY KEY hanya boleh muncul sekali.

Sebagai contoh, medan nama di bawah tidak boleh diulang.

mysql> create table user (name varchar(255),unique(name));
Query OK, 0 rows affected (0.07 sec)
Salin selepas log masuk

Sisipkan ujian.

mysql> insert user values("张三");
Query OK, 1 row affected (0.02 sec)

mysql> insert user values("张三");
ERROR 1062 (23000): Duplicate entry &#39;张三&#39; for key &#39;user.name&#39;mysql>
Salin selepas log masuk

Namakan kekangan ini dan padamkannya.

mysql> create table user (name varchar(255),constraint name_un unique(name));
Query OK, 0 rows affected (0.07 sec)

mysql> insert user values("张三");
Query OK, 1 row affected (0.02 sec)

mysql> insert user values("张三");
ERROR 1062 (23000): Duplicate entry &#39;张三&#39; for key &#39;user.name_un&#39;
mysql> alter table user drop index name_un;
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> insert user values("张三");
Query OK, 1 row affected (0.02 sec)
Salin selepas log masuk

Selepas memasukkan, anda boleh menggunakan pernyataan berikut untuk melihat pernyataan penciptaan.

mysql> show create table user;
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                 |
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+
| user  | CREATE TABLE `user` (
  `name` varchar(255) DEFAULT NULL,
  UNIQUE KEY `name_un` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
Salin selepas log masuk

Untuk mengalih keluar kekangan UNIQUE, anda boleh menggunakan pernyataan DROP INDEX atau ALTER TABLE:

mysql> DROP INDEX name_un ON user;
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> show create table user;
+-------+-----------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                |
+-------+-----------------------------------------------------------------------------------------------------------------------------+
| user  | CREATE TABLE `user` (
  `name` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |
+-------+-----------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
Salin selepas log masuk

untuk menambah pada jadual sedia ada.

mysql> alter table user add constraint name_un unique(name);
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0
Salin selepas log masuk

4.KUNCI UTAMA

Biasanya setiap jadual mengandungi nilai yang mengenal pasti setiap baris secara unik.

mysql> create table user (id int(11) ,age int(11),primary key (id));
Query OK, 0 rows affected, 2 warnings (0.06 sec)

mysql> insert user values(1,2);
Query OK, 1 row affected (0.02 sec)

mysql> insert user values(1,2);
ERROR 1062 (23000): Duplicate entry &#39;1&#39; for key &#39;user.PRIMARY&#39;mysql>
Salin selepas log masuk

5.KUNCI ASING

FOREIGN KEY digunakan untuk mengekang medan dalam jadual mestilah nilai yang wujud dalam medan dalam jadual lain , Tetapi dalam jadual lain, lajur ini tidak perlu menjadi kunci utama, tetapi ia mestilah indeks unik, jika tidak, penciptaan akan gagal.

Sebagai contoh, userId dalam jadual pesanan mesti merujuk kepada id dalam jadual pengguna Jika userId yang dimasukkan tidak wujud dalam jadual pengguna, ia tidak boleh dimasukkan.

mysql> create table orders (id int(11) primary key ,userId int(11) ,  FOREIGN KEY (userId) REFERENCES user(id) );
Query OK, 0 rows affected, 2 warnings (0.06 sec)

mysql> insert orders values(1,3);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`t`.`orders`, CONSTRAINT `orders_ibfk_1` FOREIGN KEY (`userId`) REFERENCES `user` (`id`))

mysql> insert orders values(1,1);
Query OK, 1 row affected (0.01 sec)
Salin selepas log masuk

Tetapi terdapat masalah Jika rekod dalam jadual utama (pengguna) dipadamkan atau dikemas kini, apakah yang sepatutnya berlaku kepada rekod dalam pesanan? , seperti dalam contoh di bawah, anda boleh mendapati bahawa ralat dilaporkan secara langsung.

mysql> update user set id =2 where id =1;

Cannot delete or update a parent row: a foreign key constraint fails (`t`.`orders`, CONSTRAINT `orders_ibfk_1` FOREIGN KEY (`userId`) REFERENCES `user` (`id`)
Salin selepas log masuk

MySQL menyediakan beberapa kekangan untuk membantu kami menyelesaikan masalah jenis ini Contohnya, apabila jadual pengguna dikemas kini, pesanan juga dikemas kini satu demi satu.

  1. HAD: Enggan mengemas kini atau memadam rekod dalam jadual induk jika terdapat rekod dalam jadual anak.

  2. CASCADE: Kemas kini atau padam rekod secara automatik dalam jadual anak apabila mengemas kini atau memadam rekod dalam jadual induk.

  3. SET NULL: Tetapkan nilai medan dalam jadual anak kepada batal apabila mengemas kini atau memadam rekod jadual induk.

Anda boleh mendapati bahawa RESTRICT digunakan secara lalai Mari ubah suainya supaya ia turut dikemas kini semasa mengemas kini dan null ditetapkan semasa memadam.

mysql> alter table orders add constraint orders_ibfk_1  FOREIGN KEY (`userId`) REFERENCES `user` (`id`) on update cascade on
delete set null;
Query OK, 0 rows affected (0.12 sec)
Records: 0  Duplicates: 0  Warnings: 0
Salin selepas log masuk

Kemas kini ujian

mysql> select * from user;
+----+--------+
| id | name   |
+----+--------+
|  1 | 张三   |
+----+--------+
1 row in set (0.00 sec)

mysql> select * from orders;
Empty set (0.00 sec)

mysql> insert orders values (1,1);
Query OK, 1 row affected (0.01 sec)

mysql> update user set id =2 where id =1;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from orders;
+----+--------+
| id | userId |
+----+--------+
|  1 |      2 |
+----+--------+
1 row in set (0.01 sec)
Salin selepas log masuk

Ujian pemadaman.

mysql> delete from user where id =2;
Query OK, 1 row affected (0.02 sec)

mysql> select * from orders;
+----+--------+
| id | userId |
+----+--------+
|  1 |   NULL |
+----+--------+
1 row in set (0.00 sec)
Salin selepas log masuk

6.DEFAULT

DEFAULT kekangan digunakan untuk menetapkan nilai lalai untuk lajur Jika medan tidak diberikan nilai, sistem akan secara automatik Medan disisipkan dengan nilai lalai Tiada tugasan bermakna medan itu tidak dinyatakan semasa memasukkan data Jika nilai nol ditentukan, nilai nol akhirnya disimpan.

mysql> create table user(age int(11) default 18);
Query OK, 0 rows affected, 1 warning (0.05 sec)

mysql> insert user values();
Query OK, 1 row affected (0.02 sec)

mysql> select * from user;
+------+
| age  |
+------+
|   18 |
+------+
1 row in set (0.00 sec)
Salin selepas log masuk

Alamat asal: https://juejin.cn/post/7000352993572814885

Pengarang: i Tingfeng Passing Night

Lebih lanjut -pengetahuan berkaitan, sila layari: Video Pengaturcaraan! !

Atas ialah kandungan terperinci Analisis mendalam tentang 6 jenis kekangan biasa dalam MySQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Akan R.E.P.O. Ada Crossplay?
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Mysql: Konsep mudah untuk pembelajaran mudah Mysql: Konsep mudah untuk pembelajaran mudah Apr 10, 2025 am 09:29 AM

MySQL adalah sistem pengurusan pangkalan data sumber terbuka. 1) Buat Pangkalan Data dan Jadual: Gunakan perintah Createdatabase dan Createtable. 2) Operasi Asas: Masukkan, Kemas kini, Padam dan Pilih. 3) Operasi lanjutan: Sertai, subquery dan pemprosesan transaksi. 4) Kemahiran Debugging: Semak sintaks, jenis data dan keizinan. 5) Cadangan Pengoptimuman: Gunakan indeks, elakkan pilih* dan gunakan transaksi.

Cara membuka phpmyadmin Cara membuka phpmyadmin Apr 10, 2025 pm 10:51 PM

Anda boleh membuka phpmyadmin melalui langkah -langkah berikut: 1. Log masuk ke panel kawalan laman web; 2. Cari dan klik ikon phpmyadmin; 3. Masukkan kelayakan MySQL; 4. Klik "Login".

MySQL: Pengenalan kepada pangkalan data paling popular di dunia MySQL: Pengenalan kepada pangkalan data paling popular di dunia Apr 12, 2025 am 12:18 AM

MySQL adalah sistem pengurusan pangkalan data relasi sumber terbuka, terutamanya digunakan untuk menyimpan dan mengambil data dengan cepat dan boleh dipercayai. Prinsip kerjanya termasuk permintaan pelanggan, resolusi pertanyaan, pelaksanaan pertanyaan dan hasil pulangan. Contoh penggunaan termasuk membuat jadual, memasukkan dan menanyakan data, dan ciri -ciri canggih seperti Operasi Join. Kesalahan umum melibatkan sintaks SQL, jenis data, dan keizinan, dan cadangan pengoptimuman termasuk penggunaan indeks, pertanyaan yang dioptimumkan, dan pembahagian jadual.

Mengapa menggunakan mysql? Faedah dan kelebihan Mengapa menggunakan mysql? Faedah dan kelebihan Apr 12, 2025 am 12:17 AM

MySQL dipilih untuk prestasi, kebolehpercayaan, kemudahan penggunaan, dan sokongan komuniti. 1.MYSQL Menyediakan fungsi penyimpanan dan pengambilan data yang cekap, menyokong pelbagai jenis data dan operasi pertanyaan lanjutan. 2. Mengamalkan seni bina pelanggan-pelayan dan enjin penyimpanan berganda untuk menyokong urus niaga dan pengoptimuman pertanyaan. 3. Mudah digunakan, menyokong pelbagai sistem operasi dan bahasa pengaturcaraan. 4. Mempunyai sokongan komuniti yang kuat dan menyediakan sumber dan penyelesaian yang kaya.

Cara menggunakan redis berulir tunggal Cara menggunakan redis berulir tunggal Apr 10, 2025 pm 07:12 PM

Redis menggunakan satu seni bina berulir untuk memberikan prestasi tinggi, kesederhanaan, dan konsistensi. Ia menggunakan I/O multiplexing, gelung acara, I/O yang tidak menyekat, dan memori bersama untuk meningkatkan keserasian, tetapi dengan batasan batasan konkurensi, satu titik kegagalan, dan tidak sesuai untuk beban kerja yang berintensifkan.

MySQL dan SQL: Kemahiran Penting untuk Pemaju MySQL dan SQL: Kemahiran Penting untuk Pemaju Apr 10, 2025 am 09:30 AM

MySQL dan SQL adalah kemahiran penting untuk pemaju. 1.MYSQL adalah sistem pengurusan pangkalan data sumber terbuka, dan SQL adalah bahasa standard yang digunakan untuk mengurus dan mengendalikan pangkalan data. 2.MYSQL menyokong pelbagai enjin penyimpanan melalui penyimpanan data yang cekap dan fungsi pengambilan semula, dan SQL melengkapkan operasi data yang kompleks melalui pernyataan mudah. 3. Contoh penggunaan termasuk pertanyaan asas dan pertanyaan lanjutan, seperti penapisan dan penyortiran mengikut keadaan. 4. Kesilapan umum termasuk kesilapan sintaks dan isu -isu prestasi, yang boleh dioptimumkan dengan memeriksa penyataan SQL dan menggunakan perintah menjelaskan. 5. Teknik pengoptimuman prestasi termasuk menggunakan indeks, mengelakkan pengimbasan jadual penuh, mengoptimumkan operasi menyertai dan meningkatkan kebolehbacaan kod.

Tempat Mysql: Pangkalan Data dan Pengaturcaraan Tempat Mysql: Pangkalan Data dan Pengaturcaraan Apr 13, 2025 am 12:18 AM

Kedudukan MySQL dalam pangkalan data dan pengaturcaraan sangat penting. Ia adalah sistem pengurusan pangkalan data sumber terbuka yang digunakan secara meluas dalam pelbagai senario aplikasi. 1) MySQL menyediakan fungsi penyimpanan data, organisasi dan pengambilan data yang cekap, sistem sokongan web, mudah alih dan perusahaan. 2) Ia menggunakan seni bina pelanggan-pelayan, menyokong pelbagai enjin penyimpanan dan pengoptimuman indeks. 3) Penggunaan asas termasuk membuat jadual dan memasukkan data, dan penggunaan lanjutan melibatkan pelbagai meja dan pertanyaan kompleks. 4) Soalan -soalan yang sering ditanya seperti kesilapan sintaks SQL dan isu -isu prestasi boleh disahpepijat melalui arahan jelas dan log pertanyaan perlahan. 5) Kaedah pengoptimuman prestasi termasuk penggunaan indeks rasional, pertanyaan yang dioptimumkan dan penggunaan cache. Amalan terbaik termasuk menggunakan urus niaga dan preparedStatemen

Cara Membina Pangkalan Data SQL Cara Membina Pangkalan Data SQL Apr 09, 2025 pm 04:24 PM

Membina pangkalan data SQL melibatkan 10 langkah: memilih DBMS; memasang DBMS; mewujudkan pangkalan data; mewujudkan jadual; memasukkan data; mengambil data; mengemas kini data; memadam data; menguruskan pengguna; Menyandarkan pangkalan data.

See all articles