Maison > base de données > tutoriel mysql > le corps du texte

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

WBOY
Libérer: 2023-05-29 22:40:05
avant
1065 Les gens l'ont consulté

Contraintes de base de données

non nulles

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

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

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

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

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

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

-- 学生表
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

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!

Étiquettes associées:
source:yisu.com
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal