MySQL存儲過程是一種可重復(fù)使用的代碼塊,它可以被多次調(diào)用。當(dāng)我們編寫存儲過程時(shí),有時(shí)需要判斷一個(gè)表是否存在,如果存在就執(zhí)行某些操作,如果不存在就執(zhí)行其他的操作。
這時(shí)我們可以使用MySQL提供的內(nèi)置函數(shù)information_schema.tables
,它可以查詢數(shù)據(jù)庫中的所有表信息。
DELIMITER $$ CREATE PROCEDURE checkTableExist(IN tableName VARCHAR(255)) BEGIN DECLARE tableCount INT; SELECT COUNT(*) INTO tableCount FROM information_schema.tables WHERE table_schema = DATABASE() AND table_name = tableName; IF tableCount >0 THEN -- 存在該表,執(zhí)行操作 -- TODO: 編寫需要執(zhí)行的代碼 SELECT CONCAT('Table ', tableName, ' exists.') AS result; ELSE -- 不存在該表,執(zhí)行其他操作 -- TODO: 編寫需要執(zhí)行的代碼 SELECT CONCAT('Table ', tableName, ' does not exist.') AS result; END IF; END $$
在上面的代碼中,我們創(chuàng)建了一個(gè)存儲過程checkTableExist
,它接收一個(gè)參數(shù)tableName
,表示需要檢查的表名。
首先我們聲明了一個(gè)變量tableCount
,用來存儲需要查詢的表的數(shù)量。然后我們使用information_schema.tables
查詢數(shù)據(jù)庫中與tableName
匹配的表的數(shù)量,并將結(jié)果賦值給tableCount
。
接下來我們使用IF...THEN...ELSE...
語句判斷tableCount
的值。如果該值大于0,說明該表存在,我們就執(zhí)行相應(yīng)的操作。如果該值等于0,說明該表不存在,我們就執(zhí)行其他的操作。
最后我們使用SELECT
語句返回查詢結(jié)果,表示表是否存在。
使用這個(gè)存儲過程可以方便地判斷某個(gè)表是否存在,避免了手動查詢的繁瑣操作。