MySQL字段类型最全解析

MySQL字段类型最全解析

前⾔:

要了解⼀个数据库,必须了解其⽀持的数据类型。MySQL ⽀持⼤量的字段类型,其中常⽤的也有很多。前⾯⽂章我们也讲

过 int 及 varchar 类型的⽤法,但⼀直没有全⾯讲过字段类型,本篇⽂章我们将把字段类型⼀⽹打尽,讲⼀讲常⽤字段类型

的⽤法。

常⽤的字段类型⼤致可以分为数值类型、字符串类型、⽇期时间类型三⼤类,下⾯我们按照分类依次来介绍下。

1.数值类型

数值类型⼤类⼜可以分为整型、浮点型、定点型三⼩类。整型主要⽤于存储整数值,主要有以下⼏个字段类型:

整型经常被⽤到,⽐如 tinyint、int、bigint 。默认是有符号的,若只需存储⽆符号值,可增加 unsigned 属性。

int(M)中的 M 代表最⼤显⽰宽度,并不是说 int(1) 就不能存储数值10了,不管设定了显⽰宽度是多少个字符,int 都是占⽤4

个字节,即int(5)和int(10)可存储的范围⼀样。

存储字节越⼩,占⽤空间越⼩。所以本着最⼩化存储的原则,我们要尽量选择合适的整型,例如:存储⼀些状态值或⼈的年

龄可以⽤ tinyint ;主键列,⽆负数,建议使⽤ int unsigned 或者 bigint unsigned,预估字段数字取值会超过 42 亿,使⽤bigint 类型。

浮点型主要有 float,double 两个,浮点型在数据库中存放的是近似值,例如float(6,3),如果插⼊⼀个数123.45678,实际数

据库⾥存的是123.457,但总个数还以实际为准,即6位,整数部分最⼤是3位。 float 和 double 平时⽤的不太多。

定点型字段类型有 DECIMAL ⼀个,主要⽤于存储有精度要求的⼩数。

DECIMAL 从 MySQL 5.1 引⼊,列的声明语法是 DECIMAL(M,D) 。 NUMERIC 与 DECIMAL 同义,如果字段类型定义为

NUMERIC ,则将⾃动转成 DECIMAL 。

对于声明语法 DECIMAL(M,D) ,⾃变量的值范围如下:

M是最⼤位数(精度),范围是1到65。可不指定,默认值是10。

D是⼩数点右边的位数(⼩数位)。范围是0到30,并且不能⼤于M,可不指定,默认值是0。

例如字段 salary DECIMAL(5,2),能够存储具有五位数字和两位⼩数的任何值,因此可以存储在salary列中的值的范围是从-999.99到999.99。

2.字符串类型字符串类型也经常⽤到,常⽤的⼏个类型如下表:

其中 char 和 varchar 是最常⽤到的。char 类型是定长的,MySQL 总是根据定义的字符串长度分配⾜够的空间。当保存 char

值时,在它们的右边填充空格以达到指定的长度,当检索到 char 值时,尾部的空格被删除掉。varchar 类型⽤于存储可变长

字符串,存储时,如果字符没有达到定义的位数,也不会在后⾯补空格。

char(M) 与 varchar(M) 中的的 M 表⽰保存的最⼤字符数,单个字母、数字、中⽂等都是占⽤⼀个字符。char 适合存储很短

的字符串,或者所有值都接近同⼀个长度。例如,char ⾮常适合存储密码的 MD5 值,因为这是⼀个定长的值。对于字符串

很长或者所要存储的字符串长短不⼀的情况,varchar 更加合适。

我们在定义字段最⼤长度时应该按需分配,提前做好预估,能使⽤ varchar 类型就尽量不使⽤ text 类型。除⾮有存储长⽂本

数据需求时,再考虑使⽤ text 类型。

BLOB 类型主要⽤于存储⼆进制⼤对象,例如可以存储图⽚,⾳视频等⽂件。⽇常很少⽤到,有存储⼆进制字符串时可以考

虑使⽤。3.⽇期时间类型

MySQL⽀持的⽇期和时间类型有 YEAR 、TIME 、DATE 、DATETIME 、TIMESTAMP,⼏种类型⽐较如下:

