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.存储引擎其实就是如何实现存储数 ...
随机推荐
- CSS详细解读定位
一 前言 CSS定位是CSS布局只能够重要的一环.本篇文章带你解读定位属性,可以让你更加深入的理解定位带来的一些特性,熟练使用CSS布局. 二 正文 1.文档流布局的概念 将窗体自上而下分成一行行, ...
- 制作html5微信页面的经验总结。
先罗列一下我遇到的问题: 用户可选择图片上传,但是图片比较大(基本都是2M以上),而且还得异步上传. 由于操作上比较多的设计都是隐性的例如滑动之类,需要手势动画作提示. 块内元素滚动时不流畅,或不能滚 ...
- API的自动化测试
传统的测试工具在测试一个API的时候,必须手动填写这个API所需要接收的所有信息,比如一个查询航班动态的API,他接收两个输入字段,一个叫flight, 一个叫date,那么测试这个API的用户,需要 ...
- leetcode1753. 移除石子的最大得分
题目描述: 你正在玩一个单人游戏,面前放置着大小分别为 a.b 和 c 的 三堆 石子. 每回合你都要从两个 不同的非空堆 中取出一颗石子,并在得分上加 1 分.当存在 两个或 ...
- Spark入门之环境搭建
本教程是虚拟机搭建Spark环境和用idea编写脚本 一.前提准备 需要已经有搭建好的虚拟机环境,具体见教程大数据学习之路又之从小白到用sqoop导出数据 - 我试试这个昵称好使不 - 博客园 (cn ...
- java中内部类中还有内部类请给实例!
2.当内部类中还有一个内部类,下面给出了一个实例.[新手可忽略不影响继续学习](以下多出代码, 用蓝色标记)例2.2:class ShellMark_to_win { int shell_x = ...
- java中接口和抽象类有什么区别,举例!
2)接口和抽象类有什么区别?答:马克-to-win:抽象类里可以有实现的方法,接口里不能有,所以相对来讲各方面实现都简单(尤其动态方法调度).另外:类可以实现多个接口.反过来说,也正是抽象类一个致命伤 ...
- html是什么,html5是什么?web开发必备知识之html
如果你要写一篇文章,你可以能会这样写:"我是小明,今年6岁了,现在在上小学一年级.我喜欢吃鲍鱼." 当时如果你像让"鲍鱼"这两个字红色并且字体大一点怎么办?? ...
- 在 Mac 上开发 .NET MAUI
.NET 多平台应用程序 UI (.NET MAUI) 是一个跨平台框架,用于使用 C# 和 XAML 创建本机移动和桌面应用程序,这些应用程序可以从单个共享代码库在 Android.iOS.macO ...
- 开源.net core 验证码 - LazyCaptcha
LazyCaptcha 介绍 LazyCaptcha是仿EasyCaptcha和SimpleCaptcha,基于.Net Standard 2.1的图形验证码模块. 项目地址 效果展示 Captcha ...