Rumah  >  Artikel  >  pangkalan data  >  Analisis kekangan pangkalan data MySQL dan contoh reka bentuk jadual

Analisis kekangan pangkalan data MySQL dan contoh reka bentuk jadual

WBOY
WBOYke hadapan
2023-05-29 22:40:051012semak imbas

Kekangan pangkalan data

bukan batal

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)

unik

Menjamin bahawa lajur tertentu mesti mempunyai nilai unik , ralat akan dilaporkan apabila memasukkan nilai pendua ​​

lalai

menentukan nilai lalai apabila memberikan nilai kepada lajur

create table student(id int,name varchar(20) default '匿名');

kunci utama kunci utama

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)

kunci asing kunci asing

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)

semak

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='女')
);

Satu dengan satu

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

Satu kepada-banyak

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

banyak-ke-banyak

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!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam