二、SQL分類

1.SQL語句的分類

  • DDL語句(數(shù)據(jù)定義語句)

    主要用于定義數(shù)據(jù)庫對象的SQL語句

    數(shù)據(jù)庫對象:表(table),列(column),視圖(view),索引(index)...

    1. create: 創(chuàng)建

    2. alter: 修改

    3. replace: 替換

    4. drop: 放棄(刪除)

    5. truncate: 截斷

  • DML語句(數(shù)據(jù)操作語句)

    主要用于數(shù)據(jù)的變更

    1. insert 插入(新增數(shù)據(jù))

    2. update 更新(修改數(shù)據(jù))

    3. delete 刪除

    4. merage 合并

  • TCL語句(事務控制語句)

    主要用于事務控制

    1. commit 提交事務

    2. rollback 回滾事務

  • DQL語句(數(shù)據(jù)查詢語句)

    主要用于查詢和檢索數(shù)據(jù)

    1. select 查詢
  • DCL語句(數(shù)據(jù)控制語句)

    主要用于數(shù)據(jù)庫權限管理

    1. grant 授權

    2. revoke 回收

2.DML語句(數(shù)據(jù)操作語句)

2.1 新增數(shù)據(jù)(insert)

語法:

  INSERT INTO 表名稱 VALUES (值1, 值2,....)

向表中增加一條記錄

  • 為所有的列都賦值

    image

INSERT INTO dept VALUES(1,'開發(fā)一部','沈陽');

image
  • 為指定的列賦值

    為指定的列進行賦值,未指定的列的值默認就是null

    如果某個列是not null,則它必須被賦值


INSERT INTO dept(deptno,dname) VALUES(2,'開發(fā)二部');

  • 一次插入多條數(shù)據(jù)(MySQL方言)(了解)

INSERT INTO dept VALUES(3,'開發(fā)三部','沈陽'),(4,'開發(fā)四部','沈陽');

2.2 刪除數(shù)據(jù)(delete)

從表中移除一些數(shù)據(jù)

  • 無條件刪除(全刪除)

DELETE FROM dept;

  • 有條件刪除 (根據(jù)設定條件進行刪除)
  1. 刪除deptno的值是4的部門記錄

DELETE FROM dept WHERE deptno = 4;

  1. 刪除loc的值是"沈陽"的部門記錄

DELETE FROM dept WHERE loc = '沈陽';

  1. 邏輯-與 AND

    X AND Y必須同時滿足兩個條件X和Y

    刪除loc是“北京”同時名字是“開發(fā)一部”的記錄


DELETE FROM dept WHERE dname = '開發(fā)一部' AND loc = '北京'

  1. 邏輯-或 OR

    X OR Y必須滿足X和Y其中任一條件

    刪除loc是“北京”或者名字是“開發(fā)一部”的記錄


DELETE FROM dept WHERE dname = '開發(fā)一部' OR loc = '北京'

  1. 邏輯-非 NOT

    表示邏輯取反 X = 12 取反 X != 12 X <> 12

    X > 12 取反 X <= 12

    刪除學生考試分數(shù)在[80,90]區(qū)間的記錄


DELETE FROM student WHERE score >= 80 and score <= 90

DELETE FROM student WHERE score between 80 and 90;

刪除學生考試分數(shù)不在[80,90]區(qū)間的記錄


DELETE FROM student WHERE score < 80 or score > 90

DELETE FROM student WHERE score NOT between 80 and 90;

面試題:delete,drop和truncate的區(qū)別?

delete DML語句 表示刪除表中數(shù)據(jù),這個操作是可以恢復的

drop DDL語句 表示刪除整張表,包含表結構, 不可恢復

truncate DDL語句 表示截斷表,不刪除表結構只清空數(shù)據(jù), 數(shù)據(jù)不可恢復,刪除速度快

2.3 修改數(shù)據(jù)(update)

修改表中一些數(shù)據(jù)

  • 無條件修改(全表進行更新)

    將dept表中所有數(shù)據(jù)的dname更新為“開發(fā)部”,loc更新為“北京”


UPDATE dept SET dname = '開發(fā)部',loc = '北京'

將emp表中所有數(shù)據(jù)的sal增加200


UPDATE emp SET sal = sal + 200

  • 有條件修改(符合條件記錄進行修改)

    將dept表中的dname是“開發(fā)二部”的數(shù)據(jù)的loc設置為“北京”


UPDATE dept SET loc = '北京' WHERE dname = '開發(fā)二部'

3.事務的概念

事務(Transaction),一般是指要做的或所做的事情。在計算機術語中是指訪問并可能更新數(shù)據(jù)庫中各種數(shù)據(jù)項的一個程序執(zhí)行單元(unit)。

比如說轉賬的例子是事務(101賬號給102賬號轉賬100)


update 賬戶 set 余額 = 余額 - 100 where 賬號= 101

update 賬戶 set 余額 = 余額 + 100 where 賬號= 102

兩條SQL語句必須同時執(zhí)行組成了一個完整的執(zhí)行單元,必須同時成功

事務的四個特性

  • 原子性:組成事務的這些SQL語句是一個整體,不可能繼續(xù)劃分

  • 一致性:這些SQL語句要么同時成功,要么同時失敗。不允許只成功一部分

  • 隔離性:不同事務之間不能互相干擾

  • 持久性:事務執(zhí)行成功后,數(shù)據(jù)有效地保存

