## DDL语句:操作数据库、表
### 操作数据库
1. C(Create):创建
```sql
create database db_name; -- 创建数据库
create database if not exists db_name; -- 如果该数据库不存在则创建数据库
create database db_name character set utf8; -- 创建数据库,并指定字符集为utf-8
```
2. R(Retrieve):查询
```sql
show databases; -- 查询所有数据库的名称
show create database db_name; -- 查询某个数据库的创建语句,并查询该数据库的字符集
```
3. U(Update):修改
```sql
alter database db_name character set utf8; -- 修改数据库的字符集为utf8
```
4. D(Delete):删除
```sql
drop database db_name; -- 删除数据库
drop database if exists db_name; -- 判断数据库存在,存在再删除
```
5. 使用数据库
```sql
select database(); -- 查询当前正在使用的数据库名称
use db_name; -- 使用数据库
```
### 操作表
1. C(Create):创建
field 为字段名,type 为该字段的类型
```sql
-- 建表
create table tbl_name(
field1 type1,
field2 type2,
...
fieldN typeN -- 最后一列,不需要加逗号
);
-- 复制表
create table tbl_2 like tbl_1;
```
常用数据类型
|数据类型|说明|
|---|---|
|int|整数类型,int age|
|double|浮点数类型(总位数,小数点后位数),score double(5,2)|
|date|日期类型,yyyy-MM-dd|
|datetime|日期时间类型,yyyy-MM-dd HH:mm:ss|
|timestamp|时间戳,包含年月日时分秒,如果将来不给这个字段赋值,或赋值为null,则默认使用当前的系统时间自动赋值,常用于记录添加时间|
|varcahr|字符串类型,name varchar(20):姓名最大20个字符|
2. R(Retrieve):查询
```sql
show tables; --查询某个数据库中所有的表名称
desc tbl_name; -- 查询表tbl_name的结构
show create table tbl_name; -- -- 查询表的创建语句,并查询该表的字符集
```
3. U(Update):修改
```sql
alter table tbl_name rename to new_tbl_name; -- 修改表名
alter table tbl_name character set utf8; -- 修改表的字符集为utf8
alter table tbl_name add new_field new_type; -- 添加新的字段
alter table tbl_name change old_field new_field new_type; --修改字段名称和数据类型
alter table tbl_name modify field new_type; -- 修改字段的数据类型
alter table tbl_name drop field; -- 删除字段
```
4. D(Delete):删除
```sql
drop table tbl_name; -- 删除表tbl_name
drop table if exists tbl_name; -- 如果表存在再删除
```
## DML语句:增删改表中数据
1. 添加数据
```sql
insert into tbl_name(field1,field2,...,fieldn) values (val1,vale,...,valn); -- 添加一条记录,给指定的字段赋值
insert into tbl_name values (val1,val2,...,valn); -- 添加一条记录,给所有的字段赋值
```
1. 添加的记录的字段和值要一一对应。
2. 除了数字类型,其他类型需要使用引号(单双都可以)引起来
2. 删除数据
```sql
delete from tbl_name where conditions; -- 删除满足条件的数据
truncate table tbl_name; -- 先删除该表,然后再创建一张一样的表
```
**注意**:如果 delete 语句不加条件,则删除表中所有记录,这是非常危险的操作。
如果要删除所有记录
1. delete from 表名; -- 不推荐使用,有多少条记录就会执行多少次删除操作,效率低
2. TRUNCATE TABLE 表名; -- 推荐使用,效率更高
3. 修改数据
```sql
update tbl_name set field1=val1,field2=val2,... where conditions; -- 修改满足条件的记录
```
**注意**:如果不加任何条件,则会将修改表中所有记录,这是非常危险的操作。
## 参考
[黑马 JavaWeb](https://www.bilibili.com/video/BV1J4411877m)
[数据库复习笔记](https://blog.csdn.net/m0_37989980/article/details/103987924)

MySQL | DDL 语句和 DML 语句