MySQL是一个关系型数据库管理系统(RDBMS),它是当前最流行的 RDBMS 之一。MySQL分为社区版和企业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。
SQL,即结构化查询语言(Structured Query Language),是与关系型数据库进行通信的标准语言。目前最新的标准是2008年7月开始采用的SQL-2008。
所谓SQL实现是指特定厂商的SQL产品或关系型数据库管理系统(RDBMS),目前主流的关系型数据库有DB2、Oracle、SQL Server、MySQL、PostgresSQL等。各种不同的SQL实现对SQL语言的支持与标准存在着细微的不同,所以,实际上不同数据库系统之间的SQL不能完全相互通用。
结构化查询语言包含6个部分。
数据定义语言(DDL)用于创建和重构数据库对象,比如创建和删除表。
create table alter table drop table create index alter index drop index create view drop view
数据操作语言(DML)用于操作关系型数据库对象内部的数据。
insert update delete
数据查询语言(DQL)是最受关注的部分。虽然只有一个命令,但这个命令具有很多选项和子句。
select
数据控制语言(DCL)用于控制对数据库里数据的访问,比如创建与用户访问相关的对象、控制用户的权限。
alter password grant /*赋予访问权限*/ revoke /*取消访问权限*/
数据管理命令用于对数据库里的操作进行审计和分析,还有助于分析系统性能。
start audit /*审计*/ stop audit
事务控制命令用于管理数据库事务,确保被DML语句影响的表的所有行及时得以更新。
commit /*保存数据库事务*/ rollback /*撤销数据库事务*/ savepoint /*在一组事务里创建标记点,用于回退(rollback)*/ set transaction /*设置事务的名称*/
MySQL支持多种数据类型,主要有数值类型、日期/时间类型、字符串类型。
数值类型主要用来存储数字,包括整数类型和浮点数类型。
类型名称 | 说明 | 存储需求 |
---|---|---|
TINYINT | 很小的整数 | 1个字节 |
SMALLINT | 小的整数 | 2个字节 |
MEDIUMINT | 中等大小的整数 | 3个字节 |
INT(INTEGER) | 普通大小的整数 | 4个字节 |
BIGINT | 大整数 | 8个字节 |
类型名称 | 说明 | 存储需求 |
---|---|---|
FLOAT | 单精度浮点数 | 4个字节 |
DOUBLE | 双精度浮点数 | 8个字节 |
DECIMAL(m,d) | 压缩的“严格”定点数 | m+2个字节 |
DECIMAL(m,d)
中,m表示有效位,d表示保留小数位数。
MySQL中有多种表示日期与时间的类型,如下表:
类型名称 | 日期格式 | 范围 | 存储需求 |
---|---|---|---|
YEAR | YYYY | 1901 ~ 2155 | 1字节 |
TIME | HH:MM:SS | -838:59:59 ~ 838:59:59 | 3字节 |
DATE | YYYY-MM-DD | 1000-01-01 ~ 9999-12-31 | 3字节 |
DATETIME | YYYY-MM-DD HH:MM:SS | 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 | 8字节 |
TIMESTAMP | YYYY-MM-DD HH:MM:SS | 1970-01-01 00:00:01 UTC ~ 2038-01-19 03:14:07 UTC | 4字节 |
TIMESTAMP 显示宽度固定在19个字符,显示格式与 DATETIME 的相同。但是存储字节和支持范围不同,另外还有一个最大的不同是:
MySQL支持两种字符串类型:文本字符串、二进制字符串
类型名称 | 说明 | 存储需求 |
---|---|---|
CHAR(m) | 固定长度字符串 | m字节,1<=m<=255 |
VARCHAR(m) | 变长字符串 | p+1字节,p<=m和1<=m<=255 |
TINYTEXT | 非常小的字符串 | p+1字节,p< 28 |
TEXT | 小的字符串 | p+2字节,p< 216 |
MEDIUMTEXT | 中等大小的字符串 | p+3字节,p< 224 |
LONGTEXT | 大的字符串 | p+4字节,p< 232 |
ENUM | 枚举类型 | 1或2个字节,取决于枚举值的数目(最多65535) |
SET | 集合类型 | 1,2,3,4或8个字节,取决于集合成员数量 |
类型 ENUM 与 SET 的相同之处是它们在内部都用整数表示,定义列表中每个成员都有一个索引编号。而它们的不同之处在于:
类型名称 | 说明 | 存储需求 |
---|---|---|
BIT(m) | 位字段类型 | 大约(m+7)/8个字节 |
BINARY(m) | 固定长度二进制字符串 | m个字节 |
VARBINARY(m) | 变长二进制字符串 | m+1个字节 |
TINYBLOB(m) | 非常小的BLOB | p+1字节,p< 28 |
BLOB(m) | 小BLOB | p+2字节,p< 216 |
MEDIUMBLOB(m) | 中等大小的BLOB | p+3字节,p< 224 |
LONGBLOB(m) | 非常大的BLOB | p+4字节,p< 232 |
BLOB
类型是一个二进制大对象,通常用来存储可变的大容量数据,比如图片、音频或视频。
为了优化存储,在任何情况下均应使用最精确的类型。例如,如果列的值的范围为从1到99999,若使用整数,则MEDIUMINT UNSIGNED是好的类型。在所有可以表示该列值的类型中,该类型使用的存储最少。