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.存储引擎其实就是如何实现存储数 ...
随机推荐
- 又快又好!巧用ChartJS打造你的实用折线图
又快又好!巧用ChartJS打造你的实用折线图 最终效果 本示例利用官方示例改造而成,生成带图示的折线图,标出各折线的名称,可以筛选想要显示的折线. 要实现最终效果,我们要分三步走: 生成折线图: 生 ...
- java中hashCode和equals什么关系,hashCode到底怎么用的
Object类的hashCode的用法:(新手一定要忽略本节,否则会很惨) 马 克-to-win:hashCode方法主要是Sun编写的一些数据结构比如Hashtable的hash算法中用到.因为ha ...
- 创建新的servlet一定要记得修改web..xml文件!!!
创建新的servlet一定要记得修改web..xml文件!!!
- animate.css使用
解决 使用jquery单纯添加类不能出现动画 使用jQuery向元素中添加类制作动画的时候,需要使用setTimeout实现,因为动画需要从一个状态到另外一个状态!时间设置为0
- python基本数据类型介绍
数据类型 首先知道什么是数据类型 针对不同的数据类型采用不同的处理方法 --目录-- 一.数据类型之整型 二.数据类型之浮点型 三.数据类型之字串符 四.数据之列表 一.数据类型之整型 1.其实呢就是 ...
- springboot读取配置文件赋值给静态变量
1.实现InitializingBean接口,重写afterPropertiesSet方法,将@Value赋值给成员变量的属性赋值给静态变量,示例如下: /** * @Classname FileUt ...
- springboot jar包方式部署
打好jar包后上传到 linux 执行命令 java -jar /root/vhr-web-0.0.1-SNAPSHOT.jar > /root/log.txt & 1.java -ja ...
- JavaScript学习总结3-函数
JS如果没能完return,等函数完全执行完毕也会返回NaN(undefined) 因为JS高度自由性,不像C.C++.Java等,函数传参有较严格的限制,JS可以完函数内传任意数量个参数,也可以不传 ...
- Codeforces Round #707 (Div. 2)A.英语漏洞 + C.Going Home C题收获不小
A题英语漏洞 A题传送门: https://codeforces.com/contest/1501/problem/A 其实题目说的很明白, 只是我傻傻的会错了意, 话不多说, 开整. 前两行是说, ...
- go的调度
操作系统根据资源访问权限的不同,体系架构可以分为用户空间和内核空间:内核空间主要操作访问CPU资源,IO资源,内存资源等硬件资源,为应用程序提供最基本的基础资源:用户空间是上层应用程序的固定活动空间, ...