MySQL 的 DDL 遵守 SQL 的 DDL 规范,数据定义语言(Data Definition Languages),它定义了不同的数据库、表、字段、索引等数据库对象的定义。常用的语句关键字主要包括 create、drop、alter 等。
CREATE 语句
CREATE TABLE 语句
CREATE TABLE 语句用来根据指定的名称创建表,前提是要有 CREATE 权限。
默认情况下,MySQL 创建表采用 InnoDB 存储引擎,若表已经存在,则会报错,需要结合 IF NOT EXISTS 来避免错误。
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
[(create_definition,...)]
[table_options]
[partition_options]
[IGNORE | REPLACE]
[AS] query_expression
以创建用户表为例,示例如下:
CREATE TABLE IF NOT EXISTS `user` (
`uid` bigint(20) unsigned NOT NULL COMMENT '用户 id',
`user_name` varchar(64) NOT NULL DEFAULT '' COMMENT '用户名称',
`user_email` varchar(128) NOT NULL DEFAULT '' COMMENT '用户 email 地址',
`status` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '状态,0、待审核,1、有效,2、无效',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (`uid`),
UNIQUE KEY `uniq_user_email` (`user_email`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户表';
关于 DROP 的更多细节可参考 MySQL 创建数据表操作语句(CREATE TABLE)详解。
ALTER 语句
ALTER TABLE 语句
alter table 语句主要针对表名、表索引及表字段就行修改操作,主要结合子关键字 add、modify、drop、change 和 rename 等。
增加字段
MySQL 针对指定表增加字段的语法如下:
ALTER TABLE tbl_name
ADD col_name column_definition
[FIRST | AFTER col_name]
增加列采用关键字 add,其后增加对应列名及列定义,此外 MySQL 提供了 FIRST 和 AFTER 两个子选项来指定新增字段的位置,FIRST 表示放置在第一列,AFTER 表示设定在某个字段之后。
假设有用户表 user,其有两个字段 id 和 user_name,新增 user_email 字段示例如下:
ALTER TABLE user
ADD user_email VARCHAR(64) NOT NULL DEFAULT '' COMMENT '用户 email 地址'
未指定位置,默认在最后字段后追加。
ALTER TABLE user
ADD user_email VARCHAR(64) NOT NULL DEFAULT '' COMMENT '用户 email 地址'
FIRST
如上追加 FIRST 选项后,user_email 字段会放在 id 字段之前,即第一列。
ALTER TABLE user
ADD user_email VARCHAR(64) NOT NULL DEFAULT '' COMMENT '用户 email 地址'
AFTER id
显然,将新增非主键的新增字段放在第一的位置可读性较差,如上可以指定放在某个列之后。
删除字段
MySQL 针对指定表删除字段的语法如下:
ALTER TABLE tbl_name
DROP COLUMN col_name
如下示例:
ALTER TABLE user
DROP COLUMN user_email
DROP 语句
MySQL DROP 语句用来删除指定的数据库、表或索引等,它不仅删除内容,连带结构也一起删除,“完整消灭”,需要谨慎操作。
DROP TABLE 语句
DROP TABLE 语句用来删除数据表,它将表的结构、属性、索引、数据等都会删掉。
DROP [TEMPORARY] TABLE [IF EXISTS]
tbl_name [, tbl_name] ...
[RESTRICT | CASCADE]
关于 DROP 的更多细节可参考 MySQL 删除表操作语句(DROP TABLE)详解。