涉及到⽇期和时间字段类型选择时,根据存储需求选择合适的类型即可。

关于 DATETIME 与 TIMESTAMP 两种类型如何选⽤,可以按照存储需求来,⽐如要求存储范围更⼴,则推荐使⽤DATETIME ,如果只是存储当前时间戳,则可以使⽤ TIMESTAMP 类型。不过值得注意的是,TIMESTAMP 字段数据会随

着系统时区⽽改变但 DATETIME 字段数据不会。总体来说 DATETIME 使⽤范围更⼴。

总结:

本篇⽂章主要介绍了 MySQL 中常⽤的字段类型,平时⽤到的字段类型基本都在这⾥了,以⼀张思维导图总结如下:

合集下载

MySQL字段类型最全解析

MySQL字段类型最全解析

MySQL字段类型最全解析

前⾔:

要了解⼀个数据库,必须了解其⽀持的数据类型。MySQL ⽀持⼤量的字段类型,其中常⽤的也有很多。前⾯⽂章我们也讲

过 int 及 varchar 类型的⽤法,但⼀直没有全⾯讲过字段类型,本篇⽂章我们将把字段类型⼀⽹打尽,讲⼀讲常⽤字段类型

的⽤法。

常⽤的字段类型⼤致可以分为数值类型、字符串类型、⽇期时间类型三⼤类,下⾯我们按照分类依次来介绍下。

1.数值类型

数值类型⼤类⼜可以分为整型、浮点型、定点型三⼩类。整型主要⽤于存储整数值,主要有以下⼏个字段类型:

整型经常被⽤到,⽐如 tinyint、int、bigint 。默认是有符号的,若只需存储⽆符号值,可增加 unsigned 属性。

int(M)中的 M 代表最⼤显⽰宽度,并不是说 int(1) 就不能存储数值10了,不管设定了显⽰宽度是多少个字符,int 都是占⽤4

个字节,即int(5)和int(10)可存储的范围⼀样。

存储字节越⼩,占⽤空间越⼩。所以本着最⼩化存储的原则,我们要尽量选择合适的整型,例如:存储⼀些状态值或⼈的年

龄可以⽤ tinyint ;主键列,⽆负数,建议使⽤ int unsigned 或者 bigint unsigned,预估字段数字取值会超过 42 亿,使⽤bigint 类型。

浮点型主要有 float,double 两个,浮点型在数据库中存放的是近似值,例如float(6,3),如果插⼊⼀个数123.45678,实际数

据库⾥存的是123.457,但总个数还以实际为准,即6位,整数部分最⼤是3位。 float 和 double 平时⽤的不太多。

定点型字段类型有 DECIMAL ⼀个,主要⽤于存储有精度要求的⼩数。

DECIMAL 从 MySQL 5.1 引⼊,列的声明语法是 DECIMAL(M,D) 。 NUMERIC 与 DECIMAL 同义,如果字段类型定义为

NUMERIC ,则将⾃动转成 DECIMAL 。

MySQL关于sql_mode解析与设置讲解

MySQL关于sql_mode解析与设置讲解

MySQL关于sql_mode解析与设置讲解

昨晚在往MySQL数据库中插⼊⼀组数据时,出错了!数据库⽆情了给我报了个错误:ERROR 1365(22012):Division by 0;意思是说:你不可以往数据库中插⼊⼀个 除数为0的运算的结果。于是乎去⾕歌了⼀番,总算是明⽩了其中的原因:是因为MySQL的sql_mode 模式限制着⼀些所谓的‘不合法'的操作。

解析

这个sql_mode,简⽽⾔之就是:它定义了你MySQL应该⽀持的sql语法,对数据的校验等等。。

如何查看当前数据库使⽤的sql_mode:

mysql> select @@sql_mode;如下是我的数据库当前的模式:

MySQL服务器能够⼯作在不同的SQL模式下,并能针对不同的客户端以不同的⽅式应⽤这些模式。这样,应⽤程序就能对服务器操作进⾏量⾝定制以满⾜⾃⼰的需求。这类模式定义了MySQL应⽀持的SQL语法,以及应该在数据上执⾏何种确认检查。这样,就能在众多不同的环境下,与其他数据库服务器⼀起更容易地使⽤MySQL。从MySQL 4.1 开始,也能在启动之后,使⽤SET[SESSION|GLOBAL]sql_mode='mode1,mode2…'语句,通过设置sql_mode变量更改模式。

