一.數(shù)據(jù)操作語言
1.主要用來實現(xiàn)對數(shù)據(jù)庫表中的數(shù)據(jù)進行操作圈澈。
2.數(shù)據(jù)操作語言主要包括如下幾種:
增加行數(shù)據(jù):使用INSERT語句實現(xiàn)
修改行數(shù)據(jù):使用UPDATE語句實現(xiàn)
刪除行數(shù)據(jù):使用DELETE語句實現(xiàn)
進入數(shù)據(jù)庫:
-
use 數(shù)據(jù)庫名稱谈为;
1.插入數(shù)據(jù)
- 使用INSERT語句向表中插入數(shù)據(jù)
INSERT INTO table [(column [, column...])]
VALUES (value [, value...]);
1.采用這種語法一次只能追加一條記錄;
2.column部分叫做列名列表鼠次,value部分叫做值列表,列名列表和值列表必須在個數(shù)及數(shù)據(jù)類型上保持一致;
3.列名列表部分可以省略堤如,如果省略毙芜,默認(rèn)包括該表的所有列忽媒,列的順序為使用 desc 表名 命令所查看的順序;
4.列名列表部分也可以指定部分非空的列腋粥,注意值列表必須和列名列表對應(yīng)晦雨;
5.字符和日期型數(shù)據(jù)必須要用單引號括起來。
例子:
-
插入空值NULL
1.隱含法: 在列名列表中忽略該列
2.顯示法: 指定 NULL關(guān)鍵字或者''
-
插入日期值
SYSDATE() 函數(shù)記錄當(dāng)前日期和時間
- 批量插入數(shù)據(jù)
使用insert語句可以一次性地向表批量插入多條記錄
INSERT INTO 表名[(字段列表)] VALUES
(值列表1),
(值列表2),
…
(值列表n);
例子:
INSERT INTO EMP(EMPNO, ENAME, JOB, SAL) VALUES
('8881', '張三', '部門經(jīng)理', 6000),
('8882', '李四', '職員', 3000),
('8883', '王五', '職員', 3500),
('8884' ,'趙六', '部門經(jīng)理', 6500),
('8885', '高七', '職員', 2500),
('8886', '馬八', '職員', 3100),
('8887', '錢九', '部門經(jīng)理', 5000),
('8888', '孫十', '職員', 2800);
- 通過子查詢插入多行數(shù)據(jù)
INSERT INTO 表名[(列名1[,列名2隘冲,…闹瞧,列名n])] 子查詢 ;
ps:不必書寫values子句
INSERT子句和數(shù)據(jù)類型必須和子查詢中列的數(shù)量和類型相匹配中列的數(shù)量
-
例子:創(chuàng)建manager表
向manager表中插入職位為MANAGER的記錄
3.修改數(shù)據(jù)
修改數(shù)據(jù)主要用來按照指定條件修改表中某些行的列數(shù)據(jù)展辞。
修改數(shù)據(jù)使用UPDATE子句完成:
UPDATE table
SET column = value [, column = value]
[WHERE condition];
1.WHERE子句用來限定修改哪些行奥邮。
2.SET子句用來限定修改哪些列。
3.WHERE子句中的更新條件是一個邏輯表達式罗珍,通常需要使用到關(guān)系運算符和邏輯運算符洽腺,返回True或者False。
-
使用 WHERE 子句指定要修改的記錄
把員工編號為7782的部門編號修改為20
-
如果要修改所有記錄覆旱,WHERE子句可以忽略
把所有員工的部門編號修改為20
-
一次修改多列
把部門編號為10的員工已脓,部門編號調(diào)整為20,工資增加100
4.刪除數(shù)據(jù)
刪除數(shù)據(jù)主要用來按照指定條件從表中刪除某些行
- 使用 DELETE 語句刪除表中滿足條件的行記錄
DELETE FROM table
[WHERE condition]; - 刪除選中記錄
刪除職位是CLERK的員工記錄
DELETE FROM emp
WHERE job = 'CLERK'; - 刪除全部記錄
刪除所有員工記錄
DELETE FROM emp; - 截斷表
截斷表語法:
TRUNCATE TABLE table;
TRUNCATE TABLE emp; - TRUNCATE和DELETE區(qū)別
TRUNCATE是DDL通殃,只能刪除表中所有記錄度液,釋放存儲空間厕宗,使用ROLLBACK不可以回滾。
DELETE是DML堕担,可以刪除指定記錄已慢,不釋放存儲空間,使用ROLLBACK可以回滾霹购。
二.事務(wù)處理
- 事務(wù)(Transaction)概念
- 事務(wù):也稱工作單元佑惠,是由一個或多個SQL語句所組成的操作序列,這些SQL語句作為一個完整的工作單元齐疙,要么全部執(zhí)行成功膜楷,要么全部執(zhí)行失敗缝裤。在數(shù)據(jù)庫中嬉挡,通過事務(wù)來保證數(shù)據(jù)的一致性荞胡。
- 事務(wù)處理語言:Transaction Process Language ,簡稱TPL郁妈,主要用來對組成事務(wù)的DML語句的操作結(jié)果進行確認(rèn)或取消厘擂。確認(rèn)也就是使DML操作生效鼓寺,使用提交(COMMIT)命令實現(xiàn)配并;取消也就是使DML操作失效光酣,使用回滾(ROLLBACK)命令實現(xiàn)勾缭。
- 通過事務(wù)的使用揍障,能防止數(shù)據(jù)庫中出現(xiàn)數(shù)據(jù)不一致現(xiàn)象。如兩個銀行賬戶進行轉(zhuǎn)賬俩由,涉及到兩條更新操作毒嫡,這兩條更新操作只允許全部成功或失敗,否則數(shù)據(jù)會出現(xiàn)不一致的現(xiàn)象幻梯。
- 事務(wù)組成
在數(shù)據(jù)庫中兜畸,事務(wù)由一組相關(guān)的DML或SELECT語句,加上一個TPL語句(COMMIT礼旅、ROLLBACK)或一個DDL語句(CREATE膳叨、ALTER、DROP痘系、TRUNCATE等)或一個DCL(GRANT菲嘴、REVOKE)語句。
例:如下語句組成兩個事務(wù)汰翠。
INSERT….
UPDATE….
DELETE….
SELECT….
INSERT…
COMMIT;-- 前6條語句龄坪,組成第1個事務(wù)
UPDATE…
DELETE….
CREATE… ;--后3條語句,組成第2個事務(wù)
1.事務(wù)特性
事務(wù)特征可用四個字母的縮寫表示:即ACID
- 原子性(Atomicity)
事務(wù)就像“原子”一樣复唤,不可被分割健田,組成事務(wù)的DML操作語句要么全成功,要么全失敗佛纫,不可能出現(xiàn)部分成功部分失敗的情況妓局。 - 一致性(Consistency)
一旦事務(wù)完成总放,不管是成功的,還是失敗的好爬,整個系統(tǒng)處于數(shù)據(jù)一致的狀態(tài)局雄。 - 隔離性(Isolation)
一個事務(wù)的執(zhí)行不會被另一個事務(wù)所干擾。比如兩個人同時從一個賬戶從取錢存炮,通過事務(wù)的隔離性確保賬戶余額的正確性炬搭。 - 持久性(Durability)
也稱為永久性,指事務(wù)一旦提交穆桂,對數(shù)據(jù)的改變就是永久的宫盔,不可以再被回滾。
2.處理事務(wù)的方法
MySQL的事務(wù)處理主要有兩種方法
1.用begin,rollback,commit來實現(xiàn)
begin開始一個事務(wù)
rollback事務(wù)回滾
commit 事務(wù)提交
2.直接用set來改變MySQL的自動提交模式 MySQL默認(rèn)是自動提交的享完,也就是你提交一個sql灼芭,就直接執(zhí)行!
可以通過
set autocommit = 0 禁止自動提交
set autocommit = 1 開啟自動提交
來實現(xiàn)事務(wù)的處理驼侠。
但要注意當(dāng)用set autocommit = 0 的時候姿鸿,以后所有的sql都將作為事務(wù)處理谆吴,直到用commit確認(rèn)或 rollback結(jié)束倒源,注意當(dāng)結(jié)束這個事務(wù)的同時也開啟了新的事務(wù)!按第一種方法只將當(dāng)前的做為一個事務(wù)!
3.隱式結(jié)束
隱式提交:當(dāng)下列任意一種情況發(fā)生時句狼,會發(fā)生隱式提交
1.執(zhí)行一個DDL(CREATE笋熬、ALTER、DROP腻菇、TRUNCATE胳螟、RENAME)語句;
2.執(zhí)行一個DCL(GRANT筹吐、REVOKE)語句糖耸;隱式回滾:當(dāng)下列任意一種情況發(fā)生時,會發(fā)生隱式回滾
1.客戶端強行退出
2.客戶端連接到服務(wù)器端異常中斷
3.系統(tǒng)崩潰設(shè)置保存點:
如果在一個事務(wù)內(nèi)丘薛,想要回滾到指定位置嘉竟,不是回滾到事務(wù)的起始點,可以通過保存點(SAVEPOINT)來實現(xiàn)洋侨。
SAVEPOINT savepointname舍扰;--定義一個保存點語句;
ROLLBACK TO savepointname;--回滾到指定保存點
注意:如上兩條語句不結(jié)束事務(wù)的執(zhí)行希坚。開始事務(wù)操作:
BEGIN边苹;撤銷DELETE操作:
DELETE FROM test;
ROLLBACK;定義insert_a保存點:
INSERT INTO TEST VALUES('A');
SAVEPOINT INSERT_a;定義insert_b保存點:
INSERT INTO TEST VALUES('B');
SAVEPOINT INSERT_b;撤銷操作到insert_b保存點:
INSERT INTO TEST VALUES('C');
ROLLBACK TO INSERT_b;
DELETE FROM test WHERE test_str='A';將所有修改寫入數(shù)據(jù)庫
COMMIT;所有操作已經(jīng)COMMIT提交,不能回滾
ROLLBACK;
(此文章僅作為個人學(xué)習(xí)筆記使用裁僧,如有錯誤歡迎指正~)