MySQL數據庫之--增刪改

大家好, 歡迎遇到你. 繼上兩篇查詢彙總貼後,今天整理一下數據表的增加、修改、刪除。

上兩篇超鏈接:
基礎篇 傳送門
進階篇 傳送門
加上今天整理的這篇,就湊齊了增刪改查四大天王了!


本文內容其實挺抽象的,因爲原始表格您沒有見過,所以閱讀的過程僅能熟悉或者說在心中跑一遍代碼。如果需要原表格,可以私聊我要。之前提供過二維碼,然後文章就審覈不過去了。

INSERT 語句

普通語法

插入寫入記錄,可以是一條記錄,也可以是多條記錄

  • INSERT INTO 表名(字段1,字段2,…) VALUES (值1,值2,…);.
  • INSERT INTO 表名(字段1,字段2,…) VALUES (值1,值2,…),(值1,值2,…);
-- INSERT INTO
INSERT INTO t_dept (deptno, dname, loc)
VALUES (50,'技術部','北京'),(60,'後勤部','北京'),(70,'保安部','北京');

-- 向技術部添加一條員工記錄, 只知道他是技術部,不知道技術部是什麼編號
INSERT INTO t_emp
(empno,ename, job,mgr,hiredate,sal,comm,deptno)
VALUES (8001,'劉娜','SALESMAN',8000,'1988-12-20',2000,NULL,
(SELECT deptno FROM t_dept WHERE dname='技術部'));
-- 子查詢只能是一個單行單列纔可以.

INSERT方言語法

不具備通用性[red]
mysql的方言: INSERT INTO 表名 SET 字段1=值1,字段2=值2,…

IGNORE 語句

ignore關鍵字讓insert只插入數據庫不存在的記錄

  • INSERT [IGNORE] INTO 表名…;
    案例: 70已有了(上邊插入的),現在再插入一個70和一個80,運行後記得刪除
-- 70已有,80沒有
INSERT IGNORE INTO t_dept ( deptno,dname,loc) 
values (70,'A','北京'),(80,'B','上海');

UPDATE 語句

用來修改記錄的,語法如下:
UPDATE [IGNORE] 表名
SET 字段1=值1,字段2=值2,…
[WHERE 條件1 . …] – 寫了就是條件修改
[ORDER BY…] – 寫了就按排序修改
[LIMIT…]; – 只能修改前第一個分頁記錄, 比如limit 10,代表前十條

案例&練習:

-- 案例1: 把每位員工編號和上司編號都加一
UPDATE t_emp SET empno=empno+1 , mgr=mgr+1
ORDER BY empno DESC;

-- 案例2:把月收入前三名員工底薪減100,用LIMIT完成
UPDATE t_emp
SET sal = sal-100
ORDER BY sal+IFNULL(comm,0) DESC
LIMIT 3;

update錶鏈接

  • 語法: **UPDATE 表1 JOIN 表2 ON 條件 SET 字段1=值1, 字段2=值2, … **
  • 錶鏈接的UPDATE語句可以修改多張表的記錄
  • 語法: : UPDATE 表1, 表2 SET 字段1=值1, 字段2=值2, … WHERE 連接條件
    案例:
-- 把ALLEN調往RESEARCH部門,職務調整爲ANALYST
-- e.deptno=d.deptno 這句話是把research部門編號,賦給艾倫的編號
UPDATE t_emp e  JOIN t_dept d
SET  e.deptno=d.deptno ,e.job='ANALYST' , d.loc="北京"
WHERE e.ename="ALLEN" AND d.dname="RESEARCH";


-- 把底薪低於公司平均底薪的員工,底薪增加150元
-- 錶鏈接update
UPDATE  t_emp e JOIN (SELECT AVG(sal) AS avg FROM t_emp)t
ON e.sal <t.avg
SET e.sal =e.sal+150;
  • update語句的錶鏈接即可以是內連接,又可以外連接
    UPDATE 表1 [LEFT | RIGHT] JOIN 表2 ON 條件 SET 字段1=值1, 字段2=值2,…;
    案例 :
-- 把沒有部門的員工,或者sales部門低於2000元底薪的員工,都調往20部門
UPDATE t_emp e LEFT JOIN t_dept d ON e.deptno=d.deptno
SET  e.deptno = 20
WHERE e.deptno IS NULL  OR ( d.dname="SALES" AND e.sal<2000);

DELETE 刪除

DELETE [ IGNORE ] FROM 表名
**[ WHERE 條件1 ,條件2,… ] **
[ ORDER BY … ] 排序後刪除數據
[ LIMIT … ] 分頁

內連接

案例:

-- 刪除10部門中,工齡超過20年的員工
DELETE 
FROM t_emp
WHERE deptno=10 AND DATEDIFF(now(),hiredate)/365>=20;

-- 刪除20部門中,工資最高的員工的記錄
DELETE FROM t_emp
WHERE deptno=20
ORDER BY sal+IFNULL(comm,0)DESC
LIMIT 1;

-- 刪除SALES部門和該部門全部員工記錄,一個delete語句刪除了兩張表的記錄 
DELETE e,d
FROM t_emp e JOIN t_dept d ON e.deptno=d.deptno
WHERE d.dname='SALES';

-- 刪除每個部門平均底薪的員工記錄
DELETE e
FROM t_emp e JOIN 
(SELECT deptno,AVG(sal) avgg
FROM t_emp GROUP BY deptno) t
ON e.deptno=t.deptno AND e.sal < t.avgg;

-- 刪除員工KING 和他的直接下屬的員工記錄,用錶鏈接實現.
DELETE e
FROM t_emp  e JOIN
(SELECT  empno FROM t_emp WHERE ename='king') t
ON e.mgr=t.empno  OR e.empno=t.empno;

外連接

DELETE 表1,…FROM 表1 [ LEFT | RIGHT ] JOIN 表2 ON 條件…

案例:

-- 刪除SALES部門員工,以及沒有部門的員工.
DELETE e
FROM t_emp e LEFT join t_dept d ON e.deptno=d.deptno
WHERE d.dname='SALES' OR e.deptno IS NULL;

TRUNCATE TABLE

快速刪除數據表全部記錄

  • DELETE語句是在事物機制下刪除記錄,刪除記錄之前,先把要刪除的記錄保存到日誌文件裏, 然後再刪除記錄.
  • TRUNCATE TABLE 表名;
-- TRUNCATE  TABLE 員工表
TRUNCATE  TABLE t_emp;

本文學習了:

  • INSERT 語法
  • UPDATE 語法
  • DELETE 語法
  • TRUNCATE TABLE 語法
  • 掌握了數據更新和刪除中表鏈接語法

在這裏插入圖片描述

路漫漫其修遠兮,吾將上下而求索!

發佈了44 篇原創文章 · 獲贊 5 · 訪問量 1947
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章