MySQL 数据库的约束及数据表的设计原理

目录
  • 1. 数据库的约束
    • 1.1 介绍
    • 1.2 约束类型
    • 1.3 not null
    • 1.4 unique
    • 1.5 default
    • 1.6 primary key
  • 1.7 foreign key
    • 1.8 check
  • 2. 数据库表的设计
    • 2.1 一对一关系
    • 2.2 一对多关系
    • 2.3 多对多关系

1. 数据库的约束

1.1 介绍

数据库中的约束 ,顾名思义即是对插入数据库中的数据进行限定,这么做的目的是为了保证数据的有效性和完整性。 这样就大幅度地提高了数据库中数据的质量,节省了数据库的空间和调用数据的时间。

之前介绍过 MySQL 中的数据类型,数据类型其实就能够对一部分数据进行校验。约束也一样,同样能够对一些数据进行校验工作。这样就可以尽量避免出现一些非法的数据

1.2 约束类型

常见约束的类型有以下几种:

  • not null: 指示某列不能存储 null 值
  • unique: 保证某列的每行必须是唯一值,不能有重复
  • default: 规定没有给列赋值时的默认值
  • primary key: 表示主键,是 not null unique 的结合。确保某列(或多个列的结合)有唯一标识,有助于更容易更快速的找到表中的一个特定的记录
  • foreign key: 保证一个表中的数据匹配另一个表中的值的参照完整性
  • check: 保证列中的值符合指定的条件。对于 MySQL 数据库,可以使用 check,但是其使用结果忽略

1.3 not null

如果不使用 not null,即表示默认情况下可以插入 null(即这列的值可以不填)

但是例如做一些调查问卷时,就有必填项,此时这些选项就不能为空,就可以使用 not null

示例:

作用: 使用 not null 后插入值不能为 null

1.4 unique

如果不使用 unique,那么某列不同行的值是可以重复的。

但实际生活中,例如身份证号码、电话号码等等其实是一个唯一值,此时就可以使用 unique

示例:

作用: 使某列的值都是唯一的,不能重复

注意:

当列有 unique 约束时,进入插入前,就先会查找,如果要插入的值不存在,才会进行插入,因此使用 unique 其实会影响效率,但总的来说利大于弊。

1.5 default

当我们不使用 default 去指定列的默认值时,该默认值就为 null,如果你想改变某列的默认值,就可以使用 default

示例:

作用: 可以指定某列的默认值

1.6 primary key

primary key 是主键,表示了一个记录的身份标识,相当于同时使用 not null 和 unique

示例:

作用: 指定主键

注意:

  • 一张表中只能有一个主键
  • 主键可以由多个列联合形成

补充: 自动增量 —— auto_increment

MySQL 可以自动的为每个行分配下一个可用的编号,不用在添加一行时手动分配唯一值(可以手动分配唯一值)。但是必须用在 create 创建表的时候,例如:

注意:当使用自动增量和手动分配混搭时,这个唯一值就不一定是有序的了

1.7 foreign key

foreign key 是外键约束,可用于关联其它表的主键或唯一值

例如淘宝购物的话,一个数据库中可以有商品表和订单表两个数据表,而这两个表都可以包含商品编号。而订单表里面的商品编号一定是商品表里面有的前提下才可以出现。因此就可以使用外键来约束,防止非正常数据出现

示例:

作用:

外键约束将两张表绑定起来,其中被约束的表可以叫做子表,约束别人的表叫做父表,如果子表中的列要插入的值在父表中关联的主键或唯一值中没有,那么将插入将会失败

注意: 外键约束会导致父表中的记录不能直接删,那么想要删除父表的记录该怎么做呢?(例如要下架某个商品,该商品的编号也就没了)

解决思路: 逻辑删除(不直接删除数据库的记录,没有打破外键约束)

在商品表中引入一个新的字段,通过这个字段表示该记录是有效还是无效的。可以令这个字段默认值为1,即表示有效,如果要删除这个商品,就把这个字段改为0,此时该商品就无效了。

1.8 check

check 约束是可以指定某列可以填入的数据,例如性别,就只能填入男或者女

注意:

MySQL 中现在还不支持该约束,即使用了,也会忽略该约束的影响

示例:

2. 数据库表的设计

当我们掌握了基本的数据库的操作方法后,如果我们要面对一个从零开始建表的操作,势必要对我们需要的实体和它们之间的关系有一个很好的把握。

实体之间的关系主要存在以下四种:

  • 无关系
  • 一对一关系
  • 一对多关系
  • 多对多关系

2.1 一对一关系

例如一个学生对应着有一个系统的用户身份,我们就可以有两种设计方式

将学生信息和用户信息放到一个表中

学号 学生姓名 用户名 用户密码
2001 张三 三娃 ***
2002 李四 四娃 ***
2003 王五 五娃 ***

将学生放到 A 表中,用户信息放到 B 表中,在 B 表中可以插入学生学号来将学生和用户进行关联

A 表:

学号 学生姓名
2001 张三
2002 李四
2003 王五

B 表:

