我是靠谱客的博主 虚心战斗机,最近开发中收集的这篇文章主要介绍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 自增

  • 自增特点:
  1. 如果表中没有记录,自增从一开始
  2. 如果有数据,从上一条记录往下自增
  3. 插入再删掉数据,自增的值不会重复利用,会按删掉的那条开始自曾
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) 与表的设计(一对一、一对多、多对多)数据库约束表的设计所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部