DDL
目录
库的创建、修改、删除
- 创建库
create database [if not exists] db_name;
- 删除库
DROP database [IF EXISTS] db_name;
- 修改库
#更改库的字符集
ALTER DATABASE db_name CHARACTER SET gbk;
表的创建(通过复制创建)、修改、删除
- 创建表
create table [if not exists] 表名(
列名 列的类型[(长度) 约束],
列名 列的类型[(长度) 约束],
...
列名 列的类型[(长度) 约束]
)
eg:
CREATE TABLE book(
id INT,#编号
bName VARCHAR(20),#图书名
price DOUBLE,#价格
authorId INT,#作者编号
publishDate DATETIME#出版日期
);
- 通过复制创建表
- 仅仅复制表的结构
CREATE TABLE 新表 LIKE 旧表;
- 复制表的部分结构(即不复制全部字段)
CREATE TABLE 新表
SELECT 查询项
FROM 旧表
WHERE 0;#条件永远不成立,即不复制数据
- 复制表的结构以及数据
- 复制表的结构以及全部数据
CREATE TABLE 新表
SELECT * FROM 旧表;
- 复制表的结构以及部分数据
CREATE TABLE 新表
SELECT 查询项
FROM 旧表
WHERE 查询条件;
- 删除表
DROP TABLE [IF EXISTS] book;
- 修改表
alter table 表名 add|drop|modify|change column 列名 [列类型 约束];
eg:
#修改表名
ALTER TABLE 原表名 RENAME TO 新表名;
#修改列名
ALTER TABLE 表名 CHANGE COLUMN 原列名 新列名 类型;
#修改列的类型或约束
ALTER TABLE 表名 MODIFY COLUMN 列名 [新的列类型|约束];
#添加新列
ALTER TABLE 表名 ADD COLUMN 新列 新列的类型 [FIRST|AFTER 列名]; 添加到第一列或某一列后
#删除列
ALTER TABLE 表名 DROP COLUMN 列名;
创建表时的数据类型
数据类型:
- 数值型:
- 整型
tinyint(占1个字节,表达的范围也是)、smallint(2)、mediumint(3)、int/integer(4)、bigint(8)
① 默认是有符号整型,如果想设置为无符号,需要添加unsigned关键字
② 如果插入的数值超出范围,会报out of range异常,并且插入临界值
③ 如果不设置长度,会有默认的长度,
长度代表了显示的最大宽度,如果不够会用0在左边填充,但必须搭配zerofill使用! - 小数
- 定点型
dec(M,D)
decimal(M,D) - 浮点型
float(M,D)(4字节)
double(M,D)(8)
①M:整数部位+小数部位 的长度,D:小数部位 的长度
如果超过长度,则插入临界值,不足则补0
eg: float(5,2) 插入1234.56结果是999.99
②M和D都可以省略
如果是decimal,则M默认为10,D默认为0
如果是float和double,则会根据插入的数值的精度来决定精度
③定点型的精确度较高,如果要求插入数值的精度较高如货币运算等则考虑使用
- 定点型
- 整型
- 字符型:
- 较短的文本:char(M)、varchar(M)
写法 | M代表的意思 | 空间的耗费 | 效率 |
---|---|---|---|
char(M) | 最大的字符数,可以省略,默认为1 | 固定长度,即使用不完也分配指定长度的空间 | 高 |
varchar(M) | 最大的字符数,不可以省略 | 可变长度,只会分配实际所需长度的空间 | 低 |
- 较长的文本:text
- 二进制(媒体文件):
binary、varbinary
blob(较长的二进制数据) - 日期型:
date:只保存日期
time: 只保存时间
year:只保存年
datetime:保存日期+时间
timestamp:保存日期+时间
比较 | 字节 | 范围 | 时区等的影响 |
---|---|---|---|
datetime | 8 | 1000-01-01 00:00:00 — 9999-12-31 | 不受 |
timestamp | 4 | 1970-01-01 08:00:01 - 2038 | 受 |
- 枚举:
enum - 集合:
set
创建表时的约束
- 主键与外键