mysql 逻辑型字段_MySQL:字段约束

字段约束

MySQL的字段约束共四种:

约束名

关键字

描述

主键约束

PRIMARY KEY

字段值唯一,且不能为NULL

非空约束

NOT NULL

字段值不能为NULL

唯一约束

UNIQUE

字段值唯一,但可以为NULL

外键约束

FOREIGN KEY

保持关联数据的逻辑性

关于主键约束

主键约束字段要求字段值的唯一性,且不能为NULL

建议使用数字类型的主键,提高检索速度,一般设置自增主键或GUID

CREATE TABLE t_emp(

id INT PRIMARY KEY AUTO_INCREMENT,

...

);

关于非空约束

插入数据时,该字段值不能为NULL

NULL不是空字符串

可以使用NOT NULL,但设置默认值

CREATE TABLE t_emp(

id INT PRIMARY KEY AUTO_INCREMENT,

name VARCHAR(20) NOT NULL,

married BOOLEAN NOT NULL DEFAULT FALSE

);

关于外键约束

外键约束主要用于保证数据的逻辑关系

t_dept:

dep_id

dep_name

tel

11

研发部

111

12

测试部

112

13

销售部

113

t_emp:

emp_num

name

sex

dep_id

1

张三

11

2

李四

12

外键约束写在子表中:

-- 父表:

CREATE TABLE t_dept(

dep_id INT USIGNED PRIMARY KEY,

dep_name VARCHAR(20) NOT NULL UNIQUE,

tel CHAR(3) UNIQUE

);

-- 子表:

CREATE TABLE t_emp(

emp_num INT USIGNED PRIMARY KEY,

name VARCHAR(20) NOT NULL,

sex CHAR(3) ENUM('男','女') NOT NULL,

dep_id INT USIGNED,

FOREIGN KEY (dep_id) REFERENCES t_dept(dep_id)

);

设置外键约束后,若要删除父表内容,必须先删除子表相关的内容,这种约束能保证逻辑关系。

但另一方面,多表的相互外键关联,可能形成外键闭环,导致无法删除任何一张表的记录。故可以不设置外键约束,仅依靠应用程序的逻辑来保证。

关于数据库范式

构造数据库需要遵循一定的规则,这种规则就是范式。目前关系型数据库有6种范式,一般只需满足第三范式即可。

第一范式:原子性

数据表的每一列都是不可分割的基本数据项,同一列中不能有多个值,也不能存在重复属性。

第一范式是数据库的基本要求,不满足第一范式就不是关系型数据库。

如下数据表不符合第一范式:

student_id

name

class

1001

张三

一年级三班

修改后:

student_id

name

grade

class

1001

张三

一年级

三班

第二范式:唯一性

数据表中的每一条记录必须是唯一的的,通常使用添加主键作为唯一标识。

第二范式的提出是为了避免保存重复数据,浪费空间。

如下数据不符合第二范式:张三同一天考了两次试,无法区分两次记录

student_id

name

exam_time

1001

张三

2021-02-15

1001

张三

2021-02-15

修改后:

id

student_id

name

exam_time

1

1001

张三

2021-02-15

2

1001

张三

2021-02-15

第三范式:关联性

每列都与主键有直接关系,不存在传递依赖。

当满足了第三范式之后,就同时满足了第一和第二范式

按照第三范式创建数据表,将来检索和提取数据时会很方便。按照第三范式,数据可以拆分保存到不同的数据表,彼此保持关联。

如下数据不符合第三范式:

class

name

english_score

math_score

三班

张三

90

100

修改后:

class

name

student_id

三班

张三

1001

student_id

english_score

math_score

1001

90

100

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值