事務控制


set AutoCommit false;  -- 關閉自動提交

update 賬戶 set 余額 = 余額 - 100 where 賬號= 101;

update 賬戶 set 余額 = 余額 + 100 where 賬號= 102;

commit;  -- 手動提交

當執(zhí)行commit時會將兩個語句的執(zhí)行結果同時執(zhí)行到數(shù)據(jù)庫中


set AutoCommit false;  -- 關閉自動提交

update 賬戶 set 余額 = 余額 - 100 where 賬號= 101;

update 賬戶 set 余額 = 余額 + 100 where 賬號= 102;

rollback;  -- 手動回滾

當執(zhí)行rollback時會將兩個語句的執(zhí)行結果同時撤銷,不會對數(shù)據(jù)庫產生影響

4.查詢數(shù)據(jù)準備

4.1 建表
  • 創(chuàng)建location表

CREATE TABLE location (

  locid varchar(64) NOT NULL,

  adress varchar(128) DEFAULT NULL,

  PRIMARY KEY (locid)

)

  • 創(chuàng)建dept表

CREATE TABLE dept (

  deptno int(8) NOT NULL,

  dname varchar(64) NOT NULL,

  loc varchar(64) DEFAULT NULL,

  PRIMARY KEY (deptno)

)

  • 創(chuàng)建emp表

CREATE TABLE emp (

  empno int(8) NOT NULL,

  ename varchar(64) NOT NULL,

  job varchar(64) DEFAULT NULL,

  mgr int(8) DEFAULT NULL,

  hiredate date DEFAULT NULL,

  sal int(8) DEFAULT NULL,

  comm int(8) DEFAULT NULL,

  deptno int(8) DEFAULT NULL,

  PRIMARY KEY (empno),

  KEY `FK_EMP_DEPTNO` (deptno),

  CONSTRAINT `FK_EMP_DEPTNO` FOREIGN KEY (deptno) REFERENCES dept (deptno)

)

4.2 創(chuàng)建數(shù)據(jù)
  • location表數(shù)據(jù)

insert  into location(locid,adress) values ('BOSTON','110, NO.5 Street');

insert  into location(locid,adress) values ('DALLAS','No.12 Farm');

insert  into location(locid,adress) values ('NEW YORK','NO 121 Queen Street ');

  • dept表數(shù)據(jù)

insert  into dept(deptno,dname,loc) values (10,'RESEARCH','BOSTON');

insert  into dept(deptno,dname,loc) values (20,'SALES','NEW YORK');

insert  into dept(deptno,dname,loc) values (30,'MANAGE','DALLAS');

insert  into dept(deptno,dname,loc) values (40,'HRD','NEW YORK');

  • emp表數(shù)據(jù)

insert  into emp(empno,ename,job,mgr,hiredate,sal,comm,deptno) values (1001,'TOM','PROGRAMER',1004,'1994-12-22',3800,NULL,10);

insert  into emp(empno,ename,job,mgr,hiredate,sal,comm,deptno) values (1002,'SMITH','PROGRAMER',1004,'1994-07-05',3500,NULL,10);

insert  into emp(empno,ename,job,mgr,hiredate,sal,comm,deptno) values (1003,'JACK','CLERK',1004,'1992-02-12',2500,NULL,10);

insert  into emp(empno,ename,job,mgr,hiredate,sal,comm,deptno) values (1004,'SCOTT','ANALIST',1007,'1992-01-15',4500,NULL,10);

insert  into emp(empno,ename,job,mgr,hiredate,sal,comm,deptno) values (1005,'ALEX','CLERK',1006,'1993-05-07',2800,NULL,30);

insert  into emp(empno,ename,job,mgr,hiredate,sal,comm,deptno) values (1006,'FORD','MANAGER',1007,'1994-07-05',4300,NULL,NULL);

insert  into emp(empno,ename,job,mgr,hiredate,sal,comm,deptno) values (1007,'KING','PESIDENT',NULL,'1992-01-01',7000,NULL,30);

insert  into emp(empno,ename,job,mgr,hiredate,sal,comm,deptno) values (1008,'MOON','MANAGER',1007,'1992-01-15',5000,1200,20);

insert  into emp(empno,ename,job,mgr,hiredate,sal,comm,deptno) values (1009,'TED','SALESMAN',1008,'1994-07-14',2500,1500,20);

insert  into emp(empno,ename,job,mgr,hiredate,sal,comm,deptno) values (1010,'JUCY','SALESMAN',1008,'1998-08-07',2200,800,20);

insert  into emp(empno,ename,job,mgr,hiredate,sal,comm,deptno) values (1011,'LEE','SALESMAN',1008,'1999-07-12',2200,500,20);

insert  into emp(empno,ename,job,mgr,hiredate,sal,comm,deptno) values (1012,'AMY','CLERK',1008,'1994-08-05',2200,NULL,20);

insert  into emp(empno,ename,job,mgr,hiredate,sal,comm,deptno) values (1013,'EMLIY','ANALIST',1007,'1996-06-29',4500,NULL,10);

insert  into emp(empno,ename,job,mgr,hiredate,sal,comm,deptno) values (1014,'ZORO','PROGRAME
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容