mysql配置与存储引擎与字段类型与约束条件
字符编码与配置文件
在MySQL5.X系列中,显示的字符编码有多种,而MySQL8.X系列,字符编码统一为utf8mb4,这个编码是utf8的优化版本,可以存储表情。
查看MySQL默认字符编码命令
\s
修改配置文件统一字符编码
如果你是MySQL5.X系列的版本,建议统一字符编码,防止出现乱码的情况。
1.在MySQL根目录下新建配置文件my.ini

2.打开并写入以下内容:
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8

3.保存退出,并重启mysql服务
存储引擎
mysql中有多种存储引擎,存储引擎可以理解为处理数据的不同方式。
查看存储引擎:
show engines;

需要了解的存储引擎
MyISAM:mysql5.1之前版本默认的存储引擎,存取数据的速度快 但是功能很少,且安全性较低。
InnoDB:mysql5.1之后版本默认的存储引擎,有诸多功能,安全性较高,但存取速度没有MyISAM快。
BlackHole:任何写入的数据都会立刻消失(类似于垃圾回收处理站)。
Memory:以内存作为数据存取地,速度快但是断电会立刻丢失。
自定义选择存储引擎
在创建表时,我们可以自定义选择存储引擎。
/*选择MyISAM作为表t1的存储引擎*/
create table t1(id int)engine=myisam;
/*选择InnoDB作为表t2的存储引擎*/
create table t2(id int)engine=innodb;
/*选择BlackHole作为表t3的存储引擎*/
create table t3(id int)engine=blackhole;
/*选择Memory作为表t4的存储引擎*/
create table t4(id int)engine=memory;
补充:
使用MyISAM引擎创建表会有3个文件,使用InnoDB引擎创建表会有2个文件,使用BlackHole引擎和Memory引擎创建表会有1个文件。
创建表的完整语法
创建表完整语法
create table 表名(
字段名1 字段类型(数字) 约束条件,
字段名2 字段类型(数字) 约束条件,
...
);
说明
- 字段名和字段类型是必须的
- 数字和约束条件是可选的
- 约束条件可以写多个,用空格隔开即可
- 最后一行字段结尾不能加逗号,也就是后括号不能和逗号相接。
字段类型
整型
| 字段类型 | 大小 | 范围(有符号) | 范围(无符号) |
|---|---|---|---|
| tinyint | 1bytes | -27~27 | 0~28 |
| smallint | 2bytes | -215~215 | 0~216 |
| int | 4bytes | -231~231 | 0~232 |
| bigint | 8bytes | -263~263 | 0~264 |
补充
所有的整型都默认带有正负号,如果不想要正负号,则需要添加约束条件:unsigned。
当你在添加记录时,数据大小超出范围:
- 如果是在5.6版本不会报错,会自动处理成最大范围。
- 如果是在5.7及以上版本,则会直接报错。
如果想要让5.6版本在添加超出范围的数据时也报错,需要设置为严格模式,输入以下命令:
set global sql_mode = 'STRICT_TRANS_TABLES';
再重启客户端即可。
但这种方法只是临时修改,如果想要永久的严格模式,在my.ini配置文件中[mysqld]添加下列代码并重启mysql服务即可:
sql_mode = 'STRICT_TRANS_TABLES,ONLY_FULL_GROUP_BY'

浮点型
| 字段类型 | 大小 | 含义 |
|---|---|---|
| float(m,d) | 4bytes | 单精度,总共m位 小数位占d位 |
| double(m,d) | 8bytes | 双精度,总共m位 小数位占d位 |
| decimal(m,d) | m+2bytes | 总共m位 小数位占d位 |
精确度:decimal > double > float
举例
假设一个字段类型为float(6,3),如果添加数据为123.456789,则会被改成123.456;如果添加数据为123.4,则会被改成123.400;如果添加数据为12.345678,则会被改成12.345;
字符类型
| 字段类型 | 大小 | 含义 |
|---|---|---|
| char(n) | n bytes(n在0~255之间) | 定长字符串 |
| varchar(n) | n bytes(n在0~65535之间) | 变长字符串 |
定长与变长
char(4):定长,最大只能存储四个字符,超出则报错,不够则空格填充至四个。
varchar(4):变长,最大只能存储四个字符,超出则报错,不够则有几个存几个。
char与varchar优缺点
char:整存整取,速度快,但会造成一定的存储空间浪费。
varchar:节省存储空间,但存取数据的速度没有char快,因为在存取数据时都需要产生或获取一个1bytes的报头,用于记录数据长度。
拓展
获取字段数据长度方法:char_length()
举例:
select char_length(字段) from 表名;
该方法无法直接获取到定长的真实长度,因为MySQL在存数据的时候会自动填充空格在取数据的时候又会自动移除空格。
让MySQL在取数据的时候不自动移除空命令:
set session sql_mode = 'pad_char_to_full_length'
这个方法只能临时修改,永久修改要添加到my.ini配置文件中。
数字的含义
字段类型括号内的数字大部分情况下是用来限制存储的长度,但是在整型中并不是用来限制长度,而是用来控制展示长度。
如:
/*id字段展示长度为3,不够就用0填充*/
create table t(id int(3) zerofill);
insert into t values(1);
select * from t;

