欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

mysql常見筆試題小結(jié)

  發(fā)布時(shí)間:2020-08-19 17:18:59   作者:累成一條狗   我要評(píng)論
這篇文章主要介紹了mysql常見筆試題小結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

一、Mysql常見筆試題

1、Mysql 中有哪幾種鎖?

(1)表級(jí)鎖:開銷小,加鎖快。不會(huì)出現(xiàn)死鎖,鎖定粒度大,發(fā)生鎖沖突的概率高,并發(fā)度低。

(2)行級(jí)鎖:開銷大,加鎖慢。會(huì)出現(xiàn)死鎖,鎖定粒度小,發(fā)生鎖沖突的概率低,并發(fā)度高。

(3)頁(yè)面鎖:開銷時(shí)間、加鎖時(shí)間、鎖定粒度在 表級(jí)鎖 與 行級(jí)鎖 之間,會(huì)出現(xiàn)死鎖,并發(fā)度中等。

2、CHAR 與 VARCHAR 的區(qū)別?

(1)CHAR 長(zhǎng)度不可變,范圍 1~255。若存儲(chǔ)長(zhǎng)度未達(dá)到定義的長(zhǎng)度,則以 空格 填充。存取速度快,但容易浪費(fèi)空間。

(2)VARCHAR 長(zhǎng)度可變,范圍 1~65535。若存儲(chǔ)長(zhǎng)度未達(dá)到定義的長(zhǎng)度,則存實(shí)際長(zhǎng)度數(shù)據(jù)。存取速度稍慢,但節(jié)約空間。

3、ACID 屬性?

  事務(wù):數(shù)據(jù)庫(kù)中,對(duì)數(shù)據(jù)的一系列操作可以看成一個(gè)整體,稱為事務(wù)。這個(gè)整體要么全部執(zhí)行、要么全部不執(zhí)行。
  ACID 屬性的存在確保了 事務(wù)的可靠。
(1)Actomicity(原子性):原子性要求 事務(wù)中的操作要么全部完成,要么回退成之前未操作的狀態(tài)。即事務(wù)中某個(gè)操作失敗后,會(huì)相當(dāng)于什么都沒發(fā)生,不會(huì)出現(xiàn)改了部分?jǐn)?shù)據(jù)的情況。

(2)Consistency(一致性):一致性要求 事務(wù)執(zhí)行前后,數(shù)據(jù)庫(kù)的狀態(tài)一致,即從一個(gè)一致性狀態(tài)切換到另一個(gè)一致性的狀態(tài)。

(3)Isolation(隔離性):隔離性要求 并發(fā)的事務(wù)相互隔離、不可見。即一個(gè)事務(wù)看不見另一個(gè)事務(wù)內(nèi)部的操作以及操作的數(shù)據(jù)。

(4)Durability(持久性):持久性要求 事務(wù)對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)的修改是永久的。即數(shù)據(jù)一旦修改提交后,其狀態(tài)將永久不變。

4、并發(fā)問題 -- 臟讀、不可重復(fù)讀、幻讀?

  對(duì)于同時(shí)運(yùn)行的多個(gè)事務(wù),若這些事務(wù)訪問同一數(shù)據(jù)時(shí),沒有采用必要的隔離機(jī)制,則會(huì)造成如下的并發(fā)問題。
(1)臟讀:臟讀 指的是當(dāng)一個(gè)事務(wù)正在訪問某數(shù)據(jù),并對(duì)這個(gè)數(shù)據(jù)進(jìn)行的修改,且這條數(shù)據(jù)還未提交到數(shù)據(jù)庫(kù)中,此時(shí)若另一個(gè)事務(wù)也訪問到這條數(shù)據(jù),獲取到的是這條被修改的數(shù)據(jù),此時(shí)得到的數(shù)據(jù)不對(duì),即臟讀。
比如:tom 年齡為 22,事務(wù) A 修改 tom 年齡為 30,此時(shí)還未提交到數(shù)據(jù)庫(kù),此時(shí)事務(wù) B 獲取 tom 年齡,得到的是 30,事務(wù) A 回滾數(shù)據(jù),數(shù)據(jù)庫(kù)的數(shù)據(jù)依舊是 22,但事務(wù) B 拿到的數(shù)據(jù)是 30,這就是臟讀,讀錯(cuò)了數(shù)據(jù)。

