今日内容概要
字符编码与配置文件
数据库存储引擎
创建表的完整语法
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
ps:
1. utf8mb4能够存储表情 功能更强大
2. utf8与utf-8 是有区别的 MySQL中只有utf8
修改了配置文件中关于[mysqld]的配置文件 需要重启服务端
"""
利用配置文件我们可以偷懒
将管理员登录的账号密码直接写在配置文件中 之后使用mysql登录即可
[mysql]
user='root'
password=123
"""
数据库存储引擎
存储引擎
数据库针对数据采取的多种存取方式
查看常见储存引擎的方式:
show engines;
需要了解的四个存储引擎
MyISAM
MySQL5.5 之前的默认存储引擎
存取数据的速度快 但是功能较少 安全性较低
InnoDB
MySQL5.5 之后默认的存储引擎
支持事务、行锁、外键等操作 存取速度没有MyISAM快 但是安全性更高
Memory
基于内存存取数据 仅用于临时表数据存取
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;
'''
1.innodb两个文件
.frm 表结构
.ibd 表数据(表索引)
2.myisam三个文件
.frm 表结构
.MYD 表数据
.MYI 表索引
3.memory一个文件
.frm 表结构
4.blackhole一个文件
.frm 表结构
'''
insert into t1 values(1 );
insert into t2 values(1 );
insert into t3 values(1 );
insert into t4 values(1 );
ps:MySQL默认忽略大小写
创建表的完整语法
create table 表名(
字段名 字段类型(数字) 约束条件,
字段名 字段类型(数字) 约束条件,
字段名 字段类型(数字) 约束条件
);
1. 字段名和字段类型是必须的
2. 数字和约束条件是可选的
3. 约束条件也可以写多个 空格隔开即可
4. 最后一行结尾不能加逗号
ps:编写SQL语句报错之后不要慌 仔细查看提示 会很快解决
near ')' at line 7
字段类型之整形
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 unsigend);
insert into t6 values(-129 ),(128 ),(1000 );
严格模式
当我们在使用数据库存储数据的时候 如果数据不符合规范 应该直接报错而不是擅自修改数据 这样会导致数据失真(没有实际意义)
正常都应该报错 但是我们之前不小心改了配置文件
show variables like '%mode%'
1. 临时修改
set session sql_mode='strict_trans_tables' ;
在当前客户端有效
set global sql_mode='strict_yrams_tables' ;
在当前服务端有效
2. 永久修改
直接修改配置文件
字段类型之浮点型
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
字段类型之字符类型
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 t10 values(1 , 'jason2' );
ps:char_length()获取字段存储的数据长度
默认情况下MySQL针对char的存储会自动填充空格和删除空格
下面是配置使MySQL取消针对char展示时自动删除空格的功能
set global sql_mode='strict_trans_tables,pad_char_to_full_length' ;
char VS varchar
char
优势:整存整取 速度快
劣势:浪费存储空间
varchar
优势:节省存储空间
劣势:存取数据的速度较char慢
jacktonyjasonkevintomjerry
1bytes +jack1bytes+tony1bytes+jason1bytes+kevin1bytes+tom1bytes+jerry
"""
char与varchar的使用需要结合具体应用场景
"""
数字的含义
数字在很多地方都是用来表示限制存储数据的长度
但是在整型中数字缺不是用来限制存储长度
create table t12(id int (3 )); 不是用来限制长度
insert into t12 values(12345 );
create table t13(id int (5 ) zerofill); 而是用来控制展示的长度
zerofill是用0 补齐的意思
insert into t13 values(123 ),(123456789 );
create table t14(id int );
"""以后写整型无需添加数字"""
字段类型至枚举与集合
枚举
多选一
create table t15(
id int ,
name varchar(32 ),
gender enum('male' ,'female' )
);
inster into t15 values(1 ,'tony' ,'猛男' )
inster into t15 values(2 ,'jason' ,'female' )
inster into t15 values(3 ,'tony' ,'male' )
集合
多选多(多选一)
create table t16(
id int ,
name varchar(16 ),
hobbies set ('bigball' ,'football' ,'doublecolorball' )
);
insert into t16 values(1 ,'jason' ,'study' );
insert into t16 values(2 ,'tony' ,'doublecolorball' );
insert into t16 values(3 ,'kevin' ,'doublecolorball,football' );
字段类型之日期类型
datetime 年月日时分秒
date 年月日
time 时分秒
year 年
create table t17(
id int ,
name varchar(32 ),
register_time datetime,
birthday date,
study_time time,
work_time year
);
insert into t17 values(1 ,'guts' ,'1111-11-11 11:11:11' , '2222-22-22' ,'11:11:11' ,'2222' );
ps:以后涉及到日期相关字段一般都是系统自动获取 无需我们手动操作
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)