MySQL基础(二)
字符编码与配置文件
存储引擎
MySQL字段类型
MySQL字段约束条件
只读编码与配置文件
如果是5 . x版本系列的的话,显示的编码有多种>> >> latinl, gbk等
如果是8 . x版本系列的话,显示的统一是utf8mb4( utf8mb4是utf8的优化版本,支持存储表情)
1. 先找到MySQL数据库的安装包,找到my- default. ini配置文件
2. 拷贝一份该配置文件也放在该路径下,并修改名称为: my. ini
3. 清空my. ini文件里的内容
4. 添加固定的配置信息:
[ mysqld]
character- set - server= utf8
collation- server= utf8_general_ci
[ client]
default- character- set = utf8
[ mysql]
default- character- set = utf8
5. 保存并且先以管理员身份先将服务端停止,然后再重新启动就可以生效了
停止: net stop mysql
启动: net start mysql
存储引擎
eg: 有一个文件,有人会放在密码箱中,有人会转成pdf存储,有人会做多个备份,也有人会制作封面美化等
show engines;
1 . MyISAM: 存取数据的速度快,但是功能很少,安全性较低,这是5.1 版本之前MySQL默认的存储引擎
2 . InnoDB: 存储速度没有MyISAM快,但是功能更多,安全性更高,5.1 版本之后MySQL默认的存储引擎
3 . BlackHole: 任何写入的数据都会立刻消失(类似于垃圾回收处理站)
4 . MeMory: 以内存作为数据存取地,速度快但是断电立刻丢失
1 . create table t1( id int ) engine= myisam;
2 . create table t2( id int ) engine= innodb;
3 . create table t3( id int ) engine= blackhole;
4 . create table t4( id int ) engine= memory;
创建表的完整语法
1. 字段名和字段类型是必须得
2. 数字和约束条件是可选的
3. 约束条件可以写多个,空格隔开就可以
字段名1 字段类型( 数字) 约束条件1 约束条件2 约束条件3
4. 最后一行字段结尾不能加都号
字段类型之整型
tinyint( 1bytes)
smallint( 2bytes)
int ( 4bytes)
bigint( 8bytes)
注意事项:1. 需要考虑正负数的问题,如果需要存储负数,则需要占据一个比特位
2. 注意手机号如果使用整型来存储,需要使用bigint才可以
create table t2( id tinyint) ;
insert into t2 values( - 129 ) , ( 256 ) ;
"""如果是在5.6版本就不会报错,会自动处理成最大范围(没有意义)"""
使用严格模式临时修改为:set global sql_mode = 'STRICT_TRANS_TABLES' ; , 然后再退出客户端,重新登录就可以了
"""如果是在5.7及以上版本,则会直接报错"""
create table t3( id tinyint unsigned) ;
字段类型之浮点型
float ( 255 , 30 ) 总共255 位 小数位占30 位
double( 255 , 30 ) 总共255 位 小数位占30 位
decimal( 65 , 30 ) 总共65 位 小数位占30 位
create table t3( id float ( 255 , 30 ) ) ;
create table t4( id double( 255 , 30 ) ) ;
create table t5( id decimal( 65 , 30 ) ) ;
insert into t3 values( 1.11111111111111111 ) ;
insert into t4 values( 1.11111111111111111 ) ;
insert into t5 values( 1.11111111111111111 ) ;
decimal> double> float
ps: 虽然三者精确度有差距,但是具体用哪个应该结合实际情况
1. 正常业务使用float 足够
2. 高精尖的话就使用decimal
字符类型之字符类型
eg: char( 4 ) >> >> >> 定长:最大只能存储四个字符,超出则报错,不够则空格填充至四个
varchar( 4 ) >> >> 变长:最大只能存储四个字符,超出则报错,不够则有几个存几个
create table t6( name char( 4 ) ) ;
create table t7( name varchar( 4 ) ) ;
insert into t6 values( 'jason' ) ;
insert into t7 values( 'jason' ) ;
"""如果是5.6版本并且没有修改严格模式,就会自动截取四个字符(不合理)"""
该方法无法直接获取到定长的真实长度,因为MySQL在存数据的时候会自动填充空格在取数据的时候又会自动移除空格,如果想不自动移除空格的话就需要进行修改
set session sql_mode = 'pad_char_to_full_length'
cchar: 优点:整存整取,速度快
缺点:会造成一定的存储空间浪费
varchar: 优点:节省存储空间
缺点:存取数据的速度没有char快(取数据不知道数据的精确长度)
现在char与varchar的使用频率差不多,但是以后varchar使用频率会越来越高
使用场景:针对统一中国人的姓名 应该采取那个类型 >> > varchar
规模较小 数据量相对固定的字典 >> > char
数字的含义
字段类型括号内的数字大部分情况下是用来限制存储的长度,但是在整型中并不是用来限制长度,而是用来控制展示长度
create table t8( id int ( 3 ) ) ;
insert into t8 values( 1111 ) ;
create table t9( id int ( 3 ) zerofill) ;
insert into t9 values( 1 ) ;
insert into t9 values( 1111 ) ;
字段类型之枚举与集合
create table t10( id int , name varchar( 32 ) , gender enum( 'male' , 'female' , 'others' ) ) ;
插入数据的时候,针对gender只能填写提前定义好的数值
create table t11( id int , name varchar( 32 ) , hobby set ( '篮球' ,'足球' ,'排球' ,'肉球' ) ) ;
字段类型之日期类型
date 年月日
datetime 年月日时分秒
time 时分秒
year 年
create table t12(
id int ,
name varchar( 32 ) ,
reg_time datetime,
birth date,
study_time time,
join_time year
) ;
insert into t12 values( 1 , 'wh' , '2000-01-01-00:00' ,'2002-01-21' , '11:11:11' , '2015' ) ;
约束条件
约束条件是基于字段类型之上的额外限制
eg: id int unsigned
字段类型int 规定了id 字段只能存整数
约束条件unsigned指的是在整数基础之上还必须是正数
unsigned
zerofill
not null
create table t13( id int , name varchar( 32 ) ) ;
插入数据的另外一种方式,可以打破字段顺序
insert into t13( name, id ) values( 'wh' , 1 )
insert into t13( id ) values( 2 ) ;
create table t14( id int , name varchar( 32 ) not null) ;
insert into t14( id ) values( 2 ) ;
insert into t14( id , name) values( 2 , null) ;
insert into t14( id , name) values( 2 , '' ) ;
default
create table t15( id int , name varchar( 32 ) default 'jason' ) ;
insert into t15( id ) values( 1 ) ;
insert into t15( id , name) values( 2 , 'kevin' ) ;
unique
1. 单列唯一:某个字段下对应的数据不能重复,是唯一的
create table t16( id int , name varchar( 32 ) unique) ;
2. 多列唯一:多个字段下对应的数据组合到一起的结果不能重复,是唯一的
create table t17( id iint, host varchar( 32 ) , port int , unique( host, port) ) ;
primary key
1. 单从约束层面上来说,相当于not null + unique( 非空且唯一)
create table t18( id int primary key) ;
2. 是InnoDB存储引擎规定的一张表有且必须要有一个主键,用于构建表主键可以加快数据的查询速度(类似于书的目录),如果创建表创建的时候没有设置主键也没有其它的键,那么InnoDB会采用一个隐藏的字段作为表的主键(隐藏就意味着无法使用,无法加括数据查询),如果没有主键但是有非空且唯一的字段,那么会自动升级成主键(从上往下的第一个)
create table t19( tid int , pid int not null unique, cid int not null unique) ;
"""创建表应该有一个序号字段(id\pid\cid),并且应该将该字段设置成主键"""
create table t19( id int primary key, name varchar( 32 ) ) ;
"""也可以有联合主键(多个字段组合,本质还是一个主键)"""
create table t20( id int , name varchar( 32 ) , pwd int , primary key( id , pwd) ) ;
auto_increment
专门配合主键一起使用,用户以后在添加数据的时候就不需要自己记忆主键值
create table t21( id int primary key auto_incrment, name varchar( 32 ) ) ;
id int primary key auto_increment
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人