DDL语句
定义:数据库模式定义语言DDL(Data Definition Language),是用于描述数据库中要存储的现实世界实体的语言。主要由create(添加)、alter(修改)、drop(删除)和 truncate(删除) 四个关键字完成。主要是对数据库的常规操作、对表结构的常规操作、修改表结构,而不涉及表中数据。
对数据库的常规操作
| 功能 | SQL |
|---|---|
| 查看所有数据库 | show databases; |
| 创建数据库 | create database [if not exists] 数据库名 [charset=utf8]; |
| 切换(选择要操作的)数据库 | use 数据库名; |
| 删除数据库 | drop database [if exists] 数据库名; |
| 修改数据库编码(了解) | alter database 数据库名 character set utf8; |
[ ]及其内的内容可以省去

添加注释可以用ctrl键+/键也可以在前面加一个#

创建数据库

删除数据库(if exists就是防止报错)

SQLyog同上
对表结构的常规操作
创建表格式

创建表实际上就是构建一张空表,指定这个表的名字,这个表有几列,每一列叫什么名字,以及每一列存储的数据类型。例如

创建完成

数据类型
数值类型
| 类型 | 大小 | 范围 | 范围(无符号) | 用途 |
|---|---|---|---|---|
| TINYINT | 1 byte | (-2^7,2^7 -1) | (0,2^8 -1) | 小整数值 |
| SMALLINT | 2 bytes | (-2^15 ,2^15 -1) | (0,2^16 -1) | 大整数值 |
| MEDIUMINT | 3 bytes | (-2^23,2^23 -1) | (0,2^24 -1) | 大整数值 |
| INT或INTEGER | 4 bytes | (-2^31,2^31 -1) | (0,2^32 -1) | 大整数值 |
| BIGINT | 8 bytes | (-2^63,2^63 -1) | (0,2^64 -1) | 极大整数值 |
| FLOAT | 4 bytes | 很大,已够用 | 此处不再举例 | 单精度浮点数值 |
| DOUBLE | 8 bytes | 超级大 | 此处不再举例 | 双精度浮点数值 |
| DECIMAL | 依赖于M,D的取值 | 依赖于M,D的取值 | 小数值 |
注意无符号数的使用,例如int unsigned
decimal的使用:decimal(M,D) M表示有效数字个数,D表示小数点后数字个数
字符串类型
| 类型 | 大小 | 用途 |
|---|---|---|
| CHAR | 0-2^8 -1 bytes | 定长字符串 |
| VARCHAR | 0-2^16 -1 bytes | 变长字符串 |
| TINYBLOB | 0-2^8 -1 bytes | 不超过255个字符的二进制字符串 |
| TINYTEXT | 0-2^8 -1 bytes | 短文本字符串 |
| BLOB | 0-2^16 -1 bytes | 二进制形式的长文本数据 |
| TEXT | 0-2^16 -1 bytes | 长文本数据 |
| MEDIUMBLOB | 0-2^24 -1 bytes | 二进制形式的中等长度文本数据 |
| MEDIUMTEXT | 0-2^24 -1 bytes | 中等长度文本数据 |
| LONGBLOB | 0-2^32 -1 bytes | 二进制形式的极大文本数据 |
| LONGTEXT | 0-2^32 -1 bytes | 极大文本数据 |
日期类型
| 类型 | 大小(bytes) | 范围 | 格式 | 用途 |
|---|---|---|---|---|
| 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 | 自动填充当前时区的时间 | YYYY-MM-DD HH:MM:SS | 混合日期和时间,时间戳 |
对表结构的其他操作
| 功能 | SQL |
|---|---|
| 查看当前数据库的所有表名称 | show tables; |
| 查看指定某个表的创建语句 | show create table 表名; |
| 查看表结构 | desc 表名; |
| 删除表 | drop table 表名; |


修改表结构
添加列
语法:alter table 表名 add 列名 类型(长度) [约束];
例如,为students表添加一个新的字段为:班级class, 类型为varchar(20)

修改列名和类型
语法:alter table 表名 change 旧列名 新列名 类型(长度) [约束]
例如,为students表的class字段更换为department varchar(30)

删除列
语法:alter table students 列名;
例如,删除students里的department列

修改表名
语法:rename table 旧表名 to 新表名;
例如,将students修改为student

DML语句
DML是指数据操作语言,英文全称是Data Manipulation Language,用来对数据库中的表的数据记录进行更新。
关键字:插入(insert)、删除(delete)、更新(update)
数据插入
语法
向表中插入(某些列):insert into 表(列名1,列名2,列名3...) values (值1,值2,值3...),(值1,值2,值3...),...;
向表中插入(所有列):insert into 表 values(值1,值2,值3...),(值1,值2,值3...),...;
注意:varchar的值要用单引号括起来


这里的日期也可以写成 ‘2001-05-20’ 注意要有单引号
数据修改
语法:
修改所有行:update 表名 set 字段名=值,字段名=值,...;
修改特定行:update 表名 set 字段名=值,字段名=值,... where 条件;


where可以很复杂,也可以是范围,例如where sid > 2
数据删除
语法:
删除行(如果没有where限定,则删除所有行):delete from 表名 [where 条件];
truncate table 表名 或者 truncate 表名
区别:delete和truncate原理不同,delete只删除内容,而truncate类似于drop table,可以理解为将整个表删除后,再创建该表。


删除所有行的delete和truncate效果一样
总结
