mysql DDL
DDL
表的创建、更改和删除
create 、drop 、alter 、truncate
CREATE TABLE
一般有两种创建表的方法:
- 使用具有交互式创建和管理表的工具;
- 表也可以直接用MySQL语句操纵。
- sql脚本
CREATE TABLE table_name(
column_name type options_1,
column_name type options,
column_name type options,
column_name type options,
column_name type options,
...,
options_2
...
)options_3;
options有:
-
列范围:(options_1位置)
NULL # 允许插入行时不用给出该列的值 NOT NULL # 插入或更新时必须要有值 AUTO_INCREMENT DEFAULT val
-
单独设置:(options_2位置)
PRIMARY KEY(column_name, column_name, ...)
-
表范围:(options_3位置)
ENGINE=InnoDB
表存在时,使用CREATE TABLE
不会覆盖原表,会报错。
IF NOT EXISTS
:不检查表模式,仅查看表名是否存在,在表不存在时才创建。
CREATE TABLE table_name IF NOT EXISTS(
...
);
PRIMARY KEY:主键,值唯一,不能为NULL。可以使用单个列,也可以使用多个列。
PRIMARY KEY(column_name [, column_name, ...])
主键可以在创建表时定义(如这里所示),或者在创建表之后定义。
主键中只能使用不允许NULL值的列。允许NULL值的列不能作为唯一标识。
AUTO_INCREMENT:MySQL自动对该列增量
每个表只允许一个AUTO_INCREMENT列,而且它必须被索引(如,通过使它成为主键)。
手动插入值后,后续的增量将开始使用该手工插入的值。
# 返回最后一个AUTO_INCREMENT值
SELECT last_insert_id();
DEFAULT:默认值,值不能是函数,只支持常量。
数据引擎
InnoDB、MEMORY、MyISAM
InnoDB是一个可靠的事务处理引擎(参见第26章),它不支持全文本搜索;
MEMORY在功能等同于MyISAM,但由于数据存储在内存(不是磁盘)中,速度很快(特别适合于临时表);
MyISAM是一个性能极高的引擎,它支持全文本搜索(参见第18章),但不支持事务处理。
ENGINE=xxx
引擎类型可以混用(不同的表指定一种不同的引擎),但是外键不能跨引擎(不同引擎的表不能引用其他引擎的表的外键)。
ALTER TABLE
更改表结构;
增加列|删除列|定义外键
使用前建议备份数据,因为对表的更改不可撤销。
ALTER TABLE table_name
ADD col col_info;
ALTER TABLE table_name
DROP COLUMN column_name;
ALTER TABLE table_name
ADD CONSTRAINT fk_t1_t2 FOREIGN KEY (col_in_t1) REFERENCES t2 (col_in_t2);
以上是单次修改,多次修改同一个表可以在一句中使用,
隔开多个修改项。
DROP TABLE
DROP TABLE table_name;
RENAME TABLE
RENAME TABLE t1 TO t2 [, t3 TO t4, ...];