MySQL数据库02
字符编码与配置文件
- 查看MySQL数据库基本信息和默认字符编码:\s
如果是5.X系列,显示的编码有多种:latin1;gbk
如果是8.X系列,显示的统一是:utf8mb4;utf8mb4是utf8优化版本,支持存储表情。
- 统一字符编码:
5.X默认编码有多种,可能会导致乱码的情况,所以应该统一编码。
使用my-default.ini配置文件来统一字符编码。
配置文件设置步骤:
- 拷贝一份该配置文件并修改名称为my.ini
- 清空my.ini文件内的内容
- 添加固定的配置信息即可
- 保存并【重启服务端】即可生效>>>:net stop mysql;net start mysql
固定的配置信息:
[mysqld] # mysql的服务端 character-set-server=utf8 collation-server=utf8_general_ci [client] # mysql的其它客户端 default-character-set=utf8 [mysql] # mysql的客户端 default-character-set=utf8
ps:在配置文件mysql的客户端最后面加上user='root' password='123'后,可以直接在cmd窗口输入mysql进入root用户。
存储引擎
什么是存储引擎:
存储引擎可以理解为处理数据的不同方式。引擎决定数据库存取数据的方式==>不同的特点==>不同的用户体验。
引擎是建表时规定,提供给表使用的,不是数据库。
查看所有的存储引擎:show engines;
不同的存储引擎:
- MyISAM>>>:
5.5之前版本MySQL默认的存储引擎
特点:存取数据的速度快,但是功能很少,安全性较低。
- InnoDB>>>:
5.1之后版本MySQL默认的存储引擎
特点:有诸多功能,安全性较高,但是存取速度没有MyISAM快,但是支持事务、行锁、外键等诸多功能。
- Memory>>>:
特点:基于内存的存储引擎,存取速度极快,但是断电就会即刻丢失。
- BlackHole>>>:
特点:黑洞引擎,任何写进去的数据都会立刻丢失。
自定义选择存储引擎:创表自定义存储引擎。
create table t1(id int)engine=myisam; create table t2(id int)engine=innodb; create table t3(id int)engine=blackhole; create table t4(id int)engine=memory;
ps:mysql当中默认是大小写不敏感的。
ps:windows cmd 终端鼠标右键的作用就是粘贴。
使用不同引擎创表的表文件:
创建表的完整语法
create table 表名( 字段名1 类型[(宽度) 约束条件], 字段名2 类型[(宽度) 约束条件], 字段名3 类型[(宽度) 约束条件] )engine=innodb charset=utf8; []:表示可选参数
ps:
1.字段名和字段类型是必须的
2.数字和约束条件是可选的
3.约束条件可以写多个,空格隔开即可;eg:字段名1 字段类型(数字) 约束条件1 约束条件2 约束条件3
4.【最后一行字段结尾不能加逗号!!!】
MySQL的数据类型(字段类型)
Mysql数据库数据类型包括:整型,浮点型,字符类型,时间类型,枚举类型,集合类型。
-
整型
- tinyint>>>:1bytes=8bit
- smallint>>>:2bytes=16bit
- mediumint>>>:3bytes=24bit
- int>>>:4bytes=32bit
- bigint>>>:8bytes=64bit
不同类型的整型所占的字节数不一样,决定所占空间及存放数据的大写,从上往下能够存储的数字范围越来越大!!!
整型需要考虑正负数的问题,如果需要存储负数,则需要占据一个比特位。
所有的整型都默认带有正负号。去除正负号则需要使用约束条件。
约束条件:
unsigned:无符号 eg:create table t1(id tinyint unsigned)
zerofill:位数不够用0填充 eg:create table t2(id interesting(3)zerofill)
-
浮点型
- float>>>:float(255,30) 总共255位;小数位占30位 【精度最低;最常用】
- double>>>:double(255,30) 总共255位;小数位占30位 【精度高;占位多】
- decimal>>>:decimal(65,30) 总共65位;小数位占30位 【字符串存;全精度】
这三种浮点型:从上往下其精确度越来越高!!!decimal>double>float
(M,D)>>>:M为位数;D为小数位数。
-
字符类型
- char>>>:定长
char(4)>>>:最大只能存储四个字符,如果超出则报错;如果不够则用空格补全。
char的特点:整存整取,速度快;但是会造成一定的存储空间的浪费。
- varchar>>>:不定长
varchar(4)>>>:最大只能存储四个,如果超出则报错;如果不够则有几个存几个。
varchar的特点:节省存储空间;但是存取数据的速度相较于char来说较慢。
ps:varchar的存取数据的方式:
varchar在存数据的时候会生成一个1bytes的报头,用来记录数据长度;varchar在取数据的时候先会读取1bytes的报头,然后再从中获取真实数据长度。
总结:数据长度相近的数据提倡用char来存放数据,数据需要高速存取,以空间换时间,采用char类型。对于数据长度不相近的(比如全国姓名表),一般使用varchar。
PS:补充>>>:数字大部分情况下都是用来限制字段的存储长度,但是整型除外!!!不是用来限制存储的长度,而是展示的长度。
以后涉及到整型字段的定义 ,类型后面不需要加括号写数字,除非有业务需求必须固定位数。
-
枚举与集合
- 枚举(enum)>>>:单选【多选一】
create table t14( id int, name varchar(32), gender enum('male','female','others') );
'''插入数据的时候 针对gender只能填写提前定义好的数值'''
- 集合(set)>>>:多选【多选多,包含多选一】
create table t15( id int, name varchar(32), hobby set('篮球','足球','双色球','排球','水球','肉球') );
-
时间类型
- date>>>:年月日
- datetime>>>:年月日时分秒
- time>>>:时分秒
- year>>>:年
create table t1( id int, name varchar(32), reg_time datetime, birth date, 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');
约束条件
字段类型与约束条件的关系:
约束条件是基于字段类型之上的额外限制。
eg:id int unsigned>>>:字段类型int规定了id字段只能存整数,约束条件unsigned指的是整数基础之上还必须是正数。
- unsigned:无负号
eg:create table t1(id tinyint unsigned)
- zerofill:位数不够用0填充
eg:create table t2(id interesting(3)zerofill)
- not null:非空
eg:create table t3(id int ,name varchar(32)not null)
insert into t18(id) values(2); # 报错 insert into t18(id,name) values(2,null); # 报错 insert into t18(id,name) values(2,''); # 不报错
- default:默认值
eg:create table t4(id int ,name varchar(32)default 'jason')
- unique:唯一值
单列唯一:某个字段下对应的数据不能重复,是唯一的。
create table t20( id int, name varchar(32) unique );
多列唯一:多个字段下对应的数据组合到一起的结果不能重复,是唯一的。
create table t21( id int, host varchar(32), port int, unique(host,port) );
- primary key:主键
单从约束层面上看,primary key相当于not null + unique。>>>:(非空且唯一)。
eg:create table t6 (id int primary key)
InnoDB存储引擎规定的一张表,有且必须要有一个主键,用于构建表。主键可以加快数据的查询速度(类似于书的目录)。
如果创建表创建的时候没有设置主键也没有其他的键,那么InnoDB会采用一个隐藏的字段作为表的主键(隐藏就意味着而无法使用 即无法加快数据查询);
如果没有主键,但是有非空且唯一的字段,那么会自动升级成主键(从上往下的第一个)。
create table t23( tid int, pid int not null unique, cid int not null unique );
ps:
- 表默认都有主键,且只能拥有一个主键字段
- 没有设置主键的表,数据库系统会自上而下将第一个规定为unique not null字段自动提升为primary key 主键
- 如果整个表都没有unique not null 字段且没有primary key 字段,系统会默认创建一个隐藏字段作为主键
- 通常必须手动指定表的主键,一般用id字段,且id字段一般类型为int, 因为int类型可以为auto_increment
- auto_increment:自增
专门配合主键一起使用,用户以后在添加数据的时候就不需要自己记忆主键值。
create table t25( id int primary key auto_increment, name varchar(32) );
总结:
以后在创建规范的表的时候,一般都会有一个主键字段的编写如下:
id int primary key auto_increment
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?