前段时间遇到一个小问题,后来发现这是个挺常见的坑,顺手整理一篇笔记。
@bit::Shadow
✧(≖ ◡ ≖✿
目录
空串与null
MySQL中空串''或者""与null的区别:空串代表有一个串不过其内部为空,null代表什么都没有。
在一个正常的枚举体中,当咱们插入时输入0插入,再select * from 查看就会注意到什么都没有。这其实是插入了一个错误的枚举值(正常从1动手)而显示时以空串形式显现。
not null与default
在创建表(的列成员时)咱们可根据实际需求进行选项的添加:
mysql> create table t1(age int not null comment '年龄一定不能为空',
name varchar(20) default '张三' comment '姓名default张三',
height smallint unsigned not null default 170
) character set utf8mb4 collate=utf8mb4_0900_ai_ci engine=innodb;
not null的约束代表此列无法插入null,default值代表当插入数据时未指定时自动设置的默认值。
mysql> insert into t1(age,height) values(18,175);
-- name使用默认值张三 height使用指定值
注意:一旦你指定default列就必须写东西,不可以指定了default列却不写。
NULL VS default
很明显的注意到default与NULL存在优先级问题
实际一图概之:
即:default优先
zerofill
zerofill是一种东西显示方案。
mysql> create table t2(age tinyint zerofill, ag tinyint(4) zerofill);
秉持至少显示设置位个数字,缺少则补零。
desc误区
在desc查询时常常会产生误区:“类型后括号的值”限定原类型大小。
注意:类型后括号内的数据是zerofill的填充值。
1.主键(primary Key)
一个表内表示某列或某多列的属性,限制重复。
mysql> create table t3(id int primary key,
name varchar(20) not null default '张三');
拥有主键标识的列用desc查看
注意:设置为主键的列,自动约束为“非空”。
1.1复合主键
复合主键(Composite Primary Key)就是用多个列一起组成主键,用来唯一标识一行。常见于关联表(中间表)。
注意:复合主键的设置语法异于单列主键,要在末尾统一指定。
CREATE TABLE student_course (
student_id INT NOT NULL COMMENT '学生ID',
course_id INT NOT NULL COMMENT '课程ID',
score DECIMAL(5,2) COMMENT '成绩',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '选课时间',
PRIMARY KEY (student_id, course_id)
) ENGINE InnoDB COMMENT '学生选课表';
复合主键作用的多个列的值不能完全相同。(可部分一致)
同列看
主键的认识:主键是一个整体的概念,限制完全相同的值不会出现。
1.2自增主键
auto_increment
最常与主键搭配的约束,效果表现为每插入一个数据自增主键列值变为
自增长 auto_increment
id自增默认自‘1’动手
mysql> create table t4(id int primary key auto_increment, name char(2));
未指定id依次插入数据
当插入三个后auto_increment=4
自定义初始auto值
在engine 设置的地方可以手动指定初始值。
create table t4 (
id int primary key auto_increment,
name char(2)
) auto_increment = 1000;
1.3唯一键
unique
达成上的区别:像主键限制唯一性,不过主键不可以为空不过唯一键可以为空。(可以存在两个空!!!)
1.3.1理解主键、唯一键
1.主键核心体现出‘主’字,表示主从关系标识整行。(因此常设置自增,不能为空)
2.唯一键强调‘唯一性’,像QQ号、用户名。(没错就是QQ号、用户名)
1.3.2理解主键与业务的分离
易变性或者可变性决定了唯一键的用。
create table users (
id bigint primary key auto_increment comment '主键ID',
username varchar(50) not null unique comment '用户名,唯一',
email varchar(100) unique comment '邮箱,唯一',
phone char(11) unique comment '手机号,唯一',
name varchar(20) comment '姓名',
age int comment '年龄'
) engine InnoDB comment '用户表';
1.4外键
foreign key([从表外键列]) references 主表名
create table student(
name char(10),
class_id tinyint, -- 注意此处有','
foreign key(class_id) references class(id)
);
create table class(
id tinyint primary key,
name varchar(20)
) engine InnoDB;
注意:
1.主从键列类型必须完全一致,才可以建立起来。
2.在创建从表前主表必须提前创建好。(因为要指定主键联系)
3.在从表中插入行时,必须主表中存在相应联系。
感谢支持,长期连载
欢迎关注
本次分享就到这里。技术这东西越研究越有意思,后续有新的收获我也会继续更新。
评论 (0)
暂无评论