DDL 数据定义语言,涉及库和表的管理,即创建、修改和删除
创建:create
修改:alter
删除:drop
库的管理
库的创建
create database 库名;
但是为了提高容错性,推荐如下方式
create database if not exists 库名;
库的修改
更改库的字符集
alter database 库名 character set 字符集;
库的删除
drop database 库名;
表的管理
表的创建
create table 表名(
字段名 字段类型[(长度)] [约束],
字段名 字段类型[(长度)] [约束],
字段名 字段类型[(长度)] [约束],
字段名 字段类型[(长度)] [约束]
...
)[存储于引擎,字符集 ...等参数];
#创建 Book 表
CREATE TABLE Book(
id INT,
book_name VARCHAR(20),
price DOUBLE,
authorId INT,
publish_date DATETIME
);
#创建 author 表
CREATE TABLE author(
id INT,
author_name VARCHAR(20),
nation VARCHAR(10)
);
表的修改
alter table 表名 add|drop|modify|change column ...;
修改列名
语法
alter table 表名 change column 旧列名 新列名 类型;
#修改 publish_date 为 pub_date
ALTER TABLE book
CHANGE COLUMN publish_date pub_date DATETIME;
修改列的类型或约束
语法
alter table 表名 modify column 字段名 新类型;
#修改 pub_datet 的类型为 timestamp
ALTER TABLE book MODIFY COLUMN pub_date TIMESTAMP;
添加字段
语法
alter table 表名 add column 列名 类型;
#为 author 表增加一个表示年薪的字段
ALTER TABLE author ADD COLUMN annual DOUBLE;
删除字段
语法
alter table 表名 drop column 字段名;
修改表名
语法
alter table 表名 rename to 新表名;
表的删除
drop table 表名;
或者进行容错性处理
drop table if exists 表名:
表的复制
先给 author 插入几条数据
INSERT INTO author
VALUES
(1, "村上春树", "日本", 1000000),
(2, "阿加莎克里斯蒂娜", "美国", 10000000),
(3, "东野圭吾", "日本", 1000000);
只复制表结构
create table 新表名 like 被复制的表名;
使用这种方式复制,只会复制表结构
create table copy like author;
打开 copy 表发现没有数据
复制结构+全部数据
create table 新表名 select * from 被复制的表名;
这种方式相当于将查询出的结构+数据全部复制到新表
create table copy2 select * from author;
打开 copy2 发现有数据
复制结构+部分数据
因为可以再 create 后面使用 select 子查询,因此可以实现只复制部分数据、只复制部分字段等操作
CREATE TABLE copy3
SELECT id, author_name
FROM author
WHERE nation = "日本";

只复制部分或全部结构
取巧的办法,只需要 where 恒不成立,数据就不会被复制过去
CREATE TABLE copy4
SELECT id, author_name
FROM author
WHERE 1=2; #或者写 0
