[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.外鍵約束

**`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刪除的效率高一點點