【MySQL】基础

目录

1、数据类型

1.1、日期和时间类型

1.2、enum和set

2、表的约束

2.1、空属性

2.2、默认值(default)

2.3、列描述(comment)

2.4、zerofill

[2.5、主键(primary key)](#2.5、主键(primary key))

2.6、自增长(auto_increment))

2.7、唯一键(unique)

2.8、外键


1、数据类型

1.1、日期和时间类型

创建表:

bash 复制代码
mysql> create table birthday (
    t1 date,   //日期
    t2 datetime, //日期时间
    t3 timestamp //时间戳
    );

插入数据:

bash 复制代码
mysql> insert into birthday(t1,t2) values('1997-7-1','2008-8-8 12:1:1'); 
--插入两种时间

插入数据的时候,时间戳自动补上时间。更新数据时,时间戳也会更新时间。

1.2、enum和set

enum(枚举)是单选(多选一),插入的数据必须是枚举值中的一个,可以使用下标进行插入数据,并且下标是从1开始。

set(集合)是多选(多选一或多选),这个是位图不是下标;

bash 复制代码
mysql> create table votes(
-> username varchar(30),
-> hobby set('登山','游泳','篮球','武术'), --注意:使用数字标识每个爱好的时候,想想
Linux权限,采用比特位位置来个set中的爱好对应起来
-> gender enum('男','女'));

使用find_in_set'可以查询出所有爱好包含羽毛球的人

bash 复制代码
select * from votes where find_in_set('羽毛球',bobby);

2、表的约束

表的约束:表中一定要有各种约束,通过约束,让我们未来插入数据库中的数据是符合预期的。约束本质是通过技术手段,倒逼程序员,插入正确的数据。反过来,站在mysql的视角,凡是插入进来的数据,都是符合数据约束的。

2.1、空属性

创建一个班级表,包含班级名和班级所在的教室。
站在正常的业务逻辑中:
如果班级没有名字,你不知道你在哪个班级
如果教室名字可以为空,就不知道在哪上课
所以我们在设计数据库表的时候,一定要在表中进行限制,满足上面条件的数据就不能插入到表中。这就是" 约束 " 。

2.2、默认值(default)

某个数据会经常性的出现某个具体的值,可以在一开始就制定好,需要数据的时候用户可以进行选择性的使用默认值。

默认值生效就是在插入数据的时候对此列不进行插入。

2.3、列描述(comment)

desc不能看到列描述

show create table 表名\G 可以看到列描述

2.4、zerofill

字符串类型---char、varchar 括号里的数字=存储的最大字符数(存储限制)

数值类型---- int 、bigint 括号里的数字=显示宽度(仅影响显示,不影响存储)

decimal(m,n) 是特殊数值类型:m 和 n 限制数值的总位数和小数位数(影响存储和精度)。

2.5、主键(primary key)

有了主键,表中就不会出现相同的两行数据。

但是主键的唯一性约束只针对主键字段本身,而不是整行所有字段-----主键不同,但是其他列相同,表也是允许插入的。


创建唯一性约束:

  • 如果你不希望出现任何业务数据重复的行,正确的做法 不是单靠主键,而是给所有需要保证唯一的列创建一个 UNIQUE 约束。

ALTER TABLE 学生表 ADD CONSTRAINT unique_student_info UNIQUE (学号, 姓名, 年龄);

2.6、自增长(auto_increment)

当对应的字段不给值,就会自动被系统触发,会从当前的最大值+1,得到一个新的值,通常和主键搭配使用,作为逻辑主键。

索引:主键是身份证,索引就是目录。

主键和索引的关系,主键都是索引但是并非索引都是主键。

主键是身份证,索引就是目录
主键和索引的关系:
1、主键首先是一个"唯一且非空"的索引,然后他还被赋予了"唯一标识符"这个身份。
2、创建主键时,数据库在做什么??
当你为一张表创建了一个主键,数据库会隐式创建一个唯一索引;强制实施主键约束(确保所有插入和更新的数据都满足唯一且非空的条件)
我们不需要手动再为主键创建一个索引,因为他已经自带了。
3、为什么通过主键查询最快?
主键自带索引
4、选择合适的主键:因为主键自带索引,因此选择一个短小、连续、不经常更改的列作为主键对性能非常有利。

2.7、唯一键(unique)

一张表中只能有一个主键,但是往往有很多字段需要唯一性,数据不能重复。唯一键就能解决表中有多个字段需要唯一性约束的问题。

唯一键不能重复,但可以为空

唯一键和主键的区别:
主键更多的是标识唯一性。而唯一键更多的是保证在业务上,不要和别的出现重复。

eg:员工管理系统---身份号(主键)和员工工号(唯一键),员工工号不能重复。
一般而言,我们建议将主键设计成为和当前业务无关的字段,这样,当业务调整的时候,我们可以尽量不会对主键做过大的调整。

2.8、外键

外键用于定义主表和从表之间的关系,外键约束主要定义在从表上,主表则必须是有主键约束或unique约束。
当定义外键后,要求外键列数据必须在主表的主键列存在或为null

主表中被外键关联的列(通常是主键,但可以是具有唯一约束的列)
通常情况下,外键关联主表的主键。
---实际业务中,外键几乎都是关联主表的主键(PRIMARY KEY)。因为主键本身具有唯一性和非空性,能确保被关联的列值是唯一且确定的,符合外键对 "关联目标必须唯一可识别" 的要求。
特殊情况,外键也可以关联主表的唯一键(unique)
---数据库允许外键关联主表中具有唯一约束(UNIQUE)且非空(NOT NULL)的列(即唯一键)。因为唯一键也能保证列值的唯一性,满足外键关联的 "目标值必须唯一存在" 的核心需求。

简单来说,外键约束就是数据库用来维护现实世界中各种关系(如母子关系、部门-员工关系、订单-商品关系)不出现逻辑错误的核心机制。

查询结果去重:

相关推荐
传奇开心果编程1 小时前
【Compose Multiplatform 跨端开发学与练】第8课 资源管理与主题
android·windows·学习·ios·kotlin·web·composer
传奇开心果编程2 小时前
【Compose Multiplatform 跨端开发学与练】第9课 测试与调试
android·学习·macos·ios·kotlin·web·composer
传奇开心果编程3 小时前
【Compose Multiplatform 跨端开发学与练】第4课 导航与路由
android·windows·学习·ui·ios·kotlin·composer
传奇开心果编程3 小时前
【Compose Multiplatform 跨端开发学与练】第6课 状态管理与架构
android·学习·ui·ios·架构·kotlin·composer
事圆则缓3 小时前
Android AOSP 定制常见概念:源码目录、系统镜像与刷机流程
android
传奇开心果编程3 小时前
【Compose Multiplatform 跨端开发学与练】第2课 Compose 基础语法
android·windows·学习·ui·ios·kotlin·composer
supabc1233 小时前
Celium:连接 Windows、Mac、Linux 与 Android,让远程访问和设备管理更简单
android·linux·windows·macos·远程访问·网络管理·celium
Dovis(誓平步青云)4 小时前
导览音频切换太快,旧讲解不能覆盖新展品
android·前端·javascript·ecmascript·音视频·宠物
五彩小白20 小时前
自回归和上下文
android
事圆则缓1 天前
Android 多渠道打包实战:Product Flavors、签名、AAB 与发包校验
android