首页 > 数据库 >MYSQL数据库表

MYSQL数据库表

时间:2024-10-27 14:16:33浏览次数:8  
标签:COMMENT 外码 数据库 约束 主码 完整性 KEY MYSQL

MYSQL完整性约束

1.实体完整性

(1)主码(PRIMARY KEY)约束

主码约束是指在表中定义一个主码,它的值用于唯一标识表中的每一行数据。

若关系中的一个属性或属性组的值能够唯一地标识一个元组,且他的子集不能唯一的标识一个元组,则称这个属性或属性组做候选码。

候选码特性:

  1. 唯一性:唯一性是指候选码的值在任何时刻都能唯一标识关系中的一个元组。例如,在一个学生数据库中,学号可以唯一标识每个学生,无论数据库中有多少学生,他们的学号都是唯一的。
  2. 最小性:最小性要求候选码是唯一标识符的最小集合。如果从候选码中去掉任何一个属性,剩余的属性集合将无法保证唯一性。例如,在学生数据库中,如果去掉学号,仅用姓名来标识学生,可能会出现多个学生有相同的姓名,因此学号是必要且最小的标识符。

若一个关系(即数据表)中有多个候选码,则选定其中一个作为主码。

主码特性:

  1. 唯一性‌:主码的值在表中必须是唯一的,不能有重复。每个元组的主码值必须是唯一的,以确保能够唯一标识一个元组‌。
  2. 非空值‌:主码的字段不能为空。在关系数据库中,主码字段必须有一个具体的值,不能为NULL‌。
  3. 不变性‌:一旦主码被选定,其值在数据修改过程中不应发生变化。主码通常选择那些不会频繁变化的属性,如人的身份证号、产品的序列号等‌。
  4. 4选择标准‌:在选择主码时,应优先考虑那些能够唯一标识记录且不易重复的属性。例如,学生表中的学号、员工表中的员工编号等‌。

主码规则:1.一个表可以有多个候选码,但每个表只能定义一个主码;

                  2.主码值必须使用唯一标识符中的每一行,且不能为空。

(2)唯一性(UNIQUE)约束

唯一性约束用于指明基本表在某一列或多个列的组合上的取值唯一。

唯一键规则:1.每个表可以定义多个唯一键;

                      2.唯一性约束确保在某一列或多列的组合上不出现重复值。唯一键可为空,但是最                             多只有一个出现空值。

(3)空(NULL)约束和非空(NOT NULL)约束

空约束是指默认情况下,字段的取值可以为空。

非空约束是指字段的取值不能为空。

*完体完整性要求每一行都具有一个非空且又不重复的字段值。完体完整性还可以通过唯一性约束和非空约束共同实现。

(4)自增(AUTO_INCREMENT)约束

自增约束要求数据库表的某个字段值依次递增,且不重复。

自增字段规则:

  1. 每张表只能定义一个自增型字段;
  2. 自增字段必须为数值型;
  3. 自增字段必须定义为键(主键、唯一键或者外码)。

2.参照完整性(表间规则)

参照完整性属于表间规则。对于永久关系的相关表,在更新、插入或删除记录时,如果只改其一不改其二,就会影响数据的完整性;例如修改父表中关键字值后,子表关键字值未做相应改变;删除父表的某记录后,子表的相应记录未删除,致使这些记录成为孤立记录;对于子表插入的记录,父表中没有相应关键字值的记录;等等。对于这些涉及表间数据的完整性,统称为参照完整性。

(1)外码(外键)

设F是基本关系R的一组属性,但不是关系R的主码。若F与基本关系S的主码相对应,则称F是基本关系R的外码。基本关系R为子表,也叫参照关系,S为父表,也称为参照关系。

外码规则:

  1. 一个表可以没有外码,一个表也可以看多个外码,含外码的表为子表。
  2. 父表和子表不是绝对的,而是相对的。
  3. 父表的主码和子表的外码必须定义在同一个城上。
  4. 外码和相应的主码可以不同名。
  5. 子表R和父表S不一定是不同的关系。
  6. 一个子表可以对应多个父表,一个父表也可以对应多个子表。

