今日内容概要
字符编码与配置文件
数据库存储引擎
创建表的完整语法
MySQL字段基本数据类型
今日内容详细
字符编码与配置文件
1. \s查看MySQL相关信息
当前用户 版本 编码 端口号
MySQL5. 6 版本之前的编码需要人为统一 之后的版本已经全部默认统一
如果想要永久修改编码配置 需要操作配置文件
2. 默认的配置文件是my- default. ini
拷贝上述文件并重命名为my. ini
直接拷贝字符编码相关的配置即可
[ mysqld]
character- set - server= utf8mb4
collation- server= utf8mb4_general_ci
[ client]
default- character- set = utf8mb4
[ mysql]
default- character- set = utf8mb4
修改了配置文件中关于[ mysqld] 的配置 需要重启服务端
'''
utf8mb4能够存储表情 功能强大
utf8与utf-8是有区别的 MySQL中只有utf8
'''
'''
利用配置文件我们可以偷懒
将管理员登陆的账号密码直接写在配置文件中 之后直接是有mysql登陆 无需再输入账号密码
[mysql]
user='root'
password=123
'''
数据库存储引擎
存储引擎
数据库针对数据采取的多种存取方式
查看常见存储引擎的方式
show engines;
需要了解的四个存储引擎
1 . MyISAM
MySQL5. 6 之前默认的存储引擎
存取数据的速度快 但是功能较少 且安全性较低
2 . InnoDB
MySQL5. 6 之后默认的存储引擎
支持事务 行锁 外键等操作 存取速度没有MyISAM快 但是安全性更高
3 . Memory
基于内存存取数据 仅用于临时表数据存取
4 . BlackHole
任何写入进去的数据都会立刻丢失
了解不同存储引擎底层文件的个数
create database db1;
use db1;
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;
'''
1.innodb两个文件
.frm 表结构
.ibd 表数据(表索引)
2.myisam三个文件
.frm 表结构
.MYD 表数据
.MYI 表索引
3.memory一个文件
.frm 表结构
4.blackhole一个文件
.frm 表结构
'''
向表中添加数据
insert into t1 values( 1 ) ;
insert into t2 values( 2 ) ;
insert into t3 values( 3 ) ;
insert into t4 values( 4 ) ;
查表中数据
select * from t1;
select * from t2;
select * from t3;
select * from t4;
MySQL中默认忽略大小写
创建表的完整语法
create table 表名(
字段名 字段类型( 数字) 约束条件,
字段名 字段类型( 数字) 约束条件,
字段名 字段类型( 数字) 约束条件
) ;
1. 字段名和字段类型是必须要的
2. 数字和约束条件是可选的
3. 约束条件也可以写多个 空格隔开即可
4. 最后一行结尾不能加逗号
字段类型
整型
MySQL数据类型
含义(有符号)
tinyint
1个字节 范围(-128~127)
smallint
2个字节 范围(-32768~32767)
int
4个字节 范围(-2147483648~2147483647)
bigint
8个字节 范围(+-9.22*10的18次方)
tinyint 1bytes 正负号( 占1bit)
smallint 2bytes 正负号( 占1bit)
int 4bytes 正负号( 占1bit)
bigint 8bytes 正负号( 占1bit)
验证整型默认是否携带正负号
create table t5( id tinyint) ;
insert into t5 values( - 129 ) , ( 128 ) ;
结果是- 128 和127 也就意味着默认自带正负号
我们也可以取消正负号
create table t6( id tinyint unsigned) ;
insert into t6 values( - 129 ) , ( 128 ) , ( 1000 ) ;
严格模式
当我们在使用数据库存储数据的时候 如果数据不符合规范 应该直接报错而不是擅自修改数据 这样会导致数据的失真( 没有实际意义)
正常都应该直接报错 但是之前修改了配置文件
查找有mode的数据
show variables like '%mode%' ;
1. 临时修改
set session sql_mode= 'strict_trans_tables' ;
在当前客户端有效
set global sql_mode= 'strict_trans_tables' ;
在当前服务端有效
2. 永久修改
直接修改配置文件
在mysqld下添加sql_mode= NO_ENGINE_SUBSTITUTION, STRICT_TRANS_TABLES
浮点型
MySQL数据类型
含义
float(m,d)
单精度浮点型 8位精度(4字节) m总个数,d小数位
double(m,d)
双精度浮点型 16位精度(8字节) m总个数,d小数位
decimal(m,d)
存放的是精确值 参数m<65 是总个数,d<30且 d<m 是小数位
float ( 20 , 10 )
总共存储20 位数 小数点后面占10 位
double( 20 , 10 )
总共存储20 位数 小数点后面占10 位
decimal( 20 , 10 )
总共存储20 位数 小数点后面占10 位
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 ) ;
三者的核心区别在于精确度不同
float < double < decimal
字符类型
MySQL数据类型
含义
char(n)
固定长度,最多255个字符
varchar(n)
可变长度,最多65535个字符
char
定长
char( 4 ) 最多存储四个字符 超出就报错 不够四个空格填充至四个
varchar
变长
vacchar( 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' ) ;
ps: char_length( ) 获取字段存储的数据长度
默认情况下MySQL针对char的存储会自动填充空格和删除空格
set global sql_mode= 'strict_trans_tables,pad_char_to_full_length' ;
两者优劣
char
优势: 整存整取 速度快
劣势: 浪费存储空间
carchar
优势: 节省存储空间
劣势: 存取数据的速度较char慢
char查找效率会很高,varchar查找效率会更低。
因为char的长度固定,故char的存取速度还是要比varchar快得多,存储与查找会更加方便;但是char也为此付出了空间的代价,因为其长度固定,所以会占据多余的空间,可谓是以空间换取时间效率。varchar则刚好相反,是以时间换空间,存储与查找相比于char效率更低一些。
'''
char与varchar的使用需要结合具体的应用场景
'''
数字的含义
数字在很多地方都是用来表示限制存储数据的长度
但是在整型中数字却不是用来限制存储长度
create table t12( id int ( 3 ) ) ; 不是用来限制长度
insert into t12 values( 12345 ) ;
create table t13( id int ( 5 ) zerofill) ; 而是用来控制展示的长度
insert into t13 values( 123 ) , ( 123456789 ) ;
create table t14( id int ) ;
"""以后写整型无需添加数字"""
枚举与集合
枚举
多选一
create table t15(
id int , name varchar( 32 ) ,
gender enum( 'male' , 'fomale' , 'others' )
) ;
insert into t15 values( 1 , 'jason' , '猛男' ) ;
insert into t15 values( 2 , 'tony' , 'male' ) ;
集合
多选多( 多选一)
create table t16(
id int ,
name varchar( 16 ) ,
hobbies set ( 'basketball' , 'football' , 'doublecolorball' )
) ;
insert into t16 values( 1 , 'jason' , 'study' ) ;
insert into t16 values( 2 , 'tony' , 'basketball,football' ) ;
insert into t16 values( 3 , 'kevin' , 'basketball, read' ) ;
日期类型
datetime 年月日时分秒
date 年月日
time 时分秒
year 年
create table t17(
id int ,
name varchar( 32 ) ,
register_time datatime,
birthday date,
study_time time,
work_time year
) ;
insert into t17 values( 1 , 'jason' , '2000-11-11 11:11:11' , '1998-01-21' , '11:11:11' , '2000' ) ;
之后涉及到日期相关字段一般都是系统自动获取 无需我们操作
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)