(2)不可重復(fù)讀:指一個(gè)事務(wù),多次讀取同一條數(shù)據(jù),在這個(gè)事務(wù)還未結(jié)束時(shí),另一個(gè)事務(wù)也訪問該數(shù)據(jù)并對(duì)其修改,那么可能造成事務(wù)多次讀取的數(shù)據(jù)不一致,即不可重復(fù)讀。
比如:tom 年齡為 22,事務(wù) A 讀取 tom 年齡為 22,事務(wù)未結(jié)束。此時(shí)事務(wù) B 修改 tom 年齡為 30,并提交到數(shù)據(jù)庫(kù),當(dāng)事務(wù) A 再次讀取 tom 年齡為 30,事務(wù) A 兩次讀取的數(shù)據(jù)不一致,即不可重復(fù)讀。

(3)幻讀:指事務(wù)并不是獨(dú)立執(zhí)行時(shí)產(chǎn)生的現(xiàn)象。一個(gè)事務(wù)修改某個(gè)表,涉及表的所有行,同時(shí)另一個(gè)事務(wù)也修改表,比如增加或刪除一條數(shù)據(jù)。此時(shí)第一個(gè)事務(wù)發(fā)現(xiàn)多出或者少了一條數(shù)據(jù)。這種情況就是幻讀。
比如:事務(wù) A 查詢當(dāng)前表的數(shù)據(jù)總數(shù)為 11, 此時(shí)事務(wù) B 向表中插入一條數(shù)據(jù),事務(wù) A 再次查詢當(dāng)前表數(shù)據(jù)總數(shù)為 12,即幻讀。

  注:
    不可重復(fù)讀、幻讀理解起來(lái)有些類似。
    不可重復(fù)讀是對(duì)一條數(shù)據(jù)操作,重點(diǎn)在于修改某條數(shù)據(jù)。
    幻讀是對(duì)表進(jìn)行操作,重點(diǎn)在于新增或刪除某條數(shù)據(jù)。

5、事務(wù)的隔離級(jí)別?

  數(shù)據(jù)庫(kù)系統(tǒng)必須具有隔離并發(fā)運(yùn)行的事務(wù)的能力,使各事務(wù)間不會(huì)相互影響,避免并發(fā)問題。
  隔離級(jí)別:指的是一個(gè)事務(wù)與其他事務(wù)的隔離程度。隔離級(jí)別越高,則并發(fā)能力越弱。
(1)Read Uncommitted(讀未提交):即讀取到 未提交的內(nèi)容。
  一般不使用。此隔離級(jí)別下,查詢不會(huì)加鎖,即可能存在兩個(gè)事務(wù)操作同一個(gè)表的情況??赡軙?huì)導(dǎo)致 “臟讀”、“不可重復(fù)讀”、“幻讀”。

(2)Read Committed(讀提交):即只能讀取到 已提交的內(nèi)容。
  常用(oracle、SQL Server 默認(rèn)隔離級(jí)別)。此隔離級(jí)別下,查詢采用 快照讀 的機(jī)制,即不會(huì)讀取到未提交的數(shù)據(jù),從而避免 “臟讀”,但是仍可能導(dǎo)致 “不可重復(fù)讀”、“幻讀”。

(3)Repeatable Read(可重復(fù)讀)
  常用(mysql 默認(rèn)隔離級(jí)別)。此隔離級(jí)別下,查詢采用 快照讀 的機(jī)制,且事務(wù)啟動(dòng)后,當(dāng)前數(shù)據(jù)不能被修改,從而可以避免 “不可重復(fù)讀”,但是仍可能導(dǎo)致 “幻讀”(新增或刪除某條數(shù)據(jù))。

(4)Serializable(串行化)
  一般不使用。此隔離級(jí)別下,事務(wù)會(huì)串行化執(zhí)行(排隊(duì)執(zhí)行),執(zhí)行效率差、開銷大??梢员苊?“臟讀”、“不可重復(fù)讀”、“幻讀“。

【舉例:】
select @@transaction_isolation; -- 用于查看當(dāng)前數(shù)據(jù)庫(kù)的隔離級(jí)別(8.0版本)
 set session transaction isolation level read committed; --用于設(shè)置隔離級(jí)別為 read committed

6、Mysql 中表類型 MyISAM 與 InnoDB 的區(qū)別?

  Mysql 采用 插件式的表存儲(chǔ)引擎 管理數(shù)據(jù),基于表而非基于數(shù)據(jù)庫(kù)。
  常見存儲(chǔ)引擎(表類型):MyISAM 與 InnoDB。