(2)参照完整性规则

若属性或属性组F是基本关系R的外码,它与基本关系S的主键相对应(基本关系R和S不一定是不同的关系),则对于R中的每个元组在F上的值:

  1. 取空值,表示不知道不清楚。
  2. 或者等于S关系(父表)中某个元组中的主键值(主码值)。

(3)外码(FOREIGN KEY)约束

参照完整性主要依赖外码约束实现,外码约束使用的关键字是FOREIGN KEY。

FOREIGN KEY 约束指定某一个列或一组列作为外码,也称为外键。一个表可以有多个外码,用于确保参照完整性。
创建外码之前,父表必须已经存在于数据库中,或者是当前正在创建的表。如果是后一种情况,则父表与子表是同一个表,这样的表称为自参照表,这种结构称为自参照完整型。

创建外码之前,必须为父表定义主键。

3.域完整性

域完整性是针对某一具体关系数据库的约束条件,它保证表中某些列不能输入无效的值。

域完整性指表中的列必须满足某种特定的数据类型约束。如数据类型、格式、值域范围、精度、是否允许空值等。

4.用户自定义的完整性

用户自定义完整性是针对某个特定关系数据库的约束条件,它反映某一具体应用所涉及的数据必须满足的语义要求。主要包括非空约束、唯一约束、检查约束、主键约束、外键约束。

用户定义完整性可以涵盖完体完整性、域完整性、参照完整性等完整性类型。

MYSQL数据库表的创建

MYSQL数据库表的创建语法如下:

CREATE TABLE [IF NOT EXISTS] 表名(

字段名1 数据类型 [列级约束条件],

...

字段名n 数据类型 [列级约束条件],

[表级约束条件1],

...

[表级约束条件n]

)其他选择项(例如存储引擎、字符集等选项)

建表语法较多,分为指定表名、定义字段和指定选项三部分。

指定表名在CREATE TABLE后面指定表名,IF NOT EXISTS创建前先判断是否存在,不存在则创建,存在则不出创建。

定义字段放在小括号中,分为三部分:字段名、数据类型、约束,前二者必不可少,约束为可选。