sql_mode常⽤值

ONLY_FULL_GROUP_BY对于GROUP BY聚合操作,如果在SELECT中的列、HAVING或者ORDER BY⼦句的列,没有在GROUP BY中出现,那么这个SQL是不合法的。

对于不合法的SQL语句,执⾏时会报如下错误

ERROR 1055 (42000): Expression #7 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'postscan.verifyDelayLog.auditor'which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_byNO_AUTO_VALUE_ON_ZERO该值影响⾃增长列的插⼊。默认设置下,插⼊0或NULL代表⽣成下⼀个⾃增长值。如果⽤户希望插⼊的值为0,该列⼜是⾃增长的,那么这个选项就有⽤了。

MySQL性能优化之参数配置

MySQL性能优化之参数配置

MySQL性能优化之参数配置

1、⽬的:

通过根据服务器⽬前状况,修改Mysql的系统参数,达到合理利⽤服务器现有资源,最⼤合理的提⾼MySQL性能。

2、服务器参数:

32G内存、4个CPU,每个CPU 8核。

3、MySQL⽬前安装状况。

MySQL⽬前安装,⽤的是MySQL默认的最⼤⽀持配置。拷贝的是f.编码已修改为UTF-8.具体修改及安装MySQL,可以参考

<>帮助⽂档。

4、修改MySQL配置

打开MySQL配置⽂件f

vi /etc/f

4.1 MySQL⾮缓存参数变量介绍及修改

4.1.1修改back_log参数值:由默认的50修改为500.(每个连接256kb,占⽤:125M)

back_log=500

back_log值指出在MySQL暂时停⽌回答新请求之前的短时间内多少个请求可以

被存在堆栈中。也就是说,如果MySql的连接数据达到max_connections时,新来

的请求将会被存在堆栈中,以等待某⼀连接释放资源,该堆栈的数量即back_log,如果等待连接的数量超过back_log,将不被授予连接资源。将会报:

unauthenticated user | xxx.xxx.xxx.xxx | NULL | Connect | NULL | login | NULL 的

待连接进程时.

back_log值不能超过TCP/IP连接的侦听队列的⼤⼩。若超过则⽆效,查看当前系

统的TCP/IP连接的侦听队列的⼤⼩命令:cat /proc/sys/net/ipv4/tcp_max_syn_backlog⽬前系统为1024。对于Linux系统推

荐设置为⼩于512的整数。

修改系统内核参数,)/html/64/n-810764.html

查看mysql 当前系统默认back_log值,命令:

show variables like 'back_log'; 查看当前数量

数据库字段名称命名规则

数据库字段名称命名规则

数据库字段名称命名规则

数据库字段名称命名规则是数据库设计规范中的重要内容之一。一个好的命名规则可以帮助开发人员更好地理解数据库表中的字段,提高代码的可读性和可维护性。下面是常见的数据库字段名称命名规则:

1. 命名规则:通常采用全小写字母和下划线的方式进行命名,字段名长度最多为 32 个字符,禁止超过 32 个字符。

2. 禁使 MySQL 保留字:在命名规则中,禁使 MySQL 保留字,例如_、auto_、master_等。

3. 业务或产品线相关:字段名应该与业务或产品线相关,以便更好地理解字段的含义和用途。

4. 采用英语命名:字段名应该采用英语命名,以便更好地理解其含义。如果英语翻译可以参考常术语来选择相应的英语单词。

5. 字段名必须是名词的复数形式:字段名必须是名词的复数形式,以便更好地描述字段的含义和用途。

6. 多个名词采下划线分割单词:如果字段名包含多个名词,应该采用下划线将它们分割开。

7. 命名与实际情况相符:在命名规则中,应该尽可能命名与实际情况相符,例如将用户 ID 字段命名为 user_id。

8. 避免使用单个字符或特殊字符:在命名规则中,应该避免使用单个字符或特殊字符,以免导致字段名混淆或无法正确解析。