用户名 用户密码 学生学号
三娃 *** 2001
四娃 *** 2002
五娃 *** 2003

2.2 一对多关系

例如一般一个中学学生和班级之间是一对多的关系,一个学生只能有一个班级,一个班级里面可以有多个学生。

我们通常可以设计两张表,存放学生信息的 A 表,和班级信息的 B 表,在学生信息中添加班级来进行关联

A表:

学号 学生姓名 班级id
2001 张三 1
2002 李四 1
2003 王五 2

B 表:

班级id 班级名称
1 高三(1)班
2 高三(2)班

2.3 多对多关系

例如大学生和课程之间,就是一个多对多的关系,一个学生可能有不同的多个课程,一个课程也有很多个学生来选择。

这时我们设计三个表,分别为存放学生信息的 A 表、存放课程信息的 B 表和将学生与课程联系起来的中间表 C 表

A表:

学号 学生姓名
2001 张三
2002 李四
2003 王五

B 表:

课程id 课程名
1 高等数学
2 大学物理
3 数据库理论

C 表:

学号 课程id
2001 1
2001 2
2002 1
2002 3
2003 1

到此这篇关于MySQL 数据库的约束及数据表的设计原理的文章就介绍到这了,更多相关MySQL 数据库的约束及数据表设计内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • MySQL对数据表已有表进行分区表的实现

    目录 操作方式 操作过程 对现有的一个表进行创建分区表,并把数据迁移到新表,可以按时间来分区,然后这表不是实时更新,每天有一次插入操作. 时间比较充裕,但是服务器上有其他应用,使用较小资源为主要方式. 操作方式 @1 可以使用ALTER TABLE来进行更改表为分区表,这个操作会创建一个分区表,然后自动进行数据copy然后删除原表, 猜测服务器资源消耗比较大. 类似操作 ALTER TABLE tbl_rtdata PARTITION BY RANGE (Month(fld_date)) ( P

  • MySQL 数据库中数据表超详细的基本操作

    目录 1. 查看当前数据库中的表 2. 创建表 3. 查看指定表结构 4. 删除表 5. 往表中新增数据 6. 查找表中的数据 6.1 全列查询 6.2 指定列查询 6.3 查询字段为表达式 6.4 给某个列指定常量 6.5 给查询的表达式指定别名(as) 6.6 去重查询(distinct) 6.7 对查询结果进行排序(order by) 6.8 条件查询(where) 6.9 分页查询(limit) 7. 修改表中的数据 8. 删除表中的数据 前言: 库名.表名.列名等等不能和关键字相同,如

  • Mysql关于数据库是否应该使用外键约束详解说明

    一.前言 对于[是否使用外键约束]这个话题已经是老生常谈的了.在学校中,老师交给我们的大多是需要我们建立外键约束,但进入了实际工作很多时候并不会使用外键,而是通过代码逻辑来控制.包括在阿里的JAVA规范中也明确规定:[强制]不得使用外键与级联,一切外键概念必须在应用层解决. 为什么要做这样的规定呢?到底该不该使用外键约束呢?我们可以举一个例子来说明 二.举例说明 现在我们在数据库中建立了两张表:[product和project],[project]的porduct字段,关联Product,他们之

  • MySQL学习之数据库表五大约束详解小白篇

    目录 1.约束概念和分类 2.五大约束的添加和删除 2.1添加约束的六种方法 2.2三种删除约束的方式 2.3五大约束分别对应的添加删除方式(序号对应2.1和2.2) 2.4对于创建约束的总结 2.5对于主键和唯一的区别 3.自增长列 3.1概念 3.2在创建表的时候添加主键约束,并且完成主键自增长的例子 3.3自增长的添加和删除 3.4设置自增长步长 1.约束概念和分类 1.1约束的概念: 对表中的数据进行限定,保证数据的正确性,有效性,完整性 1.2约束分类 1.主键约束(primary k

  • 基于MySQL数据库的数据约束实例及五种完整性约束介绍

    为了防止不符合规范的数据进入数据库,在用户对数据进行插入.修改.删除等操作时,DBMS自动按照一定的约束条件对数据进行监测,使不符合规范的数据不能进入数据库,以确保数据库中存储的数据正确.有效.相容. #数据约束 #五种完整性约束: #NOT NULL :非空约束,指定某列不能为空: #UNIQUE : 唯一约束,指定某列或者几列组合不能重复 #PRIMARY KEY :主键,指定该列的值可以唯一地标识该列记录 #FOREIGN KEY :外键,指定该行记录从属于主表中的一条记录,主要用于参照完

  • MySQL 数据库的约束及数据表的设计原理

    目录 1. 数据库的约束 1.1 介绍 1.2 约束类型 1.3 not null 1.4 unique 1.5 default 1.6 primary key 1.7 foreign key 1.8 check 2. 数据库表的设计 2.1 一对一关系 2.2 一对多关系 2.3 多对多关系 1. 数据库的约束 1.1 介绍 数据库中的约束 ,顾名思义即是对插入数据库中的数据进行限定,这么做的目的是为了保证数据的有效性和完整性. 这样就大幅度地提高了数据库中数据的质量,节省了数据库的空间和调用

  • MySQL 数据库的约束及数据表的设计原理

    目录 1.数据库的约束 1.1介绍 1.2约束类型 1.3notnull 1.4unique 1.5default 1.6primarykey 1.7foreignkey 1.8check 2.数据库表的设计 2.1一对一关系 2.2一对多关系 2.3多对多关系 1. 数据库的约束 1.1 介绍 数据库中的约束 ,顾名思义即是对插入数据库中的数据进行限定,这么做的目的是为了保证数据的有效性和完整性. 这样就大幅度地提高了数据库中数据的质量,节省了数据库的空间和调用数据的时间. 之前介绍过 MyS

  • Django使用Mysql数据库已经存在的数据表方法

    使用scrapy爬取了网上的一些数据,存储在了mysql数据库中,想使用Django将数据展示出来,在网上看到都是使用Django的models和makemigration,migrate命令来创建新表,并使用. 可是我的数据已经存在了已经创建好,并且已经存储有数据了,不能再重新创建新表了. 了解Django的表明和models名称的映射关系就可以让Django使用已经存在的表. 假如在Django存在models如下: from django.db import models # Create

  • 一文理解MySQL数据库的约束与表的设计

    目录 1.数据库约束 1.1 约束类型 1.2 null 约束 1.3 unique 唯一的约束 1.4 default 默认值约束 1.5 primary key 主键约束 1.6 primary key auto_increment 自增主键 1.7 foreign key 外键约束 2.表的设计 2.1 一对一 2.2 一对多 2.3 多对多 总结 1.数据库约束 约束是关系型数据库提供的一种校验数据合法性的机制. 1.1 约束类型 约束类型 说明 示例 null 使用not null 指

  • MySQL数据库高级查询和多表查询

    MySQL多表查询 添加练习表 -- 用户表(user) CREATE TABLE `user`( `id` INT AUTO_INCREMENT PRIMARY KEY COMMENT '用户id(主键)', `username` VARCHAR(50) COMMENT '用户姓名', `age` CHAR(3) COMMENT '用户年龄' ); -- 订单表(orders) CREATE TABLE `orders`( `id` INT AUTO_INCREMENT PRIMARY KEY

  • MySQL数据库操作DML 插入数据,删除数据,更新数据

    目录 DML介绍 数据插入 数据修改 数据删除 DML介绍 DML是指数据操作语言,英文全称是Data Manipulation Language,用来对数据库中表的数据记录进行更新. 关键字: 插入insert 删除delete 更新update 数据插入 insert into 表 (列名1,列名2,列名3...) values (值1,值2,值3...): //向表中插入某些 insert into 表 values (值1,值2,值3...); //向表中插入所有列 这里的两种方式,第一

  • MySQL数据库的约束限制详解

    目录 一.介绍 二.操作 添加 删除 外键联级操作 一.介绍 数据库的约束是对表中数据进行的一种限制,为了保证数据的正确性.有效性.完整性. 无论是在添加数据还是在删除数据的时候,都能提供帮助.所有的关系型数据库都支持对数据表的约束. 主键:唯一标识一条记录,不能重复,不允许为空.主要用来保证数据的完整性. 外键: 表的外键是另一表的主键,外键可以有重复,可以为控制.主要用来和其他表建立联系. 二.操作 添加 添加主键: // 一般设置id为主键 CREATE TABLE student( id

  • MySQL数据库使用mysqldump导出数据详解

    mysqldump是mysql用于转存储数据库的客户端程序.它主要产生一系列的SQL语句,可以封装到文件,该文件包含有所有重建您的数据库所需要的 SQL命令如CREATE DATABASE,CREATE TABLE,INSERT等等.可以用来实现轻量级的快速迁移或恢复数据库.是mysql数据库实现逻辑备份的一种方式. 在日常维护工作当中经常会需要对数据进行导出操作,而mysqldump是导出数据过程中使用非常频繁的一个工具:它自带的功能参数非常多,文章中会列举出一些常用的操作,在文章末尾会将所有

  • mysql创建存储过程实现往数据表中新增字段的方法分析

    本文实例讲述了mysql创建存储过程实现往数据表中新增字段的方法.分享给大家供大家参考,具体如下: 需求: 往某数据库的某个表中新增一个字段(若该字段已存在,则不做操作:若该字段不存在,则新增) 百度了n久,没有符合要求的例子,只有参考加自己琢磨,最终终于给弄出来了,以下是几个版本的更迭 第一版: DELIMITER $$ CREATE PROCEDURE insert_column() BEGIN IF NOT EXISTS(SELECT 1 FROM information_schema.c

  • 在python中使用pymysql往mysql数据库中插入(insert)数据实例

    咱还是直接看代码吧! from pymysql import * def main(): # 创建connection连接 conn = connect(host='', port=3306, database='', user='', password='', charset='utf8') # 获取cursor对象 cs1 = conn.cursor() # 执行sql语句 query = 'insert into 表名(列名1, 列名2, 列名3, 列名4, 列名5, 列名6) value

随机推荐