数据库(部分讲解)

字符编码与配置文件

1.\s查看MySQL相关信息

image
image

2.默认的配置文件是my-default.ini

image
image

# 字符编码相关配置
[mysqld]
	character-set-server=utf8mb4
	collation-server=utf8mb4_general_ci
[client]
	default-character-set=utf8mb4
[mysql]
	default-character-set=utf8mb4
'''
注意:
1.utf8mb4能够存储表情 功能更强大
2.utf8与utf-8是有区别的 MySQL中只有utf8
'''

3.修改了配置文件中关于[mysqld]的配置 需要重启服务端

image

利用配置文件我们可以偷懒

将管理员登录的账号密码直接写在配置文件中 之后使用mysql登录即可
image

image

数据库存储引擎

存储引擎

  • 就是数据库针对数据采取的多种存取方式

查看常见存储引擎的方式

show engines;
image

需要了解的四种引擎

MyISAM

  • MySQL5.5之前默认的存储引擎
优点:存取数据的速度快
缺点:功能较少 安全性较低
适用场景:对事务完整性没有要求 表的数据都会只读的

InnoDB

  • MySQL5.5之后默认的存储引擎
优点:支持事务和崩溃修复能力 引入了行级锁和外键约束 安全性更高
缺点:占用的数据空间相对较大 存取速度没有MyISAM快
适用场景:需要事务支持 并且有较高的并发读写频率

Memory

  • 基于内存存取数据 仅用于临时表数据存取
优点:访问速度较快
缺点:
	1.哈希索引数据不是按照索引值顺序存储 无法用于排序
	2.不支持部分索引匹配查找 因为哈希索引是使用索引列的全部内容来计算哈希值的
	3.只支持等值比较 不支持范围查询
	4.当出现哈希冲突时 存储引擎需要遍历链表中所有的行指针 逐行进行比较 直到找到符合条件的行

BlackHole

  • 其表现就像一个黑洞 只进不出 进来就消失 换句话说,任何往其中写的数据都将丢失
使用场景:虽然其不保存数据 但对数据库的操作仍旧记录在binlog日志中 这就带来一个好处 可以将其作为主从复制的中介 将原来从主库中同步的操作变为从作为中介的BlackHole引擎数据库中同步

了解不同存储引擎底层文件个数

create database db2;
use db2;
create table t1(id int) engine=innodb;
create table t2(id int) engine=myisam;
create table t3(id int) engine=memory;
create table t4(id int) engine=blackhole;

image

image

  • innodb两个文件
后缀名 作用
.frm 表结构
.ibd 表数据(表索引)

这里的表索引是输的目录,加快数据查询的

  • myisam三个文件
后缀名 作用
.frm 表结构
.MYD 表数据
.MYI 表索引
  • memory一个文件
  • blackhole一个文件
文件名 后缀名 作用
memory .frm 表结构
blackhole .frm 表结构
  • 往四个表里面分别插入一条数据
insert into t1 values(1);
insert into t2 values(1);
insert into t3 values(1);
insert into t4 values(1);
'''注意:MySQL默认忽略大小写'''

image

创建表的完整语法

create table 表名(
	字段名 字段类型(数字) 约束条件,
	字段名 字段类型(数字) 约束条件,
 	字段名 字段类型(数字) 约束条件
);
1.字段名和字段类型是必须的
2.数字和约束条件是可选的
3.约束条件也可以写多个 空格隔开即可
4.最后一行结尾不能加逗号
ps:编写SQL语句报错之后不要慌 仔细查看提示 会很快解决 
    	near ')' at line 7

image

字段类型之整型

整数类型一共有 5 种,包括 TINYINT、SMALLINT、MEDIUMINT、INT(INTEGER)和 BIGINT

tinyint		   	1bytes		    正负号(占1bit)
smallint		2bytes		    正负号(占1bit)
int			4bytes		    正负号(占1bit)
bigint			8bytes		    正负号(占1bit)
类型 大小 范围(有符号) 范围(无符号) 用途
TINYINT 1 字节 -128~127 (0,255) 小整数值
SMALLINT 2 字节 -32768~32767 (0,65 535) 大整数值
MEDIUMINT 3 字节 -8388608~8388607 (0,16 777 215) 大整数值
INT或INTEGER 4 字节 -2147483648~2147483647 0~4294967295 大整数值
BIGINT 8 字节 -9223372036854775808~9223 372036854775807 0~18446744073709 551615 极大整数值