并且整型字段都有一个默认的展示长度。
枚举与集合
| 类型 | 含义 |
|---|---|
| enum(值1,值2,...) | 枚举,添加数据时只能从定义的值中选取,只能选取一个 |
| set(值1,值2,...) | 集合,添加数据时只能从定义的值中选取,可以选取多个或一个 |
举例:
/*枚举*/
create table t1(
gender enum('male','female','others')
);
insert into t1 value ('male');
insert into t1 value ('abc'); /*严格模式下会报错*/
/*集合*/
create table t2(
hobby set('read','run','music')
);
insert into t2 value ('read,run');
insert into t2 value ('read,gg'); /*严格模式下会报错*/
日期类型
| 类型 | 含义 |
|---|---|
| date | 存储年月日 |
| datetime | 存储年月日时分秒 |
| time | 存储时分秒 |
| year | 存储年份 |
约束条件
约束条件是基于字段类型之上的额外限制。
| 约束条件 | 作用 |
|---|---|
| unsigned | 去掉正负号 |
| zerofill | 字段数据长度不够用0填充 |
| not null | 让字段数据不能为空 |
| default | 设置字段默认值 |
| unique | 设置字段数据唯一 |
| primary key | 主键,不能为空且唯一 |
| auto_increment | 自动增长 |
not null
让字段数据不能为空
create table t(
id int,
name varchar(55) not null
);
insert into t values (1,2);
insert into t values (1,''); # 不会报错
insert into t(id) values(1); # 此行会报错
default
设置字段默认值
create table t(
id int,
name varchar(55) default 'tom'
);
insert into t(id) values (1);
insert into t values (1,'mike');

unique
设置字段数据唯一。
单列唯一:某个字段下对应的数据唯一
create table t(
id int unique,
name varchar(55)
);
insert into t values (1,'tom');
insert into t values (1,'mike'); # 报错,id:1已存在
多列唯一:多个字段下对应的数据组合到一起的结果唯一
create table t(
id int,
name varchar(55),
unique(id,name)
);
insert into t values (1,'tom');
insert into t values (1,'mike');
insert into t values (2,'tom');
insert into t values (1,'tom'); # 报错,id=1,name='tom'已经存在
primary key
1.单从约束层面上而言,相当于not null + unique(不能为空且唯一)
create table t(
id int primary key,
name varchar(55)
);
2.InnoDB存储引擎规定的一张表有且必须要有一个主键,用于构建表,如果创建表的时候没有设置主键也没有其他的键,那么InnoDB会采用一个隐藏的字段作为表的主键。
3.如果没有主键但是有不能为空且唯一的字段,那么会自动升级成主键(从上往下的第一个),如:
create table t(
tid int,
pid int not null unique,
cid int not null unique
);
上述例子会将pid设为主键

auto_increment
自动增长,专门配合主键一起使用。
create table t(
id int primary key auto_increment,
name varchar(55)
);
insert into t(name) value('tom');
insert into t(name) value('mike');

