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: GabunganNOT NULL
danUNIQUE
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)
Jika anda cuba memasukkan nilai nol, pengecualian akan dilemparkan.
mysql> insert user values(null); ERROR 1048 (23000): Column 'name' cannot be null
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
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
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)
Ujian sisipan, anda boleh menemui pengecualian lontaran 9 dan 81 semasa memasukkan.
mysql> insert user values(9); ERROR 3819 (HY000): Check constraint 'user_chk_1' 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 'user_chk_1' is violated. mysql>
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='中国')); Query OK, 0 rows affected, 1 warning (0.05 sec)
Sisipkan ujian.
mysql> insert user values(81,'2'); ERROR 3819 (HY000): Check constraint 'user_chk_1' is violated. mysql> insert user values(8,'2'); ERROR 3819 (HY000): Check constraint 'user_chk_1' is violated. mysql> insert user values(20,'2'); ERROR 3819 (HY000): Check constraint 'user_chk_1' is violated. mysql> insert user values(20,'中国'); Query OK, 1 row affected (0.01 sec) mysql> insert user values(20,'中国1'); ERROR 3819 (HY000): Check constraint 'user_chk_1' is violated. mysql> insert user values(85,'中国'); Query OK, 1 row affected (0.01 sec) mysql> insert user values(9,'中国'); ERROR 3819 (HY000): Check constraint 'user_chk_1' is violated.
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 ('男','女','未知','人妖'))); Query OK, 0 rows affected (0.05 sec)
Sisipkan ujian.
mysql> insert user values("男"); Query OK, 1 row affected (0.02 sec) mysql> insert user values("男男"); ERROR 3819 (HY000): Check constraint 'user_chk_1' 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)
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 'CHK_AGE' 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)
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)));
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)
Sisipkan ujian.
mysql> insert user values("张三"); Query OK, 1 row affected (0.02 sec) mysql> insert user values("张三"); ERROR 1062 (23000): Duplicate entry '张三' for key 'user.name'mysql>
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 '张三' for key 'user.name_un' 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)
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)
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)
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
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 '1' for key 'user.PRIMARY'mysql>
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)
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`)
MySQL menyediakan beberapa kekangan untuk membantu kami menyelesaikan masalah jenis ini Contohnya, apabila jadual pengguna dikemas kini, pesanan juga dikemas kini satu demi satu.
HAD: Enggan mengemas kini atau memadam rekod dalam jadual induk jika terdapat rekod dalam jadual anak.
CASCADE: Kemas kini atau padam rekod secara automatik dalam jadual anak apabila mengemas kini atau memadam rekod dalam jadual induk.
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
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)
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)
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)
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!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



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.

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 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.

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.

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 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.

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

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.