注意事项

  • 需要考虑正负数的问题,如果需要存储负数,则需要占据一个比特位(比如1bytes(1bytes=2的八次方,256)如果需要存储负数,那么需要占据一个比特位放负数符号,剩下2的七次方)就剩128了

  • 注意手机号如果使用整型来存储,需要使用bigint才可以

  • 有时候看似需要使用数字类型存储的数据其实可能使用的是字符串,因为字符串可以解决不同语言对数字不精确的缺陷

  • create table t2(id tinyint);

  • insert into t5 values(-129),(256);

  • 如果是在5.6版本不会报错 会自动处理成最大范围(没有意义)

验证整型默认是否携带正负号
create table t5(id tinyint);
insert into t5 values(-129),(128);
结果是-128和127 也就意味着默认自带正负号
image

image
我们也可以取消正负号
create table t6(id tinyint unsigned);
insert into t6 values(-129),(128),(1000);

image

严格模式

  • 当我们在使用数据库存储数据的时候 如果数据不符合规范 应该直接报错而不是擅自修改数据 这样会导致数据的失真(没有实际意义)
    正常都应该报错 但是我们之前不小心改了配置文件
    image

1.临时修改

set session sql_mode='strict_trans_tables';
	在当前客户端有效
set global sql_mode='strict_trans_tables';
	在当前服务端有效

image

2.永久修改

直接修改配置文件

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

image

字段类型之浮点型

概念

浮点型主要有 float,double 两个,浮点型在数据库中存放的是近似值,例如float(6,3),如果插入一个数123.45678,实际数据库里存的是123.457。

语法简介

  • float(20,10)
    总共存储20位数,小数点后面占10位数
类型 大小 用途
FLOAT 4字节 单精度浮点数值
DOUBLE 8字节 双精度浮点数值
  • 定点型字段类型有 decimal 一个,主要用于存储有精度要求的小数
类型 大小 用途
DECIMAL 对DECIMAL(M,D),如果M>D,为M+2字节 否则为D+2 精确小数值

对于声明语法 DECIMAL(M,D) ,自变量的值范围如下:
M是最大位数(精度),范围是1到65。可不指定,默认值是10。
D是小数点右边的位数(小数位)。范围是0到30,并且不能大于M,可不指定,默认值是0。
例如字段 salary DECIMAL(5,2),能够存储具有五位数字和两位小数的任何值,因此可以存储在salary列中的值的范围是从-999.99到999.99

create table t7(id float(60,20));
create table t8(id double(60,20));
create table t9(id decimal(60,20));
insert into t7 values(1.11111111111111111111);
insert into t8 values(1.11111111111111111111);
insert into t9 values(1.11111111111111111111);

image

image

  • 总结:三者的核心区别在于精确度不同

字段类型之字符类型

  • 字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET
类型 大小 用途
CHAR 0-255字节 定长字符串
VARCHAR 0-65535 字节 变长字符串
TINYBLOB 0-255字节 不超过 255 个字符的二进制字符串
TINYTEXT 0-255字节 短文本字符串
BLOB 0-65 535字节 二进制形式的长文本数据
TEXT 0-65 535字节 长文本数据
MEDIUMBLOB 0-16 777 215字节 二进制形式的中等长度文本数据
MEDIUMTEXT 0-16 777 215字节 中等长度文本数据
LONGBLOB 0-4 294 967 295字节 二进制形式的极大文本数据
LONGTEXT 0-4 294 967 295字节 极大文本数据
  • 其中 char 和 varchar 是最常用到的。char 类型是定长的,MySQL 总是根据定义的字符串长度分配足够的空间。当保存 char 值时,在它们的右边填充空格以达到指定的长度,当检索到 char 值时,尾部的空格被删除掉。varchar 类型用于存储可变长字符串(即变长),存储时,如果字符没有达到定义的位数,也不会在后面补空格
char
	定长
    	char(4)  最多存储四个字符 超出就报错 不够四个空格填充至四个
varchar
	变长
    	varchar(4) 最多存储四个字符 超出就报错 不够则有几位存几位
    
create table t10(id int, name char(4));
create table t11(id int, name varchar(4));
insert into t10 values(1, 'jason1');
insert into t11 values(1, 'jason2');

image

  • char_length()获取字段存储的数据长度

默认情况下MySQL针对char的存储会自动填充空格和删除空格

set global sql_mode='strict_trans_tables,pad_char_to_full_length';

image

image