mysql配置与存储引擎与字段类型与约束条件的更多相关文章
- 浅谈MySql的存储引擎(表类型)
来源:http://www.cnblogs.com/lina1006/archive/2011/04/29/2032894.html 什么是MySql数据库 通常意义上,数据库也就是数据的集合,具体到 ...
- 浅谈MySql的存储引擎(表类型) (转)
什么是MySql数据库 通常意义上,数据库也就是数据的集合,具体到计算机上数据库可以是存储器上一些文件的集合或者一些内存数据的集合. 我们通常说的MySql数据库,sql server数据库等等其实是 ...
- (转)浅谈MySql的存储引擎(表类型)
原文:http://www.cnblogs.com/lina1006/archive/2011/04/29/2032894.html 什么是MySql数据库 通常意义上,数据库也就是数据的集合,具体到 ...
- MySQL之存储引擎(表类型)的选择
和大部分的数据库不同,MySQL中有一个存储引擎的概念,用户可以根据数据存储的需求来选择不同的存储引擎.本次博客就来介绍一下MySQL中的存储引擎.MySQL版本 5.7.19. 概述 MySQL的存 ...
- MySQL支持多种存储引擎
MySQL的强大之处在于它的插件式存储引擎,我们可以基于表的特点使用不同的存储引擎,从而达到最好的性能. MySQL有多种存储引擎:MyISAM.InnoDB.MERGE.MEMORY(HEAP).B ...
- MySQL的常见存储引擎介绍与参数设置调优
MySQL常用存储引擎之MyISAM 特性: 1.并发性与锁级别 2.表损坏修复 check table tablename repair table tablename 3.MyISAM表支持的索引 ...
- MySQL的常见存储引擎介绍与参数设置调优(转载)
原文地址:http://www.cnblogs.com/demon89/p/8490229.html MySQL常用存储引擎之MyISAM 特性: 1.并发性与锁级别 2.表损坏修复 check ta ...
- MySQL 体系结构及存储引擎
MySQL 原理篇 MySQL 索引机制 MySQL 体系结构及存储引擎 MySQL 语句执行过程详解 MySQL 执行计划详解 MySQL InnoDB 缓冲池 MySQL InnoDB 事务 My ...
- 转!!MySQL中的存储引擎讲解(InnoDB,MyISAM,Memory等各存储引擎对比)
MySQL中的存储引擎: 1.存储引擎的概念 2.查看MySQL所支持的存储引擎 3.MySQL中几种常用存储引擎的特点 4.存储引擎之间的相互转化 一.存储引擎: 1.存储引擎其实就是如何实现存储数 ...
随机推荐
- 基于vue-cli搭了一个多页面应用的空脚手架
vue2.* (多页面跳转) @[vue2.3.3|webpack2.6.1|less|axios] 之前看过有相关朋友share了空的多页面脚手架. 不过down了几个都是webpack1.0或者v ...
- 关于小程序websocket全套解决方案,Nginx代理wss
需求对话 提问 我在本地web能够使用ws协议去链接websocket,但是小程序不能使用. 回答 由于小程序使用的是SSL加密协议,所以需要使用wss.这里wss与ws的关系就相当于https于ht ...
- 机器学习---kmeans聚类的python实现
""" Name: study_kmeans.py Author: KX-Lau Time: 2020/11/6 16:59 Desc: 实现kmeans聚类 " ...
- Go Slice Tricks Cheat Sheet、Go 切片使用小妙招
AppendVector. Copy. Cut. Delete. Delete without preserving order. Cut (GC). Delete (GC). Delete with ...
- 都2022年了,HDFS为何还如此能战!
摘要:HDFS也许不是最好的大数据存储技术,但依然是最重要的大数据存储技术. 本文分享自华为云社区<HDFS为何在大数据领域经久不衰?>,作者: JavaEdge. 1.概述 1.1 简介 ...
- Zookeeper启动问题记录——ZooKeeper audit is enabled.
问题原因是Zookeeper的日志服务默认关闭,在zoo.cfg文件中添加 audit.enable=true 保存后重启服务就能够正常启动. 另外,这个只影响Zookeeper的日志记录,不影响其他 ...
- Java学习day18
学习了三种简单的布局结构 做了一个简单的多按键窗口 Panel无法单独存在而显示出来,需要借助一个容器,例如Frame 明天学习输入框监听和画笔
- 2021.08.03 P1197 星球大战(并查集)
2021.08.03 P1197 星球大战(并查集) [P1197 JSOI2008]星球大战 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.可以离线处理.把在线变为离 ...
- 机器学习实战:用SVD压缩图像
前文我们了解了奇异值分解(SVD)的原理,今天就实战一下,用矩阵的奇异值分解对图片进行压缩. Learn by doing 我做了一个在线的图像压缩应用,大家可以感受一下. https://huggi ...
- Android Studio 的蓝牙串口通信(附Demo源码下载)
根据相关代码制作了一个开源依赖包,将以下所有的代码进行打包,直接调用即可完成所有的操作.详细说明地址如下,如果觉得有用可以GIthub点个Star支持一下: 项目官网 Kotlin版本说明文档 Jav ...