[toc]
# 库和表的管理
## 1.库的管理
~~~
//数据库的管理:创建(create)、修改(alter)、删除(drop)
create database books; //创建数据库
alter database books character gbk; //修改库的字符集(修改后才能插入中文数据)
drop database books; //删除数据库
~~~
注意点:数据库管理的三个操作后面都要跟<b>database</b>
## 2.表的管理
~~~
//表的管理:创建(create)、修改(alter)、删除(drop)
create table book( //创建表
字段名 字段类型
id int,
bName varchar(20),
price double,
)
alter table book drop column price; //修改表之删除列
drop table book; //删除表book
~~~
注意点:数据库管理的三个操作后面都要跟<b>table</b>
## 3.外键约束
![](https://img.kancloud.cn/c6/22/c62242131647b65e9733db373daa5bc8_914x138.png)
**`RESTRICT、NO ACTION`**
删除:从表记录不存在时,主表才可以删除。删除从表,主表不变
更新:从表记录不存在时,主表才可以更新。更新从表,主表不变
**`CASCADE`**
删除:删除主表时自动删除从表。删除从表,主表不变
更新:更新主表时自动更新从表。更新从表,主表不变
**`SET NULL`**
删除:删除主表时自动更新从表值为NULL。删除从表,主表不变
更新:更新主表时自动更新从表值为NULL。更新从表,主表不变
注意点:删除一般用<b>set null</b>,更新用<b>cascade</b>。(restrict和no action都是限制表的删除和更新)
# 数据操纵(DML)
## 1.插入(insert into)
方式一:经典的插入
~~~
/*
语法:
insert into 表名 (列名,...) values(值1,...);
*/
INSERT INTO beauty(id,NAME,sex,borndate,phone,photo,boyfriend_id)
VALUES(13,'唐艺昕','女','1990-4-23','1898888888',NULL,2);
//列名要和values里的值一一对应。
~~~
方式二:通过set赋值
~~~
/*语法:
insert into 表名
set 列名=值,列名=值,...
*/
INSERT INTO beauty
SET id=19,NAME='刘涛',phone='999';
~~~
两种方式对比:
~~~
//1.方式一支持多行插入,方式二不支持
insert into beauty
values(23,'唐艺昕1','女','1990-4-23','1898888888',NULL,2)
,(24,'唐艺昕2','女','1990-4-23','1898888888',NULL,2)
,(25,'唐艺昕3','女','1990-4-23','1898888888',NULL,2);
//2.方式一支持子查询,方式二不支持
INSERT INTO beauty(id,NAME,phone)
SELECT 26,'宋茜','11809866';
~~~
## 2.修改(update)
### 修改单表的记录
~~~
//语法:
update 表名
set 列=新值,列=新值,...
where 筛选条件
//案例:修改beauty表中姓唐的女神的电话为13899888899
UPDATE beauty SET phone = '13899888899'
WHERE NAME LIKE '唐%';
~~~
### 修改多表的记录
~~~
//修改多表的记录只需要把两个表连接,再修改即可
//案例:修改没有男朋友的女神的男朋友编号都为2号
UPDATE boys bo
RIGHT JOIN beauty b ON bo.`id`=b.`boyfriend_id`
SET b.`boyfriend_id`=2
WHERE bo.`id` IS NULL;
~~~
## 3.删除(delete)
### 单表删除
~~~
//语法:
delete from 表名 where 筛选条件
案例:删除手机号以9结尾的人的信息
delete from boys
where phone like "%9";
~~~
### 多表删除
~~~
//语法:
delete 表 1,表2
from 表1 join 表2 on 连接条件
where 筛选条件;
案例:删除黄晓明的信息以及他女朋友的信息
DELETE b,bo
FROM beauty b
INNER JOIN boys bo ON b.`boyfriend_id`=bo.`id`
WHERE bo.`boyName`='黄晓明';
~~~
注意:单表删除是delete <b>from</b> 表名,多表删除没有from关键字!
### truncate语句
当你仍要保留该表,但要删除所有记录时, 用 truncate;当你要删除部分记录时(经常配合where使用), 用 delete。
<b>delete和truncate区别</b>:
- delete可以加where来加筛选条件,truncate不能加
- 假如要删除的表中有自增长列,如果用delete删除后,再插入数据,自增长列的值从断点开始,而truncate删除后,再插入数据,自增长列的值从1开始。
- truncate删除不能<b>回滚</b>,delete删除可以回滚。
- truncate删除没有返回值,delete删除有返回值
- truncate删除的效率高一点点