9. 命名一致:在多个表中使用相同的字段时,应该遵循一致的命名规则,以便更好地理解数据之间的关系。

不同的数据库管理系统 (DBMS) 可能有不同的命名规则,因此在实际开发中应该根据实际情况进行命名。

mysql 8.0 ocp 题库解析

mysql 8.0 ocp 题库解析

mysql 8.0 ocp 题库解析

一、概述

MySQL 8.0 OCP 是 Oracle Certified Professional, Oracle Database 8i

Certified Specialist,是 Oracle 数据库管理员(DBA)需要掌握的一项重要技能。为了更好地理解和掌握 MySQL 8.0 OCP,本文将针对 MySQL 8.0 的新特性、题库结构、解题技巧等方面进行解析。

二、MySQL 8.0 新特性

MySQL 8.0 在性能、安全性、可扩展性等方面进行了大量改进。新特性包括:支持更多存储引擎(如 InnoDB、NDB等)、引入数据分片、增强分布式事务处理能力、支持更多的索引类型(如全文索引、地理坐标索引等)以及更多的优化器策略等。

三、题库结构解析

MySQL 8.0 OCP 题库主要由选择题和简答题组成,其中选择题主要考察基础知识和 MySQL 8.0 新特性的了解,简答题则更侧重于实际操作和问题解决能力的考察。因此,备考 MySQL 8.0 OCP 需要全面掌握基础知识,同时注重实践操作和问题解决能力的培养。

四、解题技巧

1. 熟悉 MySQL 8.0 新特性:在备考过程中,要深入了解 MySQL 8.0 的新特性,包括新增的存储引擎、索引类型、优化器策略等,以便在解题时能够快速找到答案。

2. 注重实践操作:在备考过程中,要多进行实践操作,通过实际操作来加深对 MySQL 8.0 的理解,提高解题能力。

3. 善于总结:在解题过程中,要善于总结经验和技巧,形成自己的解题思路和方法,提高解题效率。

4. 充分利用资源:备考过程中,要充分利用各种资源,包括书籍、网络资料、在线课程等,以便更好地理解和掌握 MySQL 8.0。

五、总结 MySQL 8.0 OCP 是 Oracle 数据库管理员需要掌握的一项重要技能。为了更好地理解和掌握 MySQL 8.0 OCP,需要全面了解 MySQL 8.0 的新特性,注重实践操作和问题解决能力的培养,并善于总结经验和技巧。在备考过程中,要充分利用各种资源,以便更好地理解和掌握 MySQL 8.0。

sql语句中like的用法详细解析

sql语句中like的用法详细解析

sql语句中like的⽤法详细解析

在SQL结构化查询语⾔中,LIKE语句有着⾄关重要的作⽤。LIKE语句的语法格式是:select * from 表名 where 字段名 like 对应值(⼦串),它主要是针对字符型字段的,它的作⽤是在

⼀个字符型字段列中检索包含对应⼦串的。

假设有⼀个数据库中有个表table1,在table1中有两个字段,分别是name和sex⼆者全是字符型数据。现在我们要在姓名字段

中查询以“张”字开头的记录,语句如下:select * from table1 where name like "张*"

如果要查询以“张”结尾的记录,则语句如下:select * from table1 where name like "*张"

这⾥⽤到了通配符“*”,可以说,like语句是和通配符分不开的。下⾯我们就详细介绍⼀下通配符。

模式

举例 及 代表值

说明

*

c*c代表cc,cBc,cbc,cabdfec等

它同于DOS命令中的通配符,代表多个字符。

%

%c%代表agdcagd等

这种⽅法在很多程序中要⽤到,主要是查询包含⼦串的。

[*]

a[*]a代表a*a

代替*

b?b代表brb,bFb等

同于DOS命令中的?通配符,代表单个字符

#

k#k代表k1k,k8k,k0k

⼤致同上,不同的是代只能代表单个数字。

- [a-z]代表a到z的26个字母中任意⼀个 指定⼀个范围中任意⼀个

续上

排除 [!字符] [!a-z]代表9,0,%,*等 它只代表单个字符

