Rumah >pangkalan data >tutorial mysql >Analisis kekangan pangkalan data MySQL dan contoh reka bentuk jadual
Menentukan bahawa storan lajur tertentu tidak boleh menjadi nilai nol
create table student (id int not null,name varchar(20)); Query OK, 0 rows affected (0.01 sec) mysql> desc student; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | NO | | NULL | | | name | varchar(20) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 2 rows in set (0.00 sec)
Menjamin bahawa lajur tertentu mesti mempunyai nilai unik , ralat akan dilaporkan apabila memasukkan nilai pendua
menentukan nilai lalai apabila memberikan nilai kepada lajur
create table student(id int,name varchar(20) default '匿名');
kekangan kunci utama, bukan Gabungan nol dan unik memastikan penetapan lajur tertentu tidak boleh batal dan unik
ciri penambahan_auto:
1 . Jika tiada rekod dalam jadual, kenaikan automatik bermula dari 1
2 Jika ada data, ia akan ditambah daripada rekod sebelumnya
3 data. nilai yang ditambah tidak akan digunakan semula dan akan bermula dari yang dipadamkan
create table student (id int primary key auto_increment,name varchar(20)); Query OK, 0 rows affected (0.01 sec) mysql> desc student; +-------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(20) | YES | | NULL | | +-------+-------------+------+-----+---------+----------------+ 2 rows in set (0.00 sec) mysql> insert into student values(null,'张三'); Query OK, 1 row affected (0.00 sec) mysql> select * from student; +----+--------+ | id | name | +----+--------+ | 1 | 张三 | +----+--------+ 1 row in set (0.00 sec)
kekangan kunci asing, data dalam jadual satu mesti wujud dalam. jadual dua, rujuk kepada kriteria integriti
kekangan kunci asing Menerangkan "hubungan kebergantungan" antara dua lajur dua jadual
Kekangan kunci asing akan menjejaskan pemadaman jadual jadual kelas contoh di bawah dikaitkan, jadi ia tidak boleh dipadam dengan mudah
mysql> create table class ( -> id int primary key, -> name varchar(20) not null -> ); Query OK, 0 rows affected (0.04 sec) mysql> create table student ( -> id int primary key, -> name varchar(20) not null, -> email varchar(20) default 'unknow', -> QQ varchar(20) unique, -> classId int , foreign key (classId) references class(id) -> ); Query OK, 0 rows affected (0.03 sec) mysql> desc class; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | NO | PRI | NULL | | | name | varchar(20) | NO | | NULL | | +-------+-------------+------+-----+---------+-------+ 2 rows in set (0.02 sec) mysql> desc student; +---------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+-------------+------+-----+---------+-------+ | id | int(11) | NO | PRI | NULL | | | name | varchar(20) | NO | | NULL | | | email | varchar(20) | YES | | unknow | | | QQ | varchar(20) | YES | UNI | NULL | | | classId | int(11) | YES | MUL | NULL | | +---------+-------------+------+-----+---------+-------+ 5 rows in set (0.00 sec)
Nyatakan syarat untuk menilai nilai melalui syarat
Tetapi mysql tidak menyokong reka bentuk jadual
create table test_user ( id int, name varchar(20), sex varchar(1), check (sex ='男' or sex='女') );
Jadual reka bentuk satu dengan satu adalah seperti jadual pelajar dan jadual akaun sepadan dengan seorang pelajar , dan setiap pelajar hanya mempunyai satu akaun
Kaedah perwakilan
1 .Dua entiti ini boleh diwakili oleh satu jadual
2 daripadanya mengandungi id jadual lain
Seorang pelajar harus berada dalam kelas dan kelas boleh mengandungi berbilang pelajar
Kaedah perwakilan:
1. Dalam jadual kelas, tambah lajur baharu untuk mewakili pelajar dalam kelas ini Apakah ID pelajar (mysql tidak mempunyai jenis tatasusunan, redis boleh)
2. jadual kelas kekal tidak berubah dan lajur baharu classId ditambahkan pada jadual pelajar
Jadual reka bentuk banyak-ke-banyak adalah seperti jadual pelajar dan jadual kursus . Seorang pelajar boleh memilih berbilang kursus, dan kursus juga boleh dipilih oleh berbilang pelajar
Kaedah perwakilan:
Gunakan jadual yang berkaitan , untuk mewakili hubungan antara dua entiti
Instance penciptaan jadual banyak-ke-banyak
-- 学生表 mysql> create table test_student ( -> id int primary key, -> name varchar(10) default 'unknow' -> ); Query OK, 0 rows affected (0.03 sec) -- 选课表 mysql> create table test_course ( -> id int primary key, -> name varchar(20) default 'unknow' -> ); Query OK, 0 rows affected (0.02 sec) -- 成绩表 mysql> create table test_score ( -> studentId int, -> courseId int, -> score int, -> foreign key (studentId) references test_student(id), -> foreign key (courseId) references test_course(id) -> ); Query OK, 0 rows affected (0.02 sec) mysql> desc test_student; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | NO | PRI | NULL | | | name | varchar(10) | YES | | unknow | | +-------+-------------+------+-----+---------+-------+ 2 rows in set (0.00 sec) mysql> desc test_coures; ERROR 1146 (42S02): Table 'java_5_27.test_coures' doesn't exist mysql> desc test_course; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | NO | PRI | NULL | | | name | varchar(20) | YES | | unknow | | +-------+-------------+------+-----+---------+-------+ 2 rows in set (0.00 sec) mysql> desc test_score; +-----------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------+---------+------+-----+---------+-------+ | studentId | int(11) | YES | MUL | NULL | | | courseId | int(11) | YES | MUL | NULL | | | score | int(11) | YES | | NULL | | +-----------+---------+------+-----+---------+-------+ 3 rows in set (0.00 sec)
Masukkan data ke dalam contoh untuk mencapai banyak-ke-banyak
mysql> insert into test_student values (1, 'listen'); Query OK, 1 row affected (0.01 sec) mysql> insert into test_course values (1, '数学'); Query OK, 1 row affected (0.00 sec) mysql> insert into test_student values (2, 'Faker'); Query OK, 1 row affected (0.00 sec) mysql> insert into test_course values (2, '数学'); Query OK, 1 row affected (0.00 sec) mysql> insert into test_score values(1, 1, 90); Query OK, 1 row affected (0.00 sec) mysql> insert into test_score values (1, 2, 99); Query OK, 1 row affected (0.00 sec) mysql> insert into test_score values (2, 1, 50); Query OK, 1 row affected (0.00 sec) mysql> insert into test_score values (2, 2, 60); Query OK, 1 row affected (0.00 sec) mysql> select * from test_student; +----+--------+ | id | name | +----+--------+ | 1 | listen | | 2 | Faker | +----+--------+ 2 rows in set (0.00 sec) mysql> select * from test_course; +----+--------+ | id | name | +----+--------+ | 1 | 数学 | | 2 | 语文 | +----+--------+ 2 rows in set (0.00 sec) mysql> select * from test_score; +-----------+----------+-------+ | studentId | courseId | score | +-----------+----------+-------+ | 1 | 1 | 90 | | 1 | 2 | 99 | | 2 | 1 | 50 | | 2 | 2 | 60 | +-----------+----------+-------+ 4 rows in set (0.00 sec)
Atas ialah kandungan terperinci Analisis kekangan pangkalan data MySQL dan contoh reka bentuk jadual. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!