MySQL DDL
- 1、DDL对数据库的操作
- 1.1 查询
- 1.2 创建
- 1.3 删除
- 1.4 使用
- 2、DDL对表的操作
- 2.1 创建(定义)表结构
- 2.2 查询表
- 2.3 修改表
- 2.4 删除表
MySQL的数据定义语言(Data Definition Language,DDL)用来定义数据库对象(数据库、表、字段)。
1、DDL对数据库的操作
1.1 查询
show databases; -- 查询所有数据库select database(); -- 查询当前数据库
1.2 创建
create database 数据库名; -- 创建数据库create database if not exists 数据库名; /*如果不存在,则创建*/
1.3 删除
drop database 数据库名; -- 删除数据库drop database if exists 数据库名; /*如果存在,则删除*/
1.4 使用
use 数据库名; -- 使用数据库,后续操作将在该数据库中进行
2、DDL对表的操作
2.1 创建(定义)表结构
语法
create table 表名(字段1 字段类型 [约束] [comment 字段1注释],......字段n 字段类型 [约束] [comment 字段n注释]
)[comment 表注释];
约束
在创建表时需要指定字段类型和约束。首先介绍约束。
约束是作用于表中字段上的规则,用于限制存储在表中的数据。以保证数据库中数据的正确性、有效性和完整性。
约束 | 描述 | 关键字 |
---|---|---|
非空约束 | 限制该字段值不能为null | not null |
唯一约束 | 保证字段的所有数据都是唯一的、不重复的 | unique |
主键约束 | 主键是一行数据的唯一标识,要求非空且唯一 | primary key |
默认约束 | 保存数据时,如果未指定该字段值,则采用默认值 | default |
外键约束 | 让两张表的数据建立连接,保证数据的一致性和完整性 | foreign key |
由于物理外键在实际使用过程中存在一些缺点,无法满足业务需求。因此在实际开发过程中,常用的是逻辑外键。
物理外键的缺点:
- 影响增、删、改的效率(需要检查外键关系)。
- 仅用于单节点数据库,不适用于分布式、集群场景。
- 容易引发数据库的死锁问题,消耗性能。
逻辑外键特点:
- 在业务层逻辑中,解决外键关联。
- 通过逻辑外键,就可以很方便的解决物理外键的问题。
字段类型(数据类型)
MySQL中有许多数据类型,字段的类型需要根据业务需求确定。下面举例常见的数据类型。
分类 | 类型 | 大小(byte) | 有符号范围 | 无符号范围 | 描述 | 备注 |
数值类型 | tinyint | 1 | (-128, 127) | (0, 255) | 小整数值 | - |
smallint | 2 | (-32768, 32767) | (0, 65535) | 大整数值 | - | |
mediumint | 3 | (-8388608,8388607) | (0,16777215) | 大整数值 | - | |
int | 4 | (-2147483648,2147483647) | (0,4294967295) | 大整数值 | - | |
bigint | 8 | (-2^63,2^63-1) | (0,2^64-1) | 极大整数值 | - | |
float | 4 | (-3.402823466 E+38,3.402823466351 E+38) | 0 和 (1.175494351 E-38,3.402823466 E+38) | 单精度浮点数值 | float(5,2):5表示整个数字长度,2 表示小数位个数 | |
double | 8 | (-1.7976931348623157 E+308,1.7976931348623157 E+308) | 0 和 (2.2250738585072014 E-308,1.7976931348623157 E+308) | 双精度浮点数值 | double(5,2):5表示整个数字长度,2 表示小数位个数 | |
decimal | 小数值(精度更高) | decimal(5,2):5表示整个数字长度,2 表示小数位个数 |
分类 | 类型 | 大小(byte) | 描述 |
字符串类型 | char | 0-255 | 定长字符串 |
varchar | 0-65535 | 变长字符串 | |
tinyblob | 0-255 | 不超过255个字符的二进制数据 | |
tinytext | 0-255 | 短文本字符串 | |
blob | 0-65535 | 二进制形式的长文本数据 | |
text | 0-65535 | 长文本数据 | |
mediumblob | 0-16 777 215 | 二进制形式的中等长度文本数据 | |
mediumtext | 0-16 777 215 | 中等长度文本数据 | |
longblob | 0-4 294 967 295 | 二进制形式的极大文本数据 | |
longtext | 0-4 294 967 295 | 极大文本数据 |
分类 | 类型 | 大小(byte) | 范围 | 格式 | 描述 |
日期类型 | date | 3 | 1000-01-01 至 9999-12-31 | YYYY-MM-DD | 日期值 |
time | 3 | -838:59:59 至 838:59:59 | HH:MM:SS | 时间值或持续时间 | |
year | 1 | 1901 至 2155 | YYYY | 年份值 | |
datetime | 8 | 1000-01-01 00:00:00 至 9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 | |
timestamp | 4 | 1970-01-01 00:00:01 至 2038-01-19 03:14:07 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值,时间戳 |
创建表举例:
创建一个职工表
create table employee(id int primary key auto_increment comment "主键ID", --设置主键ID,自增。多个约束可以一起。由于员工可能较多,因此使用int类型name varchar(10) not null comment "员工姓名", --员工姓名。员工姓名长度不一致,可以使用可变字符串。由于姓名长度不长,因此此处使用char类型也合理。age tinyint not null comment "员工年龄", --tinyint类型的最大值包含了退休年龄,因此使用tinyint类型即可gender tinyint not null comment "员工性别:1-男;2-女", --员工性别salary int default 1000 comment "月工资,默认10000", --员工工资。默认10000department_id tinyint comment "部门ID:1-研发部;2-销售部;3-财务部;4-人事部" --员工所属部门ID,逻辑外键
);
2.2 查询表
show tables; --查询当前数据库所有表desc 表名; --查询表结构show create table 表名; --查询建表语句
2.3 修改表
alter table 表名 add 字段名 类型(长度) [comment 注释] [约束]; --添加字段alter table 表名 modify 字段名 新数据类型(长度); --修改字段类型alter table 表名 change 旧字段名 新字段名 类型(长度) [comment 注释] [约束]; --修改字段名和字段类型alter table 表名 drop column 字段名; --删除字段rename table 表名 to 新表名; --修改表名
2.4 删除表
drop table 表名; -- 删除表