今日内容总结
字符编码与配置文件
1. 直接在命令行输入\s 可以查看Mysql相关消息
当前用户、版本、编码、端口后(可查询的信息)
只有在mysql 5.6 版本及之前的版本编码本身就不固定(没有统一的编码) 之后的版本已经全部默认统一
在MySQL中有一个文件为my-default.ini 拷贝该文件并重命名文件my.ini
'''
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]的配置 需要重启服务端
数据库存储引擎
存储引擎
数据库针对数据采取的多种存取方式
查看常见存储引擎的方式
show engines;
需要了解的几个存储引擎
mysql5.5 之前默认的存储引擎
存储数据的速度特别快 但是功能较少 安全性较低
mysql5.5 之后默认的存储引擎
支持事务、行锁、外锁等操作 存取速度没有myisam快 但是安全性更高
基于内存存储数据 仅用于临时表数据存储
任何写入的数据都会立刻消失
了解不同存储引擎底层文件个数
create database 库名;
use 库名;
create table t1(id int ) engine=innodb;
create tacle t2(id int ) engine=myisam;
create tacle t3(id int ) engine=memory;
create table t4(id int ) engine=blackhole;
'''
1.innodb两个文件
.frm 表结构
.idb 表数据(表索引)
2.myisam三个文件
.frm 表结构
.MYD 表数据
.myi 表索引
3.memory一个文件
.frm 表结构
4.blackhole一个文件
.frm 表机构
'''
ps:mysql 默认忽略大小写
创建表的完整语法
create table 表名(
字段名 字段类型(数字) 约束条件,
字段名 字段类型(数字) 约束条件,
字段名 字段类型(数字) 约束条件
);
1. 字段名和字段类型都是必须的(而且必须有一个)
2. 数字和约束条件是可选的
3. 约束条件可以写多个 中间空格隔开即可
4. 多个字段之间要用逗号隔开
ps:编写sql语句报错的时候 仔细观察报错信息 一般都会提示大致在什么位置出错
eg: near ')' at line 7
'''出错提示:在第七行括号左右'''
字段类型之整型
tinyint 1bytes
smallint 2bytes
int 4bytes
bigint 8bytes
'''正负号占1bit'''
验证整形默认是否携带正负号
create table t5(id tinyint);
insert info t5 values(-129 ),(128 );
结果是-128 和 127 也就意味着自带正负号
我们也可以取消正负号
create table t6(id tinyint unsigned);
严格模式
create table t5(id tinyint);
insert info t5 values(-129 ),(128 );
结果是-128 和 127
当我们在使用数据库存储数据的时候 如果数据不符合规范 应该直接报错而不是修改数据 这样会导致数据的失真(没有实际意义)
'''
产生的原因>>>:正常都会报错 但是我们修改了配置字典
查看配置mode>>>:show variables like '%mode%';
'''
1. 临时修改
set session sql_mode='strict_trans_tables' ;
在当前客服端有效(退出就没了)
set global sql_mode='strict_trans_tables' ;
在当前服务端有效(重启服务端就没了)
2. 永久修改
直接修改配置字典
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
字段类型之浮点型
float (20 ,10 )
double(20 ,10 )
decimal(20 ,10 )
第一个参数表示的数据的总位数 第二个则是小数点后的小数位数
三者的核心区别就是精确不同
float < double < decimal
字段类型之字符类型
char(4 ) 最多存储四个字符 超出就报错 不够就空格填充
varchar(4 ) 最多存储四个字符 超出就报错 不够不会补充
'''
char_length()获取字段存储的数据长度
默认情况下Mysql针对char的存储会自动填充空格和删除空格
set global
sql_mode = 'strict_trans_tables,pad_char_to_full_length';
'''
char 和 varchar
char
优势:整存整取 速度快
劣势:存取浪费空间
读取方式:利用固定的长度一段一段的读取
varchar
优势:节省存储空间
劣势:存取数据的速度较char慢
读取方式:制作报头 用报头来获取数据
'''
char与varchar的使用需要结合具体应用场景
'''
数字的含义
数字在很多地方都是用来表示限制存储数据的长度
但是在整形中数字却不是用来限制长度
create table t12(id int (3 )); 不是用来限制长度的
insert into t12 values(123 ),(154531 );
写int 可以不写数字(只有整形是最特别的)
create table t14(id int );
字段类型之枚举与集合
create table t15(gender enum('hhh' ,'aaa' ,'bbb' ))
'''再添加数据的时候 限定了只能添加指定的一个数据'''
insert into t15 values('ccc' );
insert into t15 values('aaa' );
create table t16(hobbies set ('basketabll' ,'football' ))
'''再添加数据的时候 限定了只能添加指定的一个或多个数据'''
insert into t16 values('aaa' )
insert into t16 values('basketabll' )
insert into t16 values('basketabll,football' )
字段类型之日期类型
datatime 年月日时分秒
data 年月日
time 时分秒
year 年
'''使用哪一种都可以 我们可以对时间做一个切割处理'''
create table t17(
id int ,
name varchar(32 ),
time_time datetime,
study_time time,
work_time year
);
insert into t17 values(1 ,'xiaochen' ,'2000-11-11 11:11:11' ,'1998-01-01' ,'11:11:11' ,'2000' )
ps:涉及到日期相关字段一般都是系统自动获取 不需要手动操作()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)