MySQL之DDL语言知多少
导读
学习MySQL时间也不短了,一直习惯于增删改查。近期,系统学习了一下DDL,简单总结一下DDL中的增删改查……
MySQL作为最流行的关系型数据库之一,有着和其他主流数据库几乎一致的SQL语法。相较于其他编程语言来说,虽然SQL语法比较简单,关键字也比较少,但实际也是麻雀虽小五脏俱全的。
-
DML(Data Manipulation Language),即数据操纵语言,最常用的增删改查就属于DML,操作对象是数据表中的记录; -
DDL(Data Definition Language),即数据定义语言,例如建数据库、建表等,都属于数据定义语言,也是今天本文的主角; -
DCL(Data Control Language),数据控制语言,如Grant、Rollback等等,常见于数据库安全管理,多数人一般很少用。
如果DML再进一步细分的话,那么增删改可算作是纯粹的DML,而查叫做DQL(Data Query Language),足见查询SQL地位之重要。
本文主要介绍DDL中的"增删改查",对应关键字:
增:Create
删:Drop / Truncate
改:Alter + add/drop/modify/change
查:Show / Desc
严格的讲,DDL中的增删改查对象不只是database和table,还有Procedure、Function、Trigger、Index、View等等,但今天本文仅聚焦于database和table。
在MySQL中创建数据库和创建表中,一定会用到Create语法。
创建数据库
1CREATE DATABASE <数据库名>;
一般来说,Create语法都可以在对象之后增加If not exists,用于处理创建表已存在的情况,此时仅会发出警告而不会报错。
1CREATE DATABASE [IF NOT EXISTS] <数据库名>
2[[DEFAULT] CHARACTER SET <字符集名>]
3[[DEFAULT] COLLATE <校对规则>];
如果不指定字符集和校对规则,所建数据库默认为:utf8和utf8_general_ci。当然,需注意的是MySQL中的utf8字符集实际上是一个伪utf-8,真正意义上的uft-8在MySQL中是uft8mb4(utf-8 more bytes 4)。具体可查阅相关文档介绍。
创建表
相较于建库而言,建表的可选项较多,当然这里的可选项是指针对定义表中列字段而言。与建库类似,create建表也支持if not exists语法,用来处理表重复的情形。
常见的建表语句例如:
1CREATE Table [IF NOT EXISTS] <数据表名>
2 (字段名1 类型(长度) [DEFAULT] [NOT NULL],
3 ……,
4 [PRIMARY KEY],
5 [FOREIGEN KEY ])
1CREATE Table [IF NOT EXISTS] <数据表名>(……) ENGINE = MyISAM;
1CREATE Table [IF NOT EXISTS] <数据表名> AS SELECT * FROM tb;
与Create对应的关键字是Drop,且其操作对象也几乎一致:不仅可以Drop数据库和数据表,也可以drop函数、过程、索引等等。当然,这里还是主要介绍drop数据库和数据表。
删数据库
1DROP Database <数据库名> ;
1DROP Database [If Exists] <数据库名> ;
删数据表
1DROP Table [If Exists] <数据表名> ;
1Truncate Table <数据表名> ;
某种意义上,Truncate的效果与Delete 不加限定条件时的效果一致,但其速度更快;且由于truncate是数据定义语言,其操作对象不是记录,所以不支持事务和触发器等。
对于已定义的数据库和数据表来说,如果想修改其中的某些选项和信息,此时就要用到alter关键字。Alter英文即是更改,键盘的alt即为其缩写。
因为广义上的更改含义有多种,例如增加或删除个字段叫更改,修改一些选项信息也叫更改,所以Alter其实又常常配套以下几个附属关键字:
set
1 ALTER TABLE <已有数据表> ALTER <字段> SET DEFAULT <默认值>;
add
1ALTER TABLE <数据表名> ADD <新字段名> <数据类型> [……];
drop
1ALTER TABLE <数据表名> DROP <已有字段名>;
modify
1ALTER TABLE <数据表名> MODIFY <已有字段名> <数据类型>;
change
1ALTER TABLE <数据表名> CHANGE <已有字段名> <已有字段名> <数据类型>;
注意到其与modify的一个重要不同是需要写字段名2次,所以实际上change还可用于更改字段名,即将新字段名放于已有字段名之后即可,若字段名相同意味着不修改,也不会报错。
rename
1ALTER TABLE <已有数据表名> RENAME TO <新数据表名>;
与DML中查询最为复杂不同,DDL中的查询用法其实最为简单。主要是应用Show关键字进行显示查询:
1 Show Create Database <数据库名>;
1 Show Create Table <数据表名>;
1 Desc <数据表名>;
注意,desc查询的数据表信息,包括各字段名、数据类型、默认值等等;而show查询返回的则是创建该数据表时的SQL语句。
1 Select Database();
返回的当前应用数据库名。值得注意的是这里的database()算作内置函数,与select version()查询MySQL版本信息用法类似。
本文对MySQL中面向数据库和数据表的DDL常用增删改查进行了简单介绍,包括Create、Drop、Alter、Show等关键字的基本语法。
当然,仅限于介绍对数据库和数据表的操作,这些关键字同样适用于索引、存储过程、函数等对象。