(1)MyISAM:不支持事務(wù),但是每次查詢都是原子的。支持表級(jí)鎖,即每次操作都是對(duì)整個(gè)表加鎖。存儲(chǔ)表的總行數(shù)。
(2)InnoDB:支持 ACID 屬性,支持事務(wù)的四種隔離級(jí)別。支持行級(jí)鎖以及外鍵約束。不存儲(chǔ)表的總行數(shù)。

7、自增主鍵、UUID?

(1)自增主鍵,數(shù)據(jù)在物理結(jié)構(gòu)上是順序存儲(chǔ),性能好,占用空間小??梢允?int 和 bigint 類型。int 4字節(jié),bigint 8 字節(jié),項(xiàng)目中理論不應(yīng)出現(xiàn) 自增主鍵達(dá)到最大值的情況,因?yàn)閿?shù)據(jù)太大,效率會(huì)大大降低,當(dāng)出現(xiàn)一定的數(shù)據(jù)量后,應(yīng)進(jìn)行分庫(kù)分表操作。

(2)UUID,數(shù)據(jù)在物理結(jié)構(gòu)上是隨機(jī)存儲(chǔ),性能較差,占用空間大。唯一ID,絕不沖突。

8、mysql 的約束分類?

(1)約束的作用:是一種限制,用于限制表中的數(shù)據(jù),為了保證數(shù)據(jù)的準(zhǔn)確性以及可靠性。
(2)約束分類:
  NOT NULL,非空,用于保證某個(gè)字段不為空。支持列級(jí)約束。
  DEFAULT,默認(rèn),用于保證某個(gè)字段具有默認(rèn)值。支持列級(jí)約束。
  PRIMARY KEY,主鍵,用于保證某個(gè)字段具有唯一性且非空。支持列級(jí)約束以及表級(jí)約束。
  UNIQUE,唯一,用于保證某個(gè)字段具有唯一性。支持列級(jí)約束以及表級(jí)約束。
  FORGIEN KEY,外鍵,用于限制兩個(gè)表間的關(guān)系。支持表級(jí)約束。
注:
  列級(jí)約束:指的是定義列的同時(shí)指定的約束。
  表級(jí)約束:指的是列定義之后指定的約束。

  外鍵常用于一對(duì)多的關(guān)系。即表的某條數(shù)據(jù),對(duì)應(yīng)另外一張表的多條數(shù)據(jù)。
    將 “一” 的一方稱為 :主表。將 “多” 的一方稱為 :從表。
    通常將 外鍵 置于從表上,即 從表上增加一列作為外鍵,并依賴于主表的某列。

【舉例:】
員工與部門間的關(guān)系。
一個(gè)部門可以有多個(gè)員工,而一個(gè)員工屬于一個(gè)部門。此時(shí)部門與員工間為 一對(duì)多 的關(guān)系。
部門表為主表,員工表為從表。外鍵建立在 員工表(從表)上。

CREATE TABLE dept (
    -- 此處的 primary key 為 列級(jí)約束。
    deptId int primary key auto_increment,
    deptName varchar(20) not null
);

CREATE TABLE emp (
    id int primary key auto_increment,
    name varchar(32),
    age int,
    deptId int,
    -- 此處的 foreign key 為表級(jí)約束。
    foreign key(deptId) references dept(deptId)
);

9、drop、delete 與 truncate 的區(qū)別:

(1)格式:

drop table 表名;   -- 用于刪除數(shù)據(jù)表。
truncate table 表名;  -- 用于刪除數(shù)據(jù)表的數(shù)據(jù),但保留表結(jié)構(gòu)。
delete from 表名 [where 條件];  -- 用于刪除數(shù)據(jù)標(biāo)的數(shù)據(jù),但保留表結(jié)構(gòu),可回滾。

(2)delete 與 truncate 相比較:

delete 可以添加刪除條件,truncate 不可以。
delete 刪除后可以回滾,truncate 不可以。
delete 效率較低,truncate 效率較高。
delete 可以返回受影響的行數(shù),truncate 沒有返回值。
delete 刪除數(shù)據(jù)后再次插入數(shù)據(jù)時(shí),標(biāo)識(shí)列從斷點(diǎn)處開始,truncate 標(biāo)識(shí)列從 1 開始。

