字符编码与配置文件
\s
my- default. ini
拷贝上述文件并且重命名为my. ini
由于5.6 版本编码不统一 会造成乱码 我们需要统一修改>> > : utf8
添加字符编码相关的配置( 百度查看即可)
[ mysqld]
character- set - server= utf8
collation- server= utf8_general_ci
[ client]
default- character- set = utf8
[ mysql]
default- character- set = utf8
注意如果配置文件涉及到了mysqld相关的配置修改 那么需要重启服务端才可以生效
ps: 简易操作 在配置文件中的mysql下提前写好用户名和密码 之后直接mysql登录
存储引擎
我们可以简单的理解为存储引擎就是针对相同的数据采用的不同的存取策略
show engines;
1 . MyISAM
MySQL5. 5 及之前版本默认的存储引擎
存取数据的速度快 但是功能较少 安全性较低
2 . InnoDB
MySQL5. 5 之后版本默认的存储引擎
存取数据的速度没有MyISAM快 但是支持事务、行锁、外键等诸多功能
安全性较高
3 . Memory
基于内存的存储引擎 存取数据极快 但是断电立刻丢失
4 . BlackHole
黑洞 任何写进去的数据都会立刻丢失 类似于垃圾站
ps: MySQL中默认是大小写不敏感的( 忽略大小写)
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: 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. 验证整型是否自带负号
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'
"""
字段类型之浮点型
float
double
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足够使用了
如果想追求非常完美的精确度 可以使用字符串来代替
"""
字段类型之字符类型
char 定长
char( 4 )
最大只能存储四个字符 如果超过范围则直接报错
如果不超出范围 则用空格填充至四个字符
varchar 变长
varchar( 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
数字的含义
数字大部分情况下都是用来限制字段的存储长度 但是整型除外!!!
不是用来限制存储的长度 而是展示的长度
create table t13( id int ( 3 ) ) ;
create table t14( id int ( 3 ) zerofill) ;
总结
以后涉及到整型字段的定义 类型后面不需要加括号写数字 除非有业务需求必须固定位数
eg:
00000000013
00123123031
字段类型之枚举与集合
枚举
多选一
eg: 性别( 男 女 其他)
create table t15(
id int ,
name varchar( 32 ) ,
gender enum( 'male' , 'female' , 'others' )
) ;
集合
多选多( 包含多选一)
eg: 爱好( 唱 跳 rap)
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) 联合唯一
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)