数字排除 [!数字] [!0-9]代表A,b,C,d等 同上

组合类型 字符[范围类型]字符 cc[!a-d]#代表ccF#等 可以和其它⼏种⽅式组合使⽤

假设表table1中有以下记录:

name sex 张⼩明 男

李明天 男

李a天 ⼥

王5五 男

王清五 男

下⾯我们来举例说明⼀下:

例1,查询name字段中包含有“明”字的。

select * from table1 where name like '%明%'

阿里巴巴MYSQL开发规范

阿⾥巴巴MYSQL开发规范

转载请注明出处:

(⼀) 建表规约

1. 【强制】表达是与否概念的字段,必须使⽤ is_xxx 的⽅式命名,数据类型是 unsigned tinyint(1 表⽰是,0 表⽰否)。

说明:任何字段如果为⾮负数,必须是 unsigned。

注意:POJO 类中的任何布尔类型的变量,都不要加 is 前缀,所以,需要在设置从 is_xxx 到

Xxx 的映射关系。数据库表⽰是与否的值,使⽤ tinyint 类型,坚持 is_xxx 的命名⽅式是为了明确其取值含义与取值范围。

正例:表达逻辑删除的字段名 is_deleted,1 表⽰删除,0 表⽰未删除。

2. 【强制】表名、字段名必须使⽤⼩写字母或数字,禁⽌出现数字开头,禁⽌两个下划线中间只出现数字。数据库字段名的修改代价很

⼤,因为⽆法进⾏预发布,所以字段名称需要慎重考虑。

说明:MySQL 在 Windows 下不区分⼤⼩写,但在 Linux 下默认是区分⼤⼩写。因此,数据库名、表名、

字段名,都不允许出现任何⼤写字母,避免节外⽣枝。

正例:aliyun_admin,rdc_config,level3_name

反例:AliyunAdmin,rdcConfig,level_3_name

3. 【强制】表名不使⽤复数名词。

说明:表名应该仅仅表⽰表⾥⾯的实体内容,不应该表⽰实体数量,对应于 DO 类名也是单数形式,符合表达习惯。

4. 【强制】禁⽤保留字,如 desc、range、match、delayed 等,请参考 MySQL 官⽅保留字。

5. 【强制】主键索引名为 pk_字段名;唯⼀索引名为 uk_字段名;普通索引名则为 idx_字段名。

说明:pk_ 即 primary key;uk_ 即 unique key;idx_ 即 index 的简称。

6. 【强制】⼩数类型为 decimal,禁⽌使⽤ float 和 double。

MySQL配置文件详解

MySQL配置⽂件详解

# 客户端设置,即客户端默认的连接参数

[client]

# 默认连接端⼝

port = 3306

# ⽤于本地连接的socket套接字

socket = /usr/local/mysql/data/mysql.sock

# 字符集编码

default-character-set = utf8mb4

# 服务端基本设置

[mysqld]

# MySQL监听端⼝

port = 3306

# 为MySQL客户端程序和服务器之间的本地通讯指定⼀个套接字⽂件

socket = /usr/local/mysql/data/mysql.sock

# pid⽂件所在⽬录

pid-file = /usr/local/mysql/data/mysql.pid

# 使⽤该⽬录作为根⽬录(安装⽬录)

basedir = /usr/local/mysql

# 数据⽂件存放的⽬录

datadir = /usr/local/mysql/database

# MySQL存放临时⽂件的⽬录

tmpdir = /usr/local/mysql/data/tmp

# 服务端默认编码(数据库级别)

character_set_server = utf8mb4

# 服务端默认的⽐对规则,排序规则

collation_server = utf8mb4_bin

# MySQL启动⽤户。如果是root⽤户就配置root,mysql⽤户就配置mysql

user = root

# 错误⽇志配置⽂件(configure file)

log-error=/usr/local/mysql/data/error.log

secure-file-priv = null

# 开启了binlog后,必须设置这个值为1.主要是考虑binlog安全

# 此变量适⽤于启⽤⼆进制⽇志记录的情况。它控制是否可以信任存储函数创建者,⽽不是创建将导致