10、隱式事務(wù)、顯式事務(wù)?

  隱式事務(wù):事務(wù)沒有明顯的開啟與關(guān)閉的標(biāo)志。比如 insert、delete、update等語(yǔ)句會(huì)自動(dòng)提交。
  顯式事務(wù):事務(wù)具有明顯的開啟與關(guān)閉的標(biāo)志,前提需禁用自動(dòng)提交功能。

show variables like "autocommit"; -- 用于查看自動(dòng)提交功能是否打開
set autocommit=1; -- 用于打開自動(dòng)提交功能
set autocommit=0; -- 用于關(guān)閉自動(dòng)提交功能

【顯式事務(wù)步驟:】
Step1:開啟事務(wù),關(guān)閉自動(dòng)提交功能。
    set autocommit=0;
    
Step2:編寫事務(wù)語(yǔ)句。
    select、insert、delete、update。
    SAVEPOINT A;  -- 可以設(shè)置回滾點(diǎn)
    
Step3:結(jié)束事務(wù)。
    commit; -- 提交事務(wù)
    rollback; -- 回滾事務(wù)
    rollback to A;  -- 回滾到回滾點(diǎn)

11、視圖

(1)視圖:是一種虛擬存在的表,其數(shù)據(jù)是使用視圖的過程中動(dòng)態(tài)創(chuàng)建的數(shù)據(jù),其只保存 sql 邏輯,不保存查詢的結(jié)果數(shù)據(jù)。
  注:
    可以理解成 java 的封裝好的一段方法,直接調(diào)用即可。

(2)格式:

【創(chuàng)建視圖】
    CREATE VIEW 視圖名
    AS
    查詢語(yǔ)句;
    
【使用視圖(與使用普通表類似)】
    SELECT *
    FROM 視圖名

【舉例:】
    CREATE VIEW testView
    AS
    SELECT * 
    FROM DEPT;
    
    SELECT *
    FROM testView;
    
【修改視圖:(方式一)】
    -- 若視圖存在則修改,若視圖不存在則創(chuàng)建
    CREATE OR REPLACE VIEW 視圖名
    AS
    查詢語(yǔ)句;
    
【修改視圖:(方式二)】
    ALTER VIEW 視圖名
    AS
    查詢語(yǔ)句;
    
【刪除視圖:】
    drop view 視圖名;

(3)好處:
  可以重用 sql 語(yǔ)句。
  簡(jiǎn)化復(fù)雜的 sql 操作,不必清楚查詢細(xì)節(jié)。
  保護(hù)數(shù)據(jù),提高安全性。

12、變量

(1)系統(tǒng)變量:變量由系統(tǒng)提供??梢约?xì)分為 全局變量(global,針對(duì)數(shù)據(jù)庫(kù)的所有連接))以及 會(huì)話變量(session,默認(rèn),僅針對(duì)當(dāng)前連接)。

【查看當(dāng)前所有的變量:】
    show [global | session] variables;

【查看部分變量:】
    show [global | session] variables like '%transaction%';

【查看具體的變量:】
     select @@[global | session].變量名;
 
 【設(shè)置具體的變量】
     set [global | session] 變量名 = 值;
     或者
     set @@[global | session].變量名;

(2)自定義變量:變量由用戶自定義??梢约?xì)分為 用戶變量(針對(duì)當(dāng)前連接,聲明的位置任意)以及 局部變量(僅在begin ~ end 塊中使用,且聲明的位置為 begin ~ end 塊的第一句話)。

========================用戶變量===========================
【聲明用戶變量并賦值:(三種方式)】
    set @變量名=值;
    set @變量名:=值;
    select @變量名:=值;

【賦值給用戶變量:(通過select into)】
    select 字段 into @變量名
    from 表;

【查看用戶變量值:】
select @變量名;

【舉例:】
    select count(*) into @count
    from dept;
    
    select @count;
    
========================局部變量===========================
【聲明局部變量:】
    declare 變量名 類型;
    declare 變量名 類型 default 值;

【局部變量賦值:(先聲明再賦值,直接賦值會(huì)出錯(cuò))】
    set 變量名=值;
    set 變量名:=值;
    
    select 字段 into 變量名
    from 表;
    
【查看用戶變量值:】
    select 變量名;

13、存儲(chǔ)過程

