DDL 数据定义语言,涉及库和表的管理,即创建、修改和删除

创建:create

修改:alter

删除:drop

库的管理

库的创建

  1. 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 = "日本";

MySQL (3) DDL - 图1

只复制部分或全部结构

取巧的办法,只需要 where 恒不成立,数据就不会被复制过去

CREATE TABLE copy4
SELECT id, author_name
FROM author
WHERE 1=2; #或者写 0