今日内容概要
- 字符编码与配置文件
- 数据库存储引擎
- 创建表的完整语法
- MySQL字段类型
- MySQL字段约束
今日内容详细
字符编码与配置文件
-
- 如何查看数据库基本信息(用户、字符编码......)
- 可以用SQL语句:\s
-
- 如何查看Windows下MySQL默认的配置文件信息
- 在 my-default.ini 查看
-
- 由于5.6版本编码不同意 在使用过程中可能会造成乱码 所以我们需要统一修改为>>>>:utf8
- 拷贝上述文件 my-default.ini 粘贴在该页面 并重命名为 my.ini
需要在my.ini中添加字符编码相关配置(可以借助与百度)
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
# 注意:
如果配置文件涉及到MySQL相关的配置修改 都需要重启服务端才可以生效
存储引擎
-
什么是存储引擎
- 可以简单理解为 存储引擎就是针对相同的数据采用不同的存取策略
- 查看所有的存储引擎:show engines;
- 可以简单理解为 存储引擎就是针对相同的数据采用不同的存取策略
1.MyISAM
MySQL 5.5版本 之前的版本用的默认存储引擎
存取数据的速度快 但是功能比较少 安全性较低
2.InnoDB
MySQL 5.5版本 之后的版本用的默认存储引擎
存取数据的速度没有MyISAM快 但是支持事务、行锁、外键等诸多功能
3.Memory
基于内存的存储引擎 存取数据极快 但是断电立刻丢失
4.BlacHole
意思为黑洞 任何写进去的数据都会立刻丢失 类似于垃圾站一样
# 不同存储引擎之间底层文件的区别
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;
ps:MySQL中默认是大小写不敏感的(忽略大小写)
ps:windows cmd终端鼠标右键的意思就是粘贴
# 查看不同的存储引擎下的配置文件:
InnoDB
.frm 表结构
.ibd 表数据、表索引(加快数据查询)
MyISAM
.frm 表结构
.MYD 表数据
.MYI 表索引(加快数据查询)
Memory
.frm 表结构
BlackHole
.frm 表结构
insert into t1 values(1); # 显示
insert into t2 values(1); # 显示
insert into t3 values(1); # 显示 以为基于内存 重启就没有了
insert into t4 values(1); # 不显示 类似于黑洞 直接吃掉
创建表的完整语法
create table 表名(
字段名1 字段类型(数字) 约束条件,
字段名2 字段类型(数字) 约束条件,
字段名3 字段类型(数字) 约束条件
)engine=存储引擎;
1.字段名和字段类型是必须的(至少写一个)
2.数字跟约束条件是可选的(可有可无)
3.约束条件可以写多个 空格隔开即可
4.最后一个字段的结尾千万不能加逗号
字段类型之整形
1.tinyint 1 bytes
2.smallint 2 bytes
3.int 4 bytes
4.bigint 8 bytes
1.验证整型是否自带负号
create table t6(id tinyint);
insert into t6 values(-129),(256);
ps:发现自动填写为两个边界值 数据失真 没有实际意义
上述所有的整型类型默认都会带有负号
2.自定义移除负号
'''unsigned 约束条件之一 意思是不需要负号'''
create table t7(id tinyint unsigned);
insert into t7 values(-129),(256);
"""
插入的数据值超出了数据类型的范围 不应该让其插入并自动修改 没有意义
数据库应该直接报错(这个特性其实是有的 只是被我们改了>>>:配置文件)
方式1:命令临时修改
set session sql_mode='strict_trans_tables' 当前客户端操作界面有效
set global sql_mode='STRICT_TRANS_TABLES' 服务端不重启永久有效
方式2:配置文件永久修改
[mysqld]
sql_mode='STRICT_TRANS_TABLES'
"""
字段类型之浮点型
1. float
2. double
3. decimal
# 三者都可以存储浮点型数据 但是各自的精确度不一致
# 检验:
使用方式:
float(255,30) # 第一个数表示总共多少位 第二个数表示小数占多少位
double(255,30)
decimal(65,30)
精确度校验:
create table t8(id float(255,30));
create table t9(id double(255,30));
create table t10(id decimal(65,30));
insert into t8 values(1.11111111111111111111111111111);
insert into t9 values(1.11111111111111111111111111111);
insert into t10 values(1.11111111111111111111111111111);
float < double < decimal
"""
一般情况下float足够使用了
如果想追求非常完美的精确度 可以使用字符串来代替
"""
字段类型之字符类型
1.char 定长
char(4) # 括号里写入几 最大只能存储几个字符(我们这里用4举例)如果超过范围则直接报错
# 如果不超出范围 则用空格填充至四个字符
2.varchar 变长
varchar(4) # 括号里写入几 最大只能存储几个字符(我们这里用4举例)如果超过范围则直接报错
# 如果不超出范围 则有几位就存几位
验证两者的区别:
create table t11(id int, name char(4));
create table t12(id int, name varchar(4));
1.结果验证 超出范围两者都会报错
注意sql_mode='strict_trans_tables'
2.验证定长和变长特性
char_length() # 统计字段数据的长度
"""
默认情况下char在存储的时候针对没有满足固定位数的字符会自动填充空格
然后在读取的时候又会自动将填充的空格移除 如果想取消该机制 需要sql_mode
set global sql_mode='strict_trans_tables,pad_char_to_full_length';
上述目录是替换 不是新增 所以之前的配置也要写上
"""
3.char VS varchar
char
整存整取 速度快
浪费存储空间
varchar
节省存储空间
存取数据的速度慢于char
"""
char(4)
a son jacktom lili
varchar(4)
1bytes+a1bytes+son1bytes+jack1bytes+tom1bytes+lili
存取数据都需要操作报头(耗时)
存储人的姓名>>>:varchar
"""
两者使用频率都很高
现在默认很多时候是;varchar
数字的含义
-
-
在MySQL中字段后面的括号内写入的数字 大部分情况下用来限制字段的存储长度 但是整形除外!!
- 整形不是用来限制存储的长度 而是用来展示的长度
- create table t14(id int(5) zerofill); # 括号内写入数字为5
- 如果实际使用不为5位数 会自动用0填充
-
-
总结:
- 以后涉及到整型字段的定义 类型后面不需要加括号写数字 除非有业务需求必须固定位数
- 如快递单号等......:
- 00002314
- 00213213
- 如快递单号等......:
- 以后涉及到整型字段的定义 类型后面不需要加括号写数字 除非有业务需求必须固定位数
地段类型之枚举与集合
1.枚举: 多选一的意思
关键字: enum
例如:写入下列字段名性别时:
create table t15(
id int,
name varchar(32),
gender enum('male','female','others')
); # 只能用括号里提前定义好的数据 选任意一个
2.集合: 多选多(包括多选一)
关键字: set
例如:写入下列字段名爱好时:
create table t16(
id int,
name varchar(32),
hobbies set('read','run','music','rap')
); # 只能用括号里提前定义好的数据 选任意一个或者多个 选多个时 逗号隔开即可
字段类形之日期类形
date 年月日
datetime 年月日时分秒
time 时分秒
year 年份
create table t17(
id int,
name varchar(32),
birth date,
reg_time datetime,
study_time time,
join_time year
);
insert into t17 values(1,'jason','2022-11-11','2000-11-11 11:11:11','11:11:11','1995');
子段约束条件
"""
insert into 表名 vlaues() # 默认按照创建表的字段顺序添加
insert into 表名(字段) vlaues() # 可以自定义字段顺序
"""
1.unsigned 无负号
id int unsigned
2.zerofill 零填充
id int zerofill
3.not null 非空
name varchar(32) not null
4.default 默认值
name varchar(32) default 'jason'
5.unique 唯一值
id int unique 单列唯一
host varchar(32)
port int
unique(host,port) 联合唯一
标签:存储,15,int,create,varchar,2022.8,MySQL,table,id
From: https://www.cnblogs.com/55wym/p/16589879.html