简介

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 软件之一。在Java企业级开发中非常常用,因为 MySQL 是开源免费的,并且方便扩展。

MySQL权限表

MySQL服务器通过权限表来控制用户对数据库的访问,权限表存放在mysql数据库里,由mysql_install_db脚本初始化。这些权限表分别为user,db,table_priv,columns_priv和host。下面分别介绍一下这些表的结构和内容:

  • user权限表:记录允许连接到服务器的用户帐号信息,里面的权限是全局级的。
  • db权限表:记录各个帐号在各个数据库上的操作权限,里面的权限是数据库级的。
  • table_priv权限表:记录数据表级的操作权限。
  • columns_priv权限表:记录数据列级的操作权限。
  • host权限表:配合db权限表对给定主机上数据库级操作权限作更细致的控制。这个权限表不受GRANT和REVOKE语句的影响。

MySQL中的权限管理:

  • 授予权限

mysql用户名用哪个比较多 mysql用户表一般叫什么名字_MySQL

  • 撤销权限

MySQL日志

MySQL的常见日志log分为以下类型:

日志类型

日志内容

错误日志

mysql 启动、停止和运行过程中出现的异常

常规操作日志

已创建客户端连接和客户端处理记录

二进制日志

数据变更日志可用于同步

转存日志

从主服务器同步的数据记录

慢查询日志

耗时超过 long_query_time 所设置时间的查询

DDL日志(元日志)

ddl 语句执行的元数据操作

其中,二进制日志binlog是实际最常使用的日志,因为它可以对数据库进行恢复

binlog的录入格式为:

  • Statement(只记录修改语句):只记录每条修改数据的SQL执行语句;但还必须记录每条语句在执行的时候的一些相关信息,确保所有语句能在slave得到和在master端(主从复制)执行时候相同的结果。但一些函数功能不能被复制
  • row(只记录修改结果):不记录SQL的上下语句信息,只记录那一条记录被修改成什么了;解决了Statement的问题,但单语句更新(删除)表的行数过多,会导致形成大量binlog
  • Mixedlevel(混合):前两个的混合使用,一般的语句修改用Statement,一些函数复制等用row,根据执行的语句来选择使用哪种方式。

MySQL数据类型

MySQL中定义数据字段的类型对数据库的优化是非常重要的。

MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串字符类型。

数值类型

类型

大小

用途

TINYINT

1 byte

小整数值

SMALLINT

2 bytes

大整数值

MEDIUMINT

3 bytes

大整数值

INT或INTEGER

4 bytes

大整数值

BIGINT

8 bytes

极大整数值

FLOAT

4 bytes

单精度 浮点数值

DOUBLE

8 bytes

双精度 浮点数值

DECIMAL

对DECIMAL,M,D ,如果M>D,为M+2否则为D+2

小数值

MySQL中DECIMAL数据类型用于在数据库中存储精确的数值。

例如语法:column_name DECIMAL(P,D)

其中P表示的是有效数字的位数,D表示是小数的位数,D小于或等于P。

理解可看下面代码:

create table decimal_test(
 id int auto_increment PRIMARY key,
 score decimal(5,2) -- 取值范围是 -999.99 到 999.99
 );

日期和时间类型

每个时间类型有一个有效值范围和一个”零”值,当指定不合法的MySQL不能表示的值时使用”零”值。

类型

大小 bytes

格式

用途

DATE

3

YYYY-MM-DD

日期值

TIME

3

HH:MM:SS

时间值或持续时间

YEAR

1

YYYY

年份值

DATETIME

8

YYYY-MM-DD HH:MM:SS

混合日期和时间值

TIMESTAMP

4

YYYYMMDD HHMMSS

混合日期和时间值,时间戳

字符类型

类型

大小

用途

CHAR

0-255 bytes

定长字符串

VARCHAR

0-65535 bytes

变长字符串

TINYBLOB

0-255 bytes

不超过 255 个字符的二进制字符串

TINYTEXT

0-255 bytes

短文本字符串

BLOB

0-65 535 bytes

二进制形式的长文本数据

TEXT

0-65 535 bytes

长文本数据

MEDIUMBLOB

0-16 777 215 bytes

二进制形式的中等长度文本数据

MEDIUMTEXT

0-16 777 215 bytes

中等长度文本数据

LONGBLOB

0-4 294 967 295 bytes

二进制形式的极大文本数据

LONGTEXT

0-4 294 967 295 bytes

极大文本数据

  • char(n)和 varchar(n) 中括号中 n 代表字符的个数,并不代表字节个数。
  • CHAR 和 VARCHAR 类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换
  • 定义一个char[10]和varchar[10],如果存进去的是‘abcd’,那么char所占的长度依然为10,除了字符‘abcd’外,后面跟六个空格,而varchar就立马把长度变为4了,取数据的时候,char类型的要用trim()去掉多余的空格,而varchar是不需要的
  • char的存取速度还是要比varchar要快得多,因为其长度固定,方便程序的存储与查找;但是char也为此付出的是空间的代价,因为其长度固定,所以难免会有多余的空格占位符占据空间,可谓是以空间换取时间效率,而varchar是以空间效率为首位的。