开发公司[MySQL]数据库的约束与表的设计

专栏简介 :MySql开发公司数据库从入门到进阶.

题目来源:leetcode,牛客,剑指offer.

创作目标:记录学习MySql学习历程

开发公司希望在提升自己的同时,帮助他人,,开发公司与大家一起共同进步,互相成长.

开发公司学历代表过去,开发公司能力代表现在,开发公司学习能力代表未来! 


文章目录


1.开发公司数据库约束

  • 开发公司约束是关系型数据库提开发公司供的一种校验数据合法性的机制.

 1.1 约束类型

约束类型说明示例
null使用not null 开发公司指定列不为空name varchar(20) not null;
unique开发公司指定列为唯一的,不重复的name varchar(20) unique;
default开发公司指定列为空时的默认值name varchar(20) default "无名氏";
主键约束not null 和unique 的结合id int primary key;
外键约束开发公司关联其他表的主键或唯一键foreign key (字段名) references 主表(列)
check约束开发公司保证列的值符合指定的条件check(sex='男'or sex='女')

 1.2 null 约束

  • 开发公司创建表时指定某列不为空.

语法:

create table 表名(字段1 类型 not null,字段2 类型...);

示例:


 1.3 unique 开发公司唯一的约束

  • 创建表时指定某列为唯一的不重复的.

语法:

create table 表名(字段1 类型 unique,字段2 类型....);

示例:


 1.4 default 默认值约束

  • 指定列为空时的默认值

语法:

create table 表名(字段1 类型 default 默认值,字段2 类型....);

示例:


 1.5 primary key 主键约束

  • 创建表时指定列有唯一确定的标识符

语法:

create table 表名(字段1 类型 parmary key,字段2 类型...);

示例:

学生id 不为null 且不能重复.


 1.6 primary key auto_increment 自增主键

  • 对于整数类型的主键, 常搭配自增auto_increment变为自增主键, 插入字段不给值时, 使用最  大值+1.

语法:

create table 表名(字段1 int primary key auto_increment,字段2 类型...);

示例:

  • 分布式系统中唯一id生成算法 

对于较小的数据量, 所有的数据都在一台MySQL服务器上存储,此时自增主键可以很好的工作, 但如果涉及的数据量较为庞大, 需要将数据部署到多台MySQL服务器上, 这时再插入数据就无法保证自增主键的唯一性.因此MySQL内部采用分布式系统中唯一id生成算法.

实现公式:

  • 时间戳+主机编号+随机因子 结合这三部分就可以得到一个全局唯一的id.


 1.7 foreign key 外键约束

  • MySQL外键是用来在两个表之间建立连接,可以是一列或多列,一个表可以有多个外键.
  • 外键是本表的一个字段, 不是本表的主键, 但对于另一个表的主键.
  • 定义外键之后不允许删除另一个表中具有关联关系的行.
  • 主表(父表): 相关联字段中主键所在的表就是主表.
  • 从表(子表): 相关联字段中外键所在的表就是从表.

语法:

  • 添加外键约束
(constraint 外键名) foreign key (字段名1),(字段名2..) reference 主表名(主键列1,主键列2..)
  • 修改表时添加外键约束 
alter table 表名 add (constraint 外键名) foreign key (列名) references 主表名(列名);
  • 删除外键约束
alter table 表名 drop forigen key (外键名);

 示例:

  • MySQL表中, 没有默认对两张有关联的表提供检查机制, 例如:下图中插入非法班级, 不会报错. 因此需要引入外键约束.

  • 加入外键约束之后再插入非法数据就会报错. 

  • 非法修改已插入的数据也会报错.

 Tips:

  • 父表必须已存在数据库中或是当前正在创建的表.
  • 父表中的主键不能出现空值, 但外键可以.所以通常用primary key来约束主键.
  • 外键中列是数目和数据类型必须和父表的主键一一对应.
  • 父表限制子表的插入,字表也约束父表的删除.(互相制约) 
  • 父表中元素的删除:

实际应用中删除父表中数据的方式通常是逻辑删除. 当一个商品下架之后, 为了让客户可以查看到历史订单, 所以不能直接删除商品信息. 通常需要在建表之初预留商品下架的字段, 商品下架之后, 给商品下架的字段标记赋值达到伪删除的效果.


2.表的设计

基本思路:

  1. 先明确实体
  2. 再明确实体之间的联系
  3. 根据上述内容, 嵌套到下面的公式中, 就可做出表.

示例:

粗略设计一个学生教务管理系统.

  1. 确定实体为: 学生, 课程, 学生账号, 学生班级
  2. 学生与课程之间存在关系, 学生与账号之间存在关系, 学生与班级之间存在关系.
  3. 学生与课程:多对多, 学生与账号:一对一, 学生与班级:一对多.

 2.1 一对一

一个人只能有一个身份证号码, 一个身份证号码只对应一个人.


 2.2 一对多

一个班级有多个学生, 一个学生只对应一个班级.


 2.3 多对多

一个学生可以选择多个课程, 一个课程也可以被多个学生选择.

 



网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发