【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) 是特殊数值类型:mn 限制数值的总位数和小数位数(影响存储和精度)。

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)的列(即唯一键)。因为唯一键也能保证列值的唯一性,满足外键关联的 "目标值必须唯一存在" 的核心需求。

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

查询结果去重:

相关推荐
踏雪羽翼5 小时前
android TextView实现文字字符不同方向显示
android·自定义view·textview方向·文字方向·textview文字显示方向·文字旋转·textview文字旋转
lxysbly6 小时前
安卓玩MRP冒泡游戏:模拟器下载与使用方法
android·游戏
夏沫琅琊8 小时前
Android 各类日志全面解析(含特点、分析方法、实战案例)
android
程序员JerrySUN8 小时前
OP-TEE + YOLOv8:从“加密权重”到“内存中解密并推理”的完整实战记录
android·java·开发语言·redis·yolo·架构
TeleostNaCl10 小时前
Android | 启用 TextView 跑马灯效果的方法
android·经验分享·android runtime
TheNextByte110 小时前
Android USB文件传输无法使用?5种解决方法
android
quanyechacsdn11 小时前
Android Studio创建库文件用jitpack构建后使用implementation方式引用
android·ide·kotlin·android studio·implementation·android 库文件·使用jitpack
程序员陆业聪12 小时前
聊聊2026年Android开发会是什么样
android
编程大师哥13 小时前
Android分层
android
极客小云14 小时前
【深入理解 Android 中的 build.gradle 文件】
android·安卓·安全架构·安全性测试