目录
一、配置文件的使用
mysql的配置文件是:my-default.ini
修改了配置文件,一定不要忘了重启服务端才能生效
把以下内容加到配置文件中
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
二、存储引擎的使用
存储引擎就是存储数据的方式!
1 如何查看存储引擎
show engines;
一共有九种存储引擎,我们重点学习:MyISAM MEMORY InnoDB
MyISAM:不支持事务、支持的是表锁
它是MySQL5.5版本及之前的版本默认的存储引擎,相比较与InnoDB它的读取速度很快,但是它的数据安全性较低,相对于InnoDB存储引擎。
InnoDB:它支持事务、行锁、外键
它是MySQL5.6及之后的版本默认的存储引擎,它的读取速度相对慢一些,但是数据的安全性较高一些。
MEMORY:
它是基于内存存储的,意味着断电数据就会丢失,重启服务端数据就丢失。
演示:
create table t2 (id int, name varchar(64)) engine=MyISAM;
create table t3 (id int, name varchar(64)) engine=InnoDB;
create table t4 (id int, name varchar(64)) engine=MEMORY;
2 存储引擎保存文件
对于不同的存储引擎,硬盘中保存的文件个数也是不一样的。
MyISAM:3个文件
.frm 存储表结构
.MYD 存储的是表数据
.MYI 存索引(当成是字典的目录,加快查询速度)
InnoDB:2个文件
.frm 存储表结构
.ibd 存储数据和索引
MEMORY:1个文件
.frm 存储表结构
三、数据类型
1 整型
不同的数据类型区别就是所存储的范围不一样
- 分类
TINYINT SAMLLINT MEDUIMINT INT BINGINT
- 作用
- 存储年龄、ID、等级、号码等
如何选数据类型:
看你这一列存什么数据,比如:age int
整型默认情况下带不带符号?
带符号的,所有的整型默认都是带符号的 减半
eg:create table t5 (id tinyint);
insert into t5 values(256);
怎么样去掉符号
create table t6 (id tinyint unsigned);
2 浮点型
- 分类
float double decimal
- 作用
数据类型 | 字节数 | 取值范围 |
---|---|---|
float | 4 | -2^128~2 ^128,即-3.40E+38~+3.40E+38 |
double | 8 | -2^1024~ 2^1024,即-1.79E+308~1.79E+308 |
decimal | 设置位数和精度。 | 65 ~ 30 |
存储限制
float(255,30)
# 总共255位 , 小数部分占 30 位
double(255,30)
# 总共255位 , 小数部分占 30 位
decimal(65,30)
# 总共65位 , 小数部分占 30 位
三者区别是什么
- 创建表
create table t7 (id float(255, 30));
create table t8 (id double(255, 30));
create table t9 (id decimal(65, 30));
- 插入数据
insert into t7 values (1.11111111111111111111111111);
insert into t8 values (1.11111111111111111111111111);
insert into t9 values (1.11111111111111111111111111);
结论:三者的精确度不一样:decimal >>> double >>> float(精确到7位了)
注:以后尽量都选decimal,例:price decimal(8,2) # 999.99 # price:1000
3 字符串
- 分类
- char(4):定长类型,超出4位,就报错,不够4位,使用空格填充
- varchar(4):可变长类型,超出4位,报错,不够4位的,有几位存几位
- 创建表
create table t10 (id int, name char(4));
create table t11 (id int, name varchar(4));
- 插入数据
insert into t10 values(1, 'jerry');
insert into t11 values(1, 'jerry');
如果你想超出范围之后,直接报错,需要设置严格模式!!!
sql_mode(严格模式)
show variables like "%mode%";
'''设置严格模式'''
1. 命令行模式:临时修改
set global sql_mode='STRICT_TRANS_TABLES'; # 不区分大小写
2. 配置文件修改:永久修改
研究定长和不定长
create table t12 (id int, name char(4));
create table t13 (id int, name varchar(4));
insert into t12 values(1, 'ke');
insert into t13 values(1, 'ke');
验证是否补充了空格
select char_length(name) from t12;
select char_length(name) from t13;
默认情况下,没有对char类型填充空格,如果想看填充了空格,需要设置严格模式
'''设置严格模式'''
1. 命令行模式:临时修改
set global sql_mode='STRICT_TRANS_TABLES,PAD_CHAR_TO_FULL_LENGTH';
# 不区分大小写
2. 配置文件修改:永久修改
4 日期
date datetime time year
年月日 年月日时分秒 时分秒 年
创建表
create table t14 (
id int,
reg_time date,
reg1_time datetime,
reg2_time time,
reg3_time year
);
插入数据
insert into t14 values(1, '2023-10-23', '2023-12-12 12:12:12', '12:12:12', 2023);
6 枚举
1 枚举与集合
枚举(enum):多选一
枚举类型存储数据只能从候选项中选取一个才行
集合(set):多选多(包含多选一)
2 使用
枚举
- 创建表
create table t15 (id int, hobby enum('read', 'music', 'tangtou', 'xijio'));
- 插入数据
insert into t15 values(1, 'read');
集合
- 创建表
create table t16 (id int, hobby set('read', 'music', 'tangtou', 'xijio'));
- 插入数据
insert into t16 values(2, 'read,music');