数据定义语言实现对数据库和数据表的管理,此处管理指宏观上管理,非数据的管理,可分为对库的管理和对表的管理,主要包括创建(create,区分insert)、修改(alter,区分update)、删除(drop,区分delete)。
注意区分DDL语言和DML语言,DDL是宏观定义表结构,DML是微观操作数据。
数据库管理
创建数据库
创建数据库只创建一个数据库的结构,其内部无任何业务数据,因此创建语句只需提供数据库名即可。基本语法
create database 数据库名
由于mysql不允许创建已存在的数据库,否则会报错,因此可提高创建数据库语句的鲁棒性
create database if not exists 数据库名
tips–mysql会在
C:\ProgramData\MySQL\MySQL Server 5.7\Data
路径下查看所有数据库。
修改数据库
对数据库的修改包括修改数据库名称、修改数据库字符集。
-
修改数据库名称有两种方式
- 使用
rename database 旧数据库名 to 新数据库名
. - 直接在mysql的
C:\ProgramData\MySQL\MySQL Server 5.7\Data
路径下修改数据库名称。
- 使用
-
在创建数据库时,mysql会给定一个默认字符集。创建完成之后,也可使用命令手动修改数据库的字符集
alter database 数据库名 character set 字符集
一般情况下,数据库创建完成之后,不会对其进行修改。
删除数据库
基本语法
drop database 数据库名
当数据库不存在时,使用以上语句删除会报错,可使用以下鲁棒方式,避免数据库向程序报错
drop database if exists 数据库名
表管理
创建表
创建新表需要向mysql引擎提供表名、列名、列的规则,因此其基本语法如下
CREATE TABLE [if not exists] 表名 (
列名 列数据的数据类型([数据长度]) [约束条件],
列名 列数据的数据类型([数据长度]) [约束条件],
列名 列数据的数据类型([数据长度]) [约束条件],
...
列名 列数据的数据类型([数据长度]) [约束条件] //最后一列 没有逗号
);
实例 创建book表
CREATE TABLE book(
id INT,
bName VARCHAR(20),
price DOUBLE,
authorId INT,
oublishDate DATETIME
);
修改表
修改表主要使用alter关键字,包括修改列名、修改列的类型或约束、新增列、删除列、修改表名。
修改表操作需要提供表信息,因此修改表的基本通用语句为
alter table 表名 add|modify|drop|change|rename [column] [列类型或约束]
-
修改列名
由于该语句中需要有新列的类型,因此当新旧列名一致时,该命令演变为修改列类型。
# 基本语法 ALTER TABLE book CHANGE [COLUMN] 旧列名 新列名 新列类型; # 修改oublishDate为pubDate,不改类型 ALTER TABLE book CHANGE COLUMN oublishDate pubDate DATETIME; #只修改类型 新旧列名一致 ALTER TABLE book CHANGE COLUMN pubDate pubDate TIMESTAMP;
-
修改列类型或约束
# 基本语法 ALTER TABLE 表名 MODIFY COLUMN 列名 类型; # 将pubDate的数据类型修改为datetime类型 ALTER TABLE book MODIFY COLUMN pubDate DATETIME;
-
新增列
# 基本语法 ALTER TABLE 表名 ADD COLUMN 列名 类型; #新增annual列 ALTER TABLE book ADD COLUMN annual DOUBLE;
-
删除列
#基本语法 ALTER TABLE 表名 DROP COLUMN 列名; #删除annual列 ALTER TABLE book DROP COLUMN annual;
-
修改表名
#基本语法 ALTER TABLE 旧表名 RENAME TO 新表名; #实例 ALTER TABLE book RENAME TO book_re;
删除表
基本语法,if判断避免在程序中出错
drop table if exists 表名
复制表
虽然是复制表,但仍然是为了创建一个新表,因此使用create关键字。根据复制内容的不同,复制表可分为以下情况
-
只复制表结构
create table 复制表名 like 被复制表名; #实例 CREATE TABLE copy1 LIKE book;
-
复制表结构和全部数据
这实际是后面子查询。
create table 复制目标表名 select * from 被复制表名; #实例 CREATE TABLE copy2 SELECT * FROM book;
-
复制部分表结构和部分数据
通过子查询实现
#只复制部分列,不包含数据 CREATE TABLE copy3 SELECT id,bName FROM book where 1=0; #复制部分列及对应全部数据 CREATE TABLE copy4 SELECT id,bName FROM book; #复制全部列的部分数据 CREATE TABLE copy5 SELECT * FROM book WHERE id = 2;