我是靠谱客的博主 虚心战斗机,最近开发中收集的这篇文章主要介绍MySQL~数据库约束(null、unique、primary key、default、foreign key、check、auto_increment) 与表的设计(一对一、一对多、多对多)数据库约束表的设计,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
文章目录
- 数据库约束
- not null
- unique
- default
- primary key 主键
- foreign key 外键
- 数据库约束实例
- check(了解)
- auto_increment 自增
- 表的设计
- 一对一
- 一对多
- 多对多
- 多对多建表实例
- 插入数据到实例实现多对多
数据库约束
not null
- 指定某列的存储不能为null值
unique
- 保证某列的每行必须有唯一的值
default
- 规定给列赋值时的默认值
primary key 主键
- 主键约束,是not null 与 unique 的结合,确保某列的每行的赋值不能为null 并且是唯一的
foreign key 外键
- 外键约束,保证一个表中的数据匹配另一个表中的值参照完整性.
- 一般习惯放到最后
- 外键约束会影响表的删除,例如下面实例的class表被关联,所以他不能被轻易删除
数据库约束实例
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)
check(了解)
- 作为了解,类似java中的枚举,保证列中的值符合指定的条件
- MySQL使用时不报错,但忽略该约束:
create table test_user (
id int,
name varchar(20),
sex varchar(1),
check (sex ='男' or sex='女')
);
auto_increment 自增
- 自增特点:
- 如果表中没有记录,自增从一开始
- 如果有数据,从上一条记录往下自增
- 插入再删掉数据,自增的值不会重复利用,会按删掉的那条开始自曾
mysql> create table test (
-> id int primary key auto_increment,
-> name varchar(20)
-> );
Query OK, 0 rows affected (0.02 sec)
mysql> insert into test values (null, 'a');
Query OK, 1 row affected (0.01 sec)
mysql> select * from test;
+----+------+
| id | name |
+----+------+
|
1 | a
|
+----+------+
1 row in set (0.00 sec)
mysql> delete from test where id = 1;
Query OK, 1 row affected (0.01 sec)
mysql> insert into test values (null, 'a');
Query OK, 1 row affected (0.00 sec)
mysql> select * from test;
+----+------+
| id | name |
+----+------+
|
2 | a
|
+----+------+
1 row in set (0.00 sec)
表的设计
一对一
- 一对一设计表就比如人的表与身份证号的表,一个人只能有一个身份证号码,一个身份证号码也只对于着一个表
一对多
- 一对多设计表,就是我上述设计的实例那俩个表,其一个学生只能对应一个班级,但是一个班级可以对应多个学生
多对多
- 多对多设计表就好比学生表和课程表,一个学生可以选多个课程,一个课程也可以被多个学生选择
多对多建表实例
-- 学生表
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)
插入数据到实例实现多对多
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)
最后
以上就是虚心战斗机为你收集整理的MySQL~数据库约束(null、unique、primary key、default、foreign key、check、auto_increment) 与表的设计(一对一、一对多、多对多)数据库约束表的设计的全部内容,希望文章能够帮你解决MySQL~数据库约束(null、unique、primary key、default、foreign key、check、auto_increment) 与表的设计(一对一、一对多、多对多)数据库约束表的设计所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复