Table des matières
Contraintes de base de données
non nulles
unique
par défaut
clé primaire clé primaire
clé étrangère clé étrangère
check
conception de table
One-to-one
Un à plusieurs
Méthode de représentation :
Maison base de données tutoriel mysql Analyse des contraintes de la base de données MySQL et exemples de conception de tables

Analyse des contraintes de la base de données MySQL et exemples de conception de tables

May 29, 2023 pm 10:40 PM
mysql

Contraintes de base de données

non nulles

Spécifiez que le stockage d'une certaine colonne ne peut pas être une valeur nulle

1

2

3

4

5

6

7

8

9

10

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)

Copier après la connexion

unique

Garantissez qu'une certaine colonne doit avoir une valeur unique Si vous insérez une valeur en double, une erreur sera générée. signalé

par défaut

Il est précisé que lors de l'attribution d'une valeur à une colonne, la valeur par défaut

1

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

Copier après la connexion

clé primaire clé primaire

la contrainte de clé primaire est une combinaison de non nulle et unique, garantissant que l'affectation d'une colonne ne peut pas être null et est unique

auto_increment Fonctionnalités d'incrémentation automatique :

1. S'il n'y a pas de valeur dans la table Records, l'incrémentation automatique commence à partir de 1

2. enregistrez vers le bas

3. Insérez puis supprimez les données, la valeur auto-incrémentée ne sera pas réutilisée et repartira de celle supprimée. Auto-incrémentation

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

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)

Copier après la connexion

clé étrangère clé étrangère

Contrainte de clé étrangère, les données du tableau un. doit exister dans la table deux, reportez-vous au critère d'intégrité

La contrainte de clé étrangère décrit la relation entre deux colonnes de deux tables La "dépendance"

Les contraintes de clé étrangère affecteront la suppression de la table Par exemple, la table de classe du. l'instance suivante est associée, elle ne peut donc pas être facilement supprimée

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

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)

Copier après la connexion

check

Spécifiez une condition et utilisez la condition pour déterminer la valeur

Mais MySQL ne prend pas en charge

1

2

3

4

5

6

create table test_user (

   id int,

   name varchar(20),

   sex varchar(1),

   check (sex ='男' or sex='女')

);

Copier après la connexion

conception de table

One-to-one

One Les tables de conception -to-one sont comme les tables d'étudiants et les tables de comptes. Un compte correspond à un étudiant, et un étudiant n'a qu'un seul compte

Méthode d'expression

1 Ces deux entités peuvent être représentées par une seule table

2. peut être représenté par deux tables, dont l'une contient l'identifiant de l'autre table

Un à plusieurs

Un élève doit être dans un Dans une classe, une classe peut contenir plusieurs élèves

Méthode de représentation :

1 . Dans la table des classes, ajoutez une nouvelle colonne pour indiquer les identifiants des étudiants dans cette classe (mysql n'a pas de type tableau, redis le peut)

2 . La table des classes reste inchangée. Dans la table des étudiants, une nouvelle colonne de classId. La table de conception plusieurs à plusieurs est comme la table des étudiants et le calendrier des cours. Un étudiant peut choisir plusieurs cours, et un cours peut également être utilisé par plusieurs étudiants. Choisissez

Méthode de représentation :

Utilisez une table d'association pour représenter la relation entre deux entités

Instance de création de table plusieurs-à-plusieurs

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

-- 学生表

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)

Copier après la connexion

Insérez des données dans l'instance pour obtenir plusieurs-à-plusieurs

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

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)

Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Article chaud

Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Article chaud

Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Compétences de traitement de structures de données volumineuses de PHP Compétences de traitement de structures de données volumineuses de PHP May 08, 2024 am 10:24 AM

Compétences de traitement de structures de données volumineuses de PHP

Comment optimiser les performances des requêtes MySQL en PHP ? Comment optimiser les performances des requêtes MySQL en PHP ? Jun 03, 2024 pm 08:11 PM

Comment optimiser les performances des requêtes MySQL en PHP ?

Comment utiliser la sauvegarde et la restauration MySQL en PHP ? Comment utiliser la sauvegarde et la restauration MySQL en PHP ? Jun 03, 2024 pm 12:19 PM

Comment utiliser la sauvegarde et la restauration MySQL en PHP ?

Comment insérer des données dans une table MySQL en utilisant PHP ? Comment insérer des données dans une table MySQL en utilisant PHP ? Jun 02, 2024 pm 02:26 PM

Comment insérer des données dans une table MySQL en utilisant PHP ?

Quels sont les scénarios d'application des types d'énumération Java dans les bases de données ? Quels sont les scénarios d'application des types d'énumération Java dans les bases de données ? May 05, 2024 am 09:06 AM

Quels sont les scénarios d'application des types d'énumération Java dans les bases de données ?

Comment corriger les erreurs mysql_native_password non chargé sur MySQL 8.4 Comment corriger les erreurs mysql_native_password non chargé sur MySQL 8.4 Dec 09, 2024 am 11:42 AM

Comment corriger les erreurs mysql_native_password non chargé sur MySQL 8.4

Comment utiliser les procédures stockées MySQL en PHP ? Comment utiliser les procédures stockées MySQL en PHP ? Jun 02, 2024 pm 02:13 PM

Comment utiliser les procédures stockées MySQL en PHP ?

Stratégies d'optimisation des performances pour la pagination des tableaux PHP Stratégies d'optimisation des performances pour la pagination des tableaux PHP May 02, 2024 am 09:27 AM

Stratégies d'optimisation des performances pour la pagination des tableaux PHP

See all articles