栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

MySQL基础——数据库约束与表的设计

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MySQL基础——数据库约束与表的设计

目录

1.数据库约束

2.表的设计思想


1.数据库约束 1.1 概念

所谓数据库约束,就是我们对某个表的某一列的数据做出一些限制,让他符合一些约束条件,当我们在插入数据时MySQL就会检查数据是否符合约束条件,如果不符合就会报错。这样一定程度上解决了人工核验数据的效率问题。

1.2 约束类型 

NOT NULL - 指示某列不能存储 NULL 值。

UNIQUE - 保证某列的每行必须有唯一的值。

DEFAULT - 规定没有给列赋值时的默认值。

PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标 识,有助于更容易更快速地找到表中的一个特定的记录。

FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。

CHECK - 保证列中的值符合指定的条件。对于MySQL数据库,对CHECK子句进行分析,但是忽略 CHECK子句。

1.3 实际使用

我们先看到约束的语法:

-- 重新设置学生表结构
DROP TABLE IF EXISTS student;
CREATE TABLE student (
   id INT NOT NULL,
   sn INT,
   name VARCHAr(20),
   qq_mail VARCHAr(20)
);

可以看到我们只需要在创建表时在其后面直接加上约束类型即可,上面那个例子我们就为id加上了NOT NULL约束。

1.4 PRIMARY KEY:主键约束

PRIMARY KEY:主键约束 ,其实就是UNIQUE和NOT NULL的结合。被约束的列称为主键,一般我们会对id这种唯一且不为空的类型做出约束。

对于整数类型的主键,常配搭自增长auto_increment来使用。插入数据对应字段不给值时,使用最大值+1。

-- 主键是 NOT NULL 和 UNIQUE 的结合,可以不用 NOT NULL
id INT PRIMARY KEY auto_increment,

 比如这样子使用auto_increment后即使我们后面不插入id它也会进行自增。

 1.5 FOREIGN KEY:外键约束

外键用于关联其他表的主键或唯一键,语法:

foreign key (字段名) references 主表(列) 

其中我们把约束表称为主表,被约束表称为副表。而副表在插入时只有在主表中有相同的对应数据才能插入成功。比如一个学生对应一个班级,班级对应主表,学生对应副表,在插入学生信息时只有班级信息在主表中存在才能成功插入。

案例:

创建班级表classes,id为主键: 

-- 创建班级表,有使用MySQL关键字作为字段时,需要使用``来标识
DROP TABLE IF EXISTS classes;
CREATE TABLE classes (
 id INT PRIMARY KEY auto_increment,
 name VARCHAr(20),
 `desc` VARCHAr(100)
);

创建学生表student,一个学生对应一个班级,一个班级对应多个学生。使用id为主键, classes_id为外键,关联班级表id。

-- 重新设置学生表结构
DROP TABLE IF EXISTS student;
CREATE TABLE student (
   id INT PRIMARY KEY auto_increment,
   sn INT UNIQUE,
   name VARCHAr(20) DEFAULT 'unkown',
   qq_mail VARCHAr(20),
 classes_id int,
 FOREIGN KEY (classes_id) REFERENCES classes(id)
);
2.表的设计思想 

在我们面对一个实际的场景时,我们总会需要去想如何设计一个合适的表去存储数据,而此时就需要我们去抓住需求中的”实体“,实际就类似于我们java中面向对象的思想。当然讲起来高大上,我们还是需要看一些具体的例子。

一般来说我们会遇到一下三种情况:

2.1 一对一  

类似于我们学校的教务系统,每一个学生都有一个账户,一个账户只能分配给一个同学 。

(1)这种情况我们可以直接将学生与账户放在一个表里,但是不推荐,尤其是一个系统中包含了不同身份的角色。

(2)我们也可以把学生和账号各自放在一个表里,使用一个额外id来关联两个表

2.2 一对多 

比如学生与班级的关系,一个学生对应一个班级,但是一个班级却可以有很多的学生。

这种情况我们可以参考一对一的情况来处理,采用一个额外id来关联两个表,这里我们放出代码供大家参考:

-- 班级表
create table class(
    classId int primary key,
    className varchar(20)
);
-- 学生表
create table student(
    id int,
    name varchar(20),
    classId int primary key;
    foreign key (id) references class(classId)
);
2.3 多对多 

比如学生在选课时,一名学生可以选多门课,一门课也可以被多名学生选择,这种就是典型的多对多场景。这个时候我们一般会采用一个中间表来表示多对多的关系。

 类似于上面的那种情况。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1013798.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号