mysql主键用什么类型(mysql主键设计原则)

mysql主键用什么类型(mysql主键设计原则)1 主码 PRIMARY KEY 约束 主码约束是指在表中定义一个主码 它的值用于唯一标识表中的每一行数据 若关系中的一个属性或属性组的值能够唯一地标识一个元组 且他的子集不能唯一的标识一个元组 则称这个属性或属性组做候选码 候选码 特性 唯一性 唯一性是指候选码的值在任何时刻都能唯一标识关系中的一个元组 例如 在一个学生数据库中 学号可以唯一标识每个学生 无论数据库中有多少学生

大家好,我是讯享网,很高兴认识大家。



(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. 自增字段必须定义为键(主键、唯一键或者外码)。

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

(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。


讯享网

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

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

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

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

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

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参考

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

取消外码约束:

讯享网

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

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

 

设置外码约束:

讯享网

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

 
 

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

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

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

讯享网

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

 
 

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

讯享网

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

 

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

小讯
上一篇 2025-05-22 21:14
下一篇 2025-05-13 13:39

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/162119.html