# 要写⼊⼆进制⽇志的不安全事件。如果设置为0(默认值),则不允许⽤户创建或更改存储函数,除⾮⽤户具有

MySQL查询性能优化

MySQL查询性能优化

⼀、MySQL查询执⾏基础1. MySQL查询执⾏流程原理

<1> 客户端发送⼀条查询给服务器。

<2> 服务器先检查查询缓存,如果命中了缓存,则⽴刻返回存储在缓存中的结果。否则进⼊下⼀阶段。

<3> 服务器进⾏SQL解析、预处理,再由优化器⽣成对应的执⾏计划。

<4> MySQL根据优化器⽣成的执⾏计划,调⽤存储引擎的API来执⾏查询。

<5> MySQL将结果返回给客户端,同时保存⼀份到查询缓存中。

2. MySQL客户端/服务器通信协议

<1> 协议类型:半双⼯。

<2> Mysql通常需要等所有的数据都已经发送给客户端才能释放这条查询所占⽤的资源。

<3> 在PHP函数中,mysql_query()会将整个查询的结果集缓存到内存中,⽽mysql_unbuffered_query()则不会缓存结果,直接从mysql服务器获取结果。当结果集很⼤时,使⽤后者能减少内存的消耗,但服务器的资源会被这个查询占⽤⽐较长的时间。3. 查询状态

可以使⽤命令来查询mysql当前查询的状态:show full processlist。返回结果中的“State”键对应的值就表⽰查询的状态,主要有以下⼏种:<1> Sleep:线程正在等待客户端发送新的请求。

<2> Query:线程正在执⾏查询或正在将结果发送给客户端。

<3> Locked:在MySQL服务器层,该线程正在等待表锁。(在没⾏锁的引擎出现)

<4> Analyzing and statistics:线程正在收集存储引擎的统计信息,并⽣成查询的执⾏计划。

<5> Copying to tmp [on disk]:线程正在执⾏查询,并且将其结果集都复制到⼀个临时表中,这种状态要么是在做group by操作,要么是⽂件排序操作,或者是union操作。<6> Sorting result:线程正在对结果集进⾏排序。

<7> Sending data:表⽰多种请况,线程可能在多个状态之间传送数据,或者在⽣成结果集,或者在向客户端返回数据。

mysql_difference函数算法_概述及解释说明

mysql difference函数算法 概述及解释说明

1. 引言

1.1 概述:

本篇文章旨在介绍和解释mysql中的Difference函数算法。Difference函数是一种常用的数据库函数,用于比较两个文本或字符型字段之间的差异性,并返回差异性的度量值。通过对Difference函数的概述及解释,读者将能够深入了解该函数的背景、作用和基本原理,从而更好地应用于实际项目中。

1.2 文章结构:

本文将分为五个部分来进行说明。首先,在引言部分我们将简要介绍本文的目标、内容和结构,以帮助读者理解全文。接下来,第二部分将详细阐述Difference函数算法的概述,并介绍其背后的原理和基本特点。第三部分将重点关注Difference函数的使用方法,包括语法和参数解释,并通过实际应用示例进行展示。第四部分则提供了一些使用Difference函数时需要注意的事项和常见问题解答,包括如何处理NULL值以及性能优化建议等。最后,在第五部分我们将总结Difference函数的优势与不足,并展望其未来发展并提出建议。

1.3 目的:

撰写这篇长文有以下几个目的: - 介绍mysql中Difference函数算法,帮助读者了解该函数的概述和基本原理;

- 提供Difference函数的使用方法和参数解释,并通过实际示例进行说明;

- 分享使用Difference函数时需要注意的事项和常见问题解答,以及性能优化建议;

- 总结Difference函数的优势与不足,并展望其未来发展并提出建议。

通过阅读本文,读者将能够全面掌握mysql中Difference函数算法的相关知识,并且在实际应用中能够灵活运用该函数解决问题。同时,本文也为读者提供了进一步学习和探索这一领域的参考信息,以满足各自需求。

2. Difference函数算法概述

2.1 Difference函数简介

Difference函数是MySQL数据库中的一个内置函数,用于计算两个字符串之间的差异度。它通过比较两个字符串之间不同字符的数量来衡量它们之间的相似程度或差异程度。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档