char和varchar对比

  • char
    优势:整存整取 速度快
    劣势:浪费存储空间

  • varchar
    优势:节省存储空间
    劣势:存取数据的速度较char慢

  • 比如在存储下方的字符时,char字段类型使用空格填充,varchar就需要使用报头,记录每一次记录的字符的长度,而报头需要占用一个字节

jacktonyjasonkevintomjerry
1bytes+jack1bytes+tony1bytes+jason1bytes+kevin1bytes+tom1bytes+jerry
"""
char与varchar的使用需要结合具体应用场景
"""

数字的含义

  • 数字在很多地方都是用来表示限制存储数据的长度
  • 但是在整型中数字却不是用来限制存储长度
create table t12(id int(3));  不是用来限制长度
insert into t12 values(12345);

image

create table t13(id int(5) zerofill);  而是用来控制展示的长度
insert into t13 values(123),(123456789);

image

image

总结:以后写整型无需条件数字

字段类型之枚举与集合

枚举

  • 多选一
create table t15(
    	id int,
      	name varchar(32),
       gender enum('male','female','others')
    );
 	insert into t15 values(1,'tony','猛男');
  	insert into t15 values(2,'jason','male');
 	insert into t15 values(3,'kevin','others');

image

image

集合

  • 多选多 (也可以多选一)
create table t16(
    	id int,
      	name varchar(16),
       hobbies set('basketabll','football','doublecolorball')
    );
 	insert into t16 values(1,'jason','study');
 	insert into t16 values(2,'tony','doublecolorball');
	insert into t16 values(3,'kevin','doublecolorball,football');

image

字段类型之日期类型

类型 大小 格式 用途
YEAR 1 YYYY 年份值
TIME 3 HH:MM:SS 时间值或持续时间
DATE 3 YYYY-MM-DD 日期值
DATETIME 8 YYYY-MM-DD HH:MM:SS 混合日期和时间值
TIMESTAMP 4 YYYYMMDD HHMMSS 混合日期和时间值,时间戳

datetime 年月日时分秒
date 年月日
time 时分秒
year 年

create table t17(
	id int,
  	name varchar(32),
 	register_time datetime,
 	birthday date,
 	study_time time,
 	work_time year
);

image

  • 总结:以后涉及到日期相关字段一般都是系统自动回去 无需我们可以操作

动态获取时间

insert into t17 values(1,'jason','2000-11-11 11:11:11','1998-01-21','11:11:11','2000');

image

posted @   吴仁耀  阅读(81)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
  1. 1 原来你也在这里 周笔畅
  2. 2 世间美好与你环环相扣 柏松
  3. 3 起风了 吴青峰
  4. 4 极恶都市 夏日入侵企划
世间美好与你环环相扣 - 柏松
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

作词 : 尹初七

作曲 : 柏松

编曲 : 彭圣杰

偏偏秉烛夜游

偏偏秉烛夜游

午夜星辰 似奔走之友

爱你每个结痂伤口

酿成的陈年烈酒

入喉尚算可口

入喉尚算可口

怎么泪水 还偶尔失守

邀你细看心中缺口

裂缝中留存 温柔

此时已莺飞草长 爱的人正在路上

此时已莺飞草长 爱的人正在路上

我知他风雨兼程 途经日暮不赏

穿越人海 只为与你相拥

此刻已皓月当空 爱的人手捧星光

我知他乘风破浪 去了黑暗一趟

感同身受 给你救赎热望

知道你不能 还要你感受

知道你不能 还要你感受

让星光加了一点彩虹

让樱花偷偷 吻你额头

让世间美好 与你环环相扣

此时已莺飞草长 爱的人正在路上

此时已莺飞草长 爱的人正在路上

我知他风雨兼程 途经日暮不赏

穿越人海 只为与你相拥

此刻已皓月当空 爱的人手捧星光

我知他乘风破浪 去了黑暗一趟

感同身受 给你救赎热望

此时已莺飞草长 爱的人正在路上

此时已莺飞草长 爱的人正在路上

我知他风雨兼程 途经日暮不赏

穿越人海 只为与你相拥

此刻已皓月当空 爱的人手捧星光

我知他乘风破浪 去了黑暗一趟

感同身受 给你救赎热望

知道你不能 还要你感受

知道你不能 还要你感受

让星光加了一点彩虹

当樱花开的纷纷扬扬

当世间美好 与你环环相扣

特别鸣谢:槿葵,我们的海报制作妹妹。

原唱:柏松

吉他:柏松

和声:柏松

录音:柏松

混音:张强

点击右上角即可分享
微信分享提示