Maison > Article > base de données > Analyse des contraintes de la base de données MySQL et exemples de conception de tables
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)
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é
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 '匿名');
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)
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)
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='女') );
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 é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
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)
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)
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!