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.存储引擎其实就是如何实现存储数 ...
随机推荐
- java连接oracle数据库(转)
在做导游通项目所用到 package org.javawo.test; import java.sql.Connection; import java.sql.DriverManager; /** * ...
- Android打开数据库读取数据
打开数据库读取数据 private MyDatabaseHelper dbHelper; dbHelper=new MyDatabaseHelper(this,"List.db", ...
- 基于PromiseA+规范实现一个promise
实现如果下规范的promise Aplus规范 1,promise是一个类:有三个状态 pending/等待态 fulfilled/成功态 rejected/失败态 2,promise默认执行器立即执 ...
- spring报错can't find resources
整合spring的时候报错can't find resource[../././.xml] 这两天在整个spring,发现单元测试的时候就可以正常运行,放在tomcat中就报错initial cont ...
- PowerBI添加中国地图
可以直接在添加视觉对象中添加 或者用此方法 样子: 添加形状地图地图的"位置""图例" 然后去http://datav.aliyun.com/portal/sc ...
- 深入剖析 RocketMQ 源码 - 负载均衡机制
RocketMQ作为一款流行的消息中间件在各大互联网应用广泛,本文主要分析RocketMq在消息生产和消费过程中的负载均衡机制,并创新提出消费端负载均衡策略的改写以实现固定IP消费的可能.
- Java基础语法02——流程控制
流程控制:顺序结构.分支结构(if-else.switch-case).循环结构(for.while.do-while)
- DRF JWT认证(二)
快速上手JWT签发token和认证,有这一篇就够了,DRF自带的和自定义的都帮你总结好了,拿去用~
- 2021.12.06 P1450 [HAOI2008]硬币购物(组合数学+抽屉原理+DP)
2021.12.06 P1450 [HAOI2008]硬币购物(组合数学+抽屉原理+DP) https://www.luogu.com.cn/problem/P1450 题意: 共有 44 种硬币.面 ...
- python基础练习题(暂停一秒输出,并格式化当前时间)
day5 --------------------------------------------------------------- 实例010:给人看的时间 题目 暂停一秒输出,并格式化当前时间 ...