(1)存儲(chǔ)過程:
  指的是 一組預(yù)先編譯好的 sql 語(yǔ)句的集合,可以理解成批處理語(yǔ)句。類似于 Java 中的方法,使用時(shí)調(diào)用方法名即可。

(2)好處:
  提高了代碼的重用性。
  簡(jiǎn)化操作。
  減少了編譯次數(shù)、與數(shù)據(jù)庫(kù)交互的次數(shù),提高了效率。

(3)語(yǔ)法:

【創(chuàng)建存儲(chǔ)過程:】
    DELIMITER $
    CREATE PROCEDURE 存儲(chǔ)過程名(參數(shù)列表)
    BEGIN
        存儲(chǔ)過程體(一組合法的 sql 語(yǔ)句)
    END $
    DELIMITER ;
注:
    參數(shù)列表分三個(gè)部分,分別為 參數(shù)模式、參數(shù)名、參數(shù)類型
    參數(shù)模式:IN、OUT、INOUT。
        IN:指該參數(shù)可以作為輸入,即接收值(默認(rèn))。
        OUT:指該參數(shù)可以作為輸出,即返回值。
       INOUT:指該參數(shù)即可作為輸入、又可作為輸出。
   
    存儲(chǔ)過程體中每條語(yǔ)句必須以分號(hào) ; 結(jié)尾。
    DELIMITER 用于設(shè)置結(jié)束標(biāo)記,用于存儲(chǔ)過程末尾,執(zhí)行到標(biāo)記處則存儲(chǔ)過程結(jié)束。
    
【調(diào)用存儲(chǔ)過程:】
    CALL 存儲(chǔ)過程名(參數(shù)列表);
    
【刪除存儲(chǔ)過程:】
    DROP PROCEDURE 存儲(chǔ)過程名;

【查看存儲(chǔ)過程結(jié)構(gòu):】
    SHOW CREATE PROCEDURE 存儲(chǔ)過程名;

(4)舉例:

# 創(chuàng)建一個(gè) user 表,若已經(jīng)存在該表,先刪除
DROP TABLE IF EXISTS user;
CREATE TABLE user(
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(20),
    password VARCHAR(20)
);

# 用于設(shè)置結(jié)束標(biāo)記,此處 sql 結(jié)束標(biāo)記有 ; 改為 $
DELIMITER $

# 創(chuàng)建存儲(chǔ)過程(無(wú)參),用于向 user 表中插入 5 個(gè)數(shù)據(jù)
DROP PROCEDURE IF EXISTS user_no_parameter $
CREATE PROCEDURE user_no_parameter()
BEGIN
    INSERT INTO USER(name, password) VALUES('tom', 'tom123'),('jarry', 'jarry123'),('jack', 'jack123'),('tim', 'tim123'),('rose', 'rose123');
END $

# 創(chuàng)建有參存儲(chǔ)過程,根據(jù)輸入的用戶名,找到相應(yīng)的密碼,并返回該用戶的 id。
DROP PROCEDURE IF EXISTS user_parameter $
CREATE PROCEDURE user_parameter(IN name VARCHAR(20), OUT password VARCHAR(20), INOUT id INT)
BEGIN
    SELECT user.password, user.id INTO password, id
    FROM user
    WHERE user.name = name;
END $

# 用于設(shè)置結(jié)束標(biāo)記,此處 sql 結(jié)束標(biāo)記有 $ 改為 ;
DELIMITER ;

# 調(diào)用無(wú)參存儲(chǔ)過程
CALL user_no_parameter();

# 查看當(dāng)前表數(shù)據(jù)
SELECT * FROM user;

# 調(diào)用有參存儲(chǔ)過程
set @id = 0;
CALL user_parameter('jack', @password, @id);

# 查看有參存儲(chǔ)過程執(zhí)行后的結(jié)果
SELECT @password, @id;

14、函數(shù)

(1)函數(shù):
  與存儲(chǔ)過程類似,也是一組預(yù)先編譯好的 sql 語(yǔ)句的集合。
注:
  與存儲(chǔ)過程的區(qū)別:
    存儲(chǔ)過程可以沒有返回值,可以有多個(gè)返回值,適合進(jìn)行批處理(批量插入、刪除等)。
    函數(shù)有且僅有一個(gè)返回值,一般用于處理數(shù)據(jù)并返回一個(gè)結(jié)果。

(2)語(yǔ)法:

【創(chuàng)建函數(shù):】
    DELIMITER $
    CREATE FUNCTION 函數(shù)名(參數(shù)列表) RETURNS 返回類型
    BEGIN
        函數(shù)體(一組合法的 sql 語(yǔ)句)
    END $
    DELIMITER ;
注:
    參數(shù)列表分兩個(gè)部分,分別為 參數(shù)名、參數(shù)類型。
    函數(shù)體必須包含 return 語(yǔ)句。
    
【調(diào)用函數(shù):】
    SELECT 函數(shù)名(參數(shù)列表);
    
【查看函數(shù):】
    DROP FUNCTION 函數(shù)名;

【刪除函數(shù):】
    SHOW CREATE FUNCTION 函數(shù)名;

(3)舉例:

# 用于設(shè)置結(jié)束標(biāo)記,此處 sql 結(jié)束標(biāo)記有 ; 改為 $
DELIMITER $

# 創(chuàng)建無(wú)參函數(shù),若函數(shù)已存在,則先刪除再創(chuàng)建
DROP FUNCTION IF EXISTS test1 $
CREATE FUNCTION test1() RETURNS INT
BEGIN
    DECLARE a INT DEFAULT 10;
    DECLARE b INT DEFAULT 10;
    return  a + b;
END $

# 創(chuàng)建有參函數(shù),若函數(shù)已存在,則先刪除再創(chuàng)建
DROP FUNCTION IF EXISTS test2 $
CREATE FUNCTION test2(a INT, b INT) RETURNS INT
BEGIN
    RETURN a - b;
END $

# 用于設(shè)置結(jié)束標(biāo)記,此處 sql 結(jié)束標(biāo)記有 $ 改為 ;
DELIMITER ;

# 調(diào)用無(wú)參函數(shù)
SELECT test1();

# 調(diào)用有參函數(shù)
SELECT test2(20, 10);

注:
  若出現(xiàn)錯(cuò)誤 ERROR 1418 (HY000),修改 log_bin_trust_function_creators 值即可。

【錯(cuò)誤:】
    ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)

【解決:】
    SET GLOBAL log_bin_trust_function_creators = 1;

15、流程控制語(yǔ)句

(1)IF 語(yǔ)句

【語(yǔ)法1:(IF 函數(shù))】
    IF(表達(dá)式1, 結(jié)果1, 結(jié)果2);
注:
    表達(dá)式 1 成立,則返回 結(jié)果1.
    表達(dá)式 1 不成立,則返回 結(jié)果2.
    
【語(yǔ)法2:需要寫在 BEGIN - END 中】
    BEGIN
        IF 表達(dá)式 1 THEN 結(jié)果 1;
        ELSEIF 表達(dá)式 2 THEN 結(jié)果 2;
        ELSE 結(jié)果 3;
        END IF;
    END
    
【舉例:】
    DELIMITER $
    DROP FUNCTION IF EXISTS test3 $
    CREATE FUNCTION test3() RETURNS INT
    BEGIN
        IF 2 > 3 THEN RETURN 3;
        ELSEIF 2 > 4 THEN RETURN 4;
        ELSE RETURN 5;
        END IF;    
    END $
    DELIMITER ;
    
    SELECT test3() value1, IF(2 > 3, 2, 3) value2;

(2)CASE 語(yǔ)句

【語(yǔ)法1:相當(dāng)于 Java 中的 switch 語(yǔ)句】
    CASE 表達(dá)式 | 變量
    WHEN 值 1 THEN 返回的結(jié)果 1 
    WHEN 值 2 THEN 返回的結(jié)果 2
    ELSE 返回的結(jié)果 3
    END
    
【語(yǔ)法2:相當(dāng)于 Java 中的 IF - ELSE 語(yǔ)句】
    CASE 
    WHEN 表達(dá)式 1 THEN 返回的結(jié)果 1
    WHEN 表達(dá)式 2 THEN 返回的結(jié)果 2
    ELSE 返回的結(jié)果 3
    END
    
【舉例:】
SELECT (
    CASE 2 + 3
    WHEN 2 THEN 2
    WHEN 3 THEN 3
    ELSE 4
    END
) value1,
(
    CASE 
    WHEN 2 > 3 THEN 2
    WHEN 2 < 3 THEN 3
    ELSE 4
    END
) value2;

(3)循環(huán)

【分類:需要放在 BEGIN - END 里】
    while、loop、repeat

