MySQL學(xué)習(xí)——數(shù)據(jù)操作與事務(wù)控制

一.數(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.列名列表部分可以省略,如果省略,默認包括該表的所有列,列的順序為使用 desc 表名 命令所查看的順序;
4.列名列表部分也可以指定部分非空的列,注意值列表必須和列名列表對應(yīng);
5.字符和日期型數(shù)據(jù)必須要用單引號括起來。
例子:


示例
  • 插入空值NULL
    1.隱含法: 在列名列表中忽略該列


    示例

    2.顯示法: 指定 NULL關(guān)鍵字或者''


    示例
  • 插入日期值
    SYSDATE() 函數(shù)記錄當前日期和時間


    示例

    示例1
  • 批量插入數(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表


    創(chuàng)建表

    向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。


功能

關(guān)系運算符
  • 使用 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é)果進行確認或取消。確認也就是使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默認是自動提交的,也就是你提交一個sql,就直接執(zhí)行!
可以通過
set autocommit = 0 禁止自動提交
set autocommit = 1 開啟自動提交
來實現(xiàn)事務(wù)的處理。
但要注意當用set autocommit = 0 的時候,以后所有的sql都將作為事務(wù)處理,直到用commit確認或 rollback結(jié)束,注意當結(jié)束這個事務(wù)的同時也開啟了新的事務(wù)!按第一種方法只將當前的做為一個事務(wù)!

3.隱式結(jié)束
  • 隱式提交:當下列任意一種情況發(fā)生時,會發(fā)生隱式提交
    1.執(zhí)行一個DDL(CREATE、ALTER、DROP、TRUNCATE、RENAME)語句;
    2.執(zhí)行一個DCL(GRANT、REVOKE)語句;

  • 隱式回滾:當下列任意一種情況發(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í)筆記使用,如有錯誤歡迎指正~)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ORA-00001: 違反唯一約束條件 (.) 錯誤說明:當在唯一索引所對應(yīng)的列上鍵入重復(fù)值時,會觸發(fā)此異常。 O...
    我想起個好名字閱讀 5,954評論 0 9
  • 什么是數(shù)據(jù)庫? 數(shù)據(jù)庫是存儲數(shù)據(jù)的集合的單獨的應(yīng)用程序。每個數(shù)據(jù)庫具有一個或多個不同的API,用于創(chuàng)建,訪問,管理...
    chen_000閱讀 4,139評論 0 19
  • 一、數(shù)據(jù)操作語言 Date Manipulation Language,簡稱DML,主要用來實現(xiàn)對數(shù)據(jù)庫表中的...
    遼A丶孫悟空閱讀 991評論 0 38
  • 1. SQL 簡介 SQL 的目標 理想情況下,數(shù)據(jù)庫語言應(yīng)允許用戶: 建立數(shù)據(jù)庫和關(guān)系結(jié)構(gòu) 完成基本數(shù)據(jù)管理任務(wù)...
    板藍根plank閱讀 2,503評論 0 11
  • 尚鵬老師是一名純理科生學(xué)霸(清華研究生),很注重數(shù)學(xué)邏輯的培養(yǎng)。今天上午分享的主題也是全課程數(shù)學(xué)六大課型的實踐...
    MrZhu123閱讀 814評論 0 3

友情鏈接更多精彩內(nèi)容