人生碌碌,竞短论长,却不道枯荣有数,得失难量。
前言
这是我自己学习mysql数据库的第二篇博客总结。后期我会继续把mysql数据库学习笔记开源至博客上。
上一期笔记是关于mysql数据库的数据类型,没看的同学可以过去看看:
表格的约束
1. 虽然数据类型本身提供了一定程度的约束,但这些基本的数据类型约束往往不足以覆盖所有的业务需求。为了更好地保证数据的合法性,从业务逻辑角度出发,通常需要添加一些额外的约束条件。
null-not null-空属性
1. 空属性分为null(默认为空)和not null(不能为空)两种。
2. null表示未插入,而' '表示已插入,且插入值为0。
3. 空属性无法参与计算。
default-默认值
1. default:如果用户输入了具体的数据,那么就使用具体的数据,如果没有,就使用默认的数据。
2. default和not null不推荐一起使用。但是两者一起使用时并不冲突:对于某一列,如果用户想插入数据,那么not null确保插入的数据不为空,如果用户不想插入数据,那么default确保用户忽略这一列插入时使用默认值。
3. 在创建表格时,如果语句中没有设定空属性和默认值,那么mysql会自动优化添加default null。
comment-列描述
1. comment,没有实际含义,专门用来描述字段,会根据表创建语句保存,用来给程序员来进行了解,类似于注释。
zerofill-零填充
1. zerofill:给一列数据zerofill属性,如果实际宽度小于设定宽度,那么将按照设定宽度补齐,如果实际宽度大于设定宽度,则不发生改变。
2. zerofill对于有符号的int默认为11位,无符号的int默认为10位。
primary key-主键
1. 主键用于约束字段中的数据, 确保其唯一且不能为空。一张表中 只能有一个主键,但主键可以由 单列或多列组合而成,后者称为 复合主键。2. 主键 所在的列通常是 整数类型 。3. 创格建表格的时候 可以直接在字段上指定主键,当 表格创建好以后 但是没有主键的时候,也可以再次追加主键。
//在创建复合主键时,需要单独拿出一行来说明
primary key(column_name1,column_name2)
create table tb_name(
id int auto_increment,
qq varchar(30),
primary key(id,qq)
);
//增设主键
alter table db_name add primary key(column_name);
//取消主键
alter table db_name drop primary key;
auto_increment-自增长
1. auto_increment :如果 没有主动显式赋值,系统则会自动在该字段当前已有的最大值基础上 +1,生成一个新的值。2. 自增长 通常和 主键 搭配使用,作为 逻辑主键 。3. 自增长的特点 :任何一个字段要拥有自增长属性,前提是 本身是一个索引 , 自增长 字段必须是整数 ,一张表最多 只能有一个自增长字段 。
unique key-唯一键
1. 一张表中可能有多个字段需要满足唯一性约束,即 数据不能重复,但一张表只能有一个主键。此时,可以通过 唯一键来解决 多个字段需要唯一性约束的问题。2. 主键 可以视为 特殊化的唯一键 , 主键 不能重复 不能为空 , 唯一键 不能重复 可以为空 。
foreign key-外键
1. 外键用于 定义主表和从表之间的关系。2. 外键约束作用于 从表上,而 主表中与之关联的列必须具有 主键约束或 唯一键约束。
//定义外键时,需要单独拿出一行来说明
foreign key (column1_name) references tb_name (column2_name)
create table tb_name1 (
id int primary key,
name varchar(30) not null
);
create table tb_name2 (
stu_id int primary key,
name varchar(30) not null,
foreign key(stu_id) references tb_name1(id)
);
综合案例
现在有一个商店的数据,记录客户及购物情况,有以下三个表格组成:1. 商品 goods (商品编号 goods_id ,商品名 goods_name ,单价 unitprice ,商品类别 category ,供应商 provider )2. 客户 customer (客户号 customer_id ,姓名 name ,住址 address ,邮箱 email ,性别 sex ,身份证 card_id )3. 购买 purchase (购买订单号 order_id ,客户号 customer_id ,商品号 goods_id ,购买数量 nums )
create database sample;
alter database sample character set = utf8mb4 collate = utf8mb4_unicode_ci;
create table goods (
-> goods_id int primary key auto_increment,
-> goods_name varchar(30) not null,
-> unitprice float not null,
-> category enum('饮料','主食','服装','家电'),
-> provider enum('万达','沃尔玛','华润万家')
-> );
create table customer (
-> customer_id int primary key auto_increment,
-> name varchar(30) not null,
-> address varchar(50) not null,
-> email varchar(30) unique key,
-> sex enum('男','女'),
-> card_id varchar(30) unique key
-> );
create table purchase (
-> order_id int primary key auto_increment,
-> customer_id int not null,
-> goods_id int not null,
-> nums int not null,
-> foreign key (customer_id) references customer(customer_id),
-> foreign key (goods_id) references goods(goods_id)
-> );
致谢
感谢您花时间阅读这篇文章!如果您对本文有任何疑问、建议或是想要分享您的看法,请不要犹豫,在评论区留下您的宝贵意见。每一次互动都是我前进的动力,您的支持是我最大的鼓励。期待与您的交流,让我们共同成长,探索技术世界的无限可能!