约束(约束扩展分为列级约束和表级约束,两者约束效果相同。列级约束直接跟在字段后面,表级约束是在所有字段结束后。

具体语法:列级约束——字段名 数据类型 [列级约束条件]

                 表级约束—— [CONSTRAINT 约束名]约束类型 (字段名1,[字段名2,...,字段名n])

指定选项该部分可以舍子存储引擎、默认字符集以及压缩类型。

具体语法:存储引擎 ——ENGINE(MySQL四种存储引擎的区别-CSDN博客

                默认字符集——DEFAULT CHARSET

                压缩类型——PACK_KEYS(值可以为:0,1,DEFAULT)

例:在创建mybatis数据库中创建如下几张表格中表。

创建数据库mybatis参考

Department(系部表)
字段名数据类型长度是否允许为空约束说明
DIdCAHR3主键系号
DNameVARCHAR10取唯一值系名
DHeaderCHAR4外码,引用教室表中的教师号系主任
Majority(专业表)
字段名数据类型长度是否允许为空约束说明
MIdCAHR3主键专业编号
MNameVARCHAR20取唯一值专业名称
MDeptCHAR4外码,引用系部表中的系号所属系部
Teacher(教师表)
字段名数据类型长度是否允许为空约束说明
TIdCAHR4主键教师号
TNameVARCHAR10教师名
TGenderENUM('男','女')性别
TDeptCHAR3外码,引用系部表中的系号所在系部
TRank

ENUM('助教','教授'

,'讲师','副教授')

职称
Student(学生表)
字段名数据类型长度是否允许为空约束说明
SIdCAHR4主键学号
SNameVARCHAR10姓名
SGenderENUM('男','女')默认值为男性别
SBirthDATE出生日期
SMajorCHAR3外码,引用专业表中的专业编号所属专业

Course(课程表)
字段名数据类型长度是否允许为空约束说明
CIdCAHR3主键课程号
CNameVARCHAR20课程名
CCreditINT学分
CLimitINT默认值为60限制选人
Register(注册表)
字段名数据类型长度是否允许为空约束说明
SIdCAHR4主键,外码,引用学生表中的学号学号
CIdCAHR3主键,外码,引用课程号中的学号课程号
ScoreDECIMAL(5,2)成绩
SBirthDATE默认值为当前日期时间选课时间

选择数据库mybatis

 USE mybatis;

取消外码约束:

SET FOREIGN_KEY_CHECKS=0;

注意:建表应该先建父表再建子表

创建Department(系部表)代码如下:

CREATE TABLE Department(
    DId char(3) PRIMARY KEY,
    DName varchar(10) NOT NULL UNIQUE,
    DHeader char(4),
    CONSTRAINT fk_dheader FOREIGN KEY (DHeader) REFERENCES teacher (TId)
)ENGINE=InnoDB DEFAULT CHARSET=gbk;

设置外码约束:

SET FOREIGN_KEY_CHECKS=1;

创建Majority(专业表)代码如下:

CREATE TABLE Major(
    MId char(3) COMMENT'专业编号',
    MName char(10) NOT NULL UNIQUE COMMENT'专业名称',
    MDept char(3) DEFAULT NULL COMMENT'所属系部',
    PRIMARY KEY (MId),
    FOREIGN KEY (MDept) REFERENCESDepartment (DId)
)ENGINE=InnoDB DEFAULT CHARSET=gbk COMMENT'专业表';

注意:COMMENT关键字用来对字段或者表进行注释。

(主码约束的名字统一为PRIMARY,所以不需要用CONSTRAINT关键字为主码约束取名)

创建Teacher(教师表)代码如下:

CREATE TABLE Teacher(
    TId char(4) PRIMARY KEY COMMENT'教师编号',
    TName varchar(10) NOT NULL UNIQUE COMMENT'教师姓名',
    TGender enum('男','女') COMMENT'性别',
    TDept char(3)  COMMENT'所在系部',
    TRank enum('助教','讲师','副教授','教授')DEFAULT NULL COMMENT'职称',
    CONSTRAINT fk_tdept FOREIGN KEY (TDept) REFERENCES Deptartment (DId)
)ENGINE=InnoDB DEFAULT CHARSET=gbk COMMENT'教师表';

创建Student(学生表)代码如下:

CREATE TABLE Student(
    SId char(4) PRIMARY KEY COMMENT'学号',
    SName varchar(10) NOT NULL COMMENT'姓名',
    SGender enum('男','女') DEFAULT'男' COMMENT'性别',
    SBirth date COMMENT'出生日期',
    SMajor char(3)  COMMENT'所属专业',
    CONSTRAINT fk_smajor FOREIGN KEY (SMajor) REFERENCES major (MId)
)ENGINE=InnoDB DEFAULT CHARSET=gbk COMMENT'学生表';

创建Course(课程表)代码如下:

CREATE TABLE Course(
    CId char(3) COMMENT'课程号',
    CName char(20) NOT NULL UNIQUE COMMENT'课程名',
    CCredit int DEFAULT NULL COMMENT'学分',
    CLimit int DEFAULT 60 COMMENT'限选人数',
    PRIMARY KEY (CId),
)ENGINE=InnoDB DEFAULT CHARSET=gbk COMMENT'课程表';

创建Register(注册表)代码如下:

CREATE TABLE Register(
    SId char(4) PRIMARY KEY COMMENT'学号',
    CId char(3) COMMENT'课程号',
    Score decimal(5,2) COMMENT'成绩',
    RDate datetime DEFAULT NOW() COMMENT'选课时间',
    PRIMARY KEY (SId,CId),
    CONSTRAINT fk_CId FOREIGN KEY (CId) REFERENCES Course (CId),
    CONSTRAINT fk_SId FOREIGN KEY (SId) REFERENCES Student (SId)  
)ENGINE=InnoDB DEFAULT CHARSET=gbk COMMENT'注册表';

注意:Register(注册表)的主码是复合主码,当一个表的主键包含多个属性列时,只能定义为表级约束。

标签:COMMENT,外码,数据库,约束,主码,完整性,KEY,MYSQL
From: https://blog.csdn.net/weixin_63043528/article/details/143229571

相关文章

  • 2024年最新互联网大厂精选 Java 面试真题集锦(JVM、多线程、MQ、MyBatis、MySQL、Redis
    前言春招,秋招,社招,我们Java程序员的面试之路,是挺难的,过了HR,还得被技术面,在去各个厂面试的时候,经常是通宵睡不着觉,头发都脱了一大把,还好最终侥幸能够入职一个独角兽公司,安稳从事喜欢的工作至今...近期也算是抽取出大部分休息的时间,为大家准备了一份通往大厂面试的小捷径,准备......
  • 基于Java+SpringBoot+Mysql实现的古诗词平台功能设计与实现四
    一、前言介绍:1.1项目摘要随着信息技术的迅猛发展和数字化时代的到来,传统文化与现代科技的融合已成为一种趋势。古诗词作为中华民族的文化瑰宝,具有深厚的历史底蕴和独特的艺术魅力。然而,在现代社会中,由于生活节奏的加快和信息获取方式的多样化,古诗词的传播和阅读面临着一定的挑......
  • 基于Java+SpringBoot+Mysql实现的古诗词平台功能设计与实现三
    一、前言介绍:1.1项目摘要随着信息技术的迅猛发展和数字化时代的到来,传统文化与现代科技的融合已成为一种趋势。古诗词作为中华民族的文化瑰宝,具有深厚的历史底蕴和独特的艺术魅力。然而,在现代社会中,由于生活节奏的加快和信息获取方式的多样化,古诗词的传播和阅读面临着一......
  • 基于Java+SpringBoot+Mysql实现的古诗词平台功能设计与实现四
    一、前言介绍:1.1项目摘要随着信息技术的迅猛发展和数字化时代的到来,传统文化与现代科技的融合已成为一种趋势。古诗词作为中华民族的文化瑰宝,具有深厚的历史底蕴和独特的艺术魅力。然而,在现代社会中,由于生活节奏的加快和信息获取方式的多样化,古诗词的传播和阅读面临着一......
  • 基于Java+SpringBoot+Mysql实现的古诗词平台功能设计与实现三
    一、前言介绍:1.1项目摘要随着信息技术的迅猛发展和数字化时代的到来,传统文化与现代科技的融合已成为一种趋势。古诗词作为中华民族的文化瑰宝,具有深厚的历史底蕴和独特的艺术魅力。然而,在现代社会中,由于生活节奏的加快和信息获取方式的多样化,古诗词的传播和阅读面临着一定的挑......
  • mysql.md
    目录引用基础篇通用语法及分类DDL(数据定义语言)数据库操作注意事项表操作DML(数据操作语言)添加数据注意事项更新和删除数据DQL(数据查询语言)基础查询条件查询聚合查询(聚合函数)分组查询注意事项排序查询注意事项分页查询注意事项DQL执行顺序DCL管理用户注意事项权限控制注意事项函数字......
  • 连接数据库
    //DriverManager.getConnection("地址","账户","密码");密码一定要齐全不能有空格importjava.sql.Connection;importjava.sql.DriverManager;publicclassJDBC{publicstaticvoidmain(String[]args){try{Class.forName("com.mysql.cj.jdbc.D......
  • SpringBoot母婴店购物系统9j5v8程序+源码+数据库+调试部署+开发环境
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,商品种类,母婴商品,店员开题报告内容一、研究背景与目的随着母婴市场的蓬勃发展,消费者对购物便捷性、商品质量与个性化服务的需求日益增长。传统母婴店面......
  • SpringBoot秒杀系统实现asgyk--程序+源码+数据库+调试部署+开发环境
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,商家,商铺信息,商品信息,限时秒杀,商品分类,顾客咨询,抢购提醒,营业统计开题报告内容一、研究背景秒杀活动作为电商平台的常见促销手段,可以极大提升用户......
  • SpringBoot面向网络直播平台的推荐系统y9tf8(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、课题背景随着互联网技术的飞速发展,网络直播已成为人们日常生活中不可或缺的一部分。然而,面对海量且日益增长的直播内容,用户往往难以快速找到符......