题目来源:leetcode,牛客,剑指offer.
创作目标:记录学习MysqL学习历程
希望在提升自己的同时,帮助他人,与大家一起共同进步,互相成长.
学历代表过去,能力代表现在,学习能力代表未来!
文章目录
1.6 primary key auto_increment 自增主键
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生成算法.
实现公式:
1.7 foreign key 外键约束
语法:
- 添加外键约束
(constraint 外键名) foreign key (字段名1),(字段名2..) reference 主表名(主键列1,主键列2..)
alter table 表名 add (constraint 外键名) foreign key (列名) references 主表名(列名);
- 删除外键约束
alter table 表名 drop forigen key (外键名);
示例:
- 加入外键约束之后再插入非法数据就会报错.
- 非法修改已插入的数据也会报错.
Tips:
- 父表中元素的删除:
实际应用中删除父表中数据的方式通常是逻辑删除. 当一个商品下架之后,为了让客户可以查看到历史订单,所以不能直接删除商品信息. 通常需要在建表之初预留商品下架的字段,商品下架之后,给商品下架的字段标记赋值达到伪删除的效果.
2.表的设计
基本思路:
示例:
粗略设计一个学生教务管理系统.
- 确定实体为: 学生,课程,学生账号, 学生班级
- 学生与课程之间存在关系,学生与账号之间存在关系,学生与班级之间存在关系.
- 学生与课程:多对多,学生与账号:一对一,学生与班级:一对多.
2.1 一对一
2.2 一对多
@H_965_502@
2.3 多对多
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。