【循環(huán)標(biāo)志:】
    iterate: 類似于 Java 中的 continue,結(jié)束本次循環(huán),進(jìn)行下一次循環(huán)。
    leave: 類似于 Java 中的 break,結(jié)束當(dāng)前所有的循環(huán)。
    
【while 語(yǔ)法:(先判斷再執(zhí)行循環(huán))】
BEGIN
   [標(biāo)簽:] WHILE 循環(huán)條件 DO
        循環(huán)體;
    END WHILE [標(biāo)簽];
END
    
【loop 語(yǔ)法:(沒有條件的死循環(huán),需使用 leave 退出)】
BEGIN
   [標(biāo)簽:] LOOP
        循環(huán)體;
    END LOOP [標(biāo)簽];
END
    
【repeat 語(yǔ)法:(先執(zhí)行循環(huán)再判斷)】
BEGIN
   [標(biāo)簽:] REPEAT
        循環(huán)體;
    UNTIL 結(jié)束循環(huán)的條件
    END REPEAT [標(biāo)簽];
END

【舉例:】
DELIMITER $

DROP PROCEDURE IF EXISTS test1 $
CREATE PROCEDURE test1(OUT a INT, OUT b INT, OUT c INT)
BEGIN
    # 測(cè)試 while 循環(huán),temp >= 10 時(shí)退出循環(huán)。
    DECLARE temp INT DEFAULT 0;
    testWhile: WHILE temp < 10 DO
        SET temp = temp + 1;
        # 當(dāng) temp = 8 時(shí),給 a 賦值并退出 while 循環(huán)
        IF temp = 8 THEN SET a = temp; LEAVE testWhile;
        END IF;
    END WHILE testWhile;
    
    # 測(cè)試 repeat 循環(huán), temp >= 10 時(shí)退出循環(huán)。
    SET temp = 0;
    testRepeat: REPEAT 
        SET temp = temp + 1;
        # 當(dāng) temp = 7 時(shí),給 b 賦值并退出 repeat 循環(huán)
        IF temp = 7 THEN SET b = temp; LEAVE testRepeat;
        END IF;
        # 注意 until 是循環(huán)結(jié)束條件
        UNTIL temp >= 10
    END REPEAT testRepeat;
    
    # 測(cè)試 loop 循環(huán)
    SET temp = 0;
    testLoop: LOOP
        SET temp = temp + 1;
        # 當(dāng) temp = 6 時(shí),給 c 賦值并退出 loop 循環(huán)
        IF temp = 6 THEN SET c = temp; LEAVE testLoop;
        END IF;
    END LOOP testLoop;
END $ 

DELIMITER ;

CALL test1(@a, @b, @c);

SELECT @a, @b, @c;

到此這篇關(guān)于mysql常見筆試題小結(jié)的文章就介紹到這了,更多相關(guān)mysql筆試題內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL常見面試題與答案整理

    這篇文章主要介紹了MySQL常見面試題與答案整理,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2020-04-17
  • Mysql版sql語(yǔ)句練習(xí)50題(小結(jié))

    這篇文章主要介紹了Mysql版sql語(yǔ)句練習(xí)50題,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2020-04-01
  • Mysql索引面試題的小結(jié)

    這篇文章主要介紹了Mysql索引面試題的小結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-10
  • MySQL常見面試題(小結(jié))

    這篇文章主要介紹了MySQL常見面試題(小結(jié)),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2020-02-17
  • 去BAT面試完的Mysql面試題總結(jié)

    這篇文章主要介紹了去BAT面試完的Mysql面試題總結(jié),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2019-12-19
  • 100道MySQL常見面試題總結(jié)(推薦)

    這篇文章主要介紹了100道MySQL常見面試題總結(jié),本文主要受眾為開發(fā)人員,所以不涉及到MySQL的服務(wù)部署等操作,且內(nèi)容較多,感興趣的可以了解一下
    2019-08-22
  • 20個(gè)MySQL經(jīng)典面試題(附答案)

    這篇文章主要介紹了20個(gè)MySQL經(jīng)典面試題的相關(guān)資料,并在下面整理好了答案,方便使用,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)
    2019-04-10
  • MySQL數(shù)據(jù)庫(kù)選擇題小結(jié)

    這篇文章主要介紹了MySQL數(shù)據(jù)庫(kù)選擇題小結(jié),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2021-02-07

最新評(píng)論