Có một số vấn đề cần lưu ý với câu trả lời ở đây:
1]
SET @test_table = 'test_table';
SET @test_db = NULL;
SET @does_table_exist = NULL;
CALL DoesTableExist[@test_table, @test_db, @does_table_exist];
SELECT @does_table_exist;
7 không bao gồm các bảng tạm thời.2] Sử dụng bất kỳ loại truy vấn
SET @test_table = 'test_table';
SET @test_db = NULL;
SET @does_table_exist = NULL;
CALL DoesTableExist[@test_table, @test_db, @does_table_exist];
SELECT @does_table_exist;
8 nào, tức là SET @test_table = 'test_table';
SET @test_db = NULL;
SET @does_table_exist = NULL;
CALL DoesTableExist[@test_table, @test_db, @does_table_exist];
SELECT @does_table_exist;
9, sẽ buộc trả về kết quả cho máy khách, đó là hành vi không mong muốn để kiểm tra xem bảng có tồn tại phía máy chủ, từ trong một quy trình được lưu trữ cũng trả về kết quả.3] Như một số người dùng đã đề cập, bạn phải cẩn thận với cách bạn sử dụng
/*
p_table_name is required
p_database_name is optional
if NULL is given for p_database_name, then it defaults to the currently selected database
p_does_table_exist
The @variable to save the result to
This procedure attempts to
SELECT NULL FROM `p_database_name`.`p_table_name` LIMIT 0;
If [SQLSTATE '42S02'] is raised, then
SET p_does_table_exist = 0
Else
SET p_does_table_exist = 1
Info on SQLSTATE '42S02' at:
//dev.mysql.com/doc/refman/5.7/en/server-error-reference.html#error_er_no_such_table
*/
DELIMITER $$
DROP PROCEDURE IF EXISTS DoesTableExist
$$
CREATE PROCEDURE DoesTableExist [
IN p_table_name VARCHAR[64],
IN p_database_name VARCHAR[64],
OUT p_does_table_exist TINYINT[1] UNSIGNED
]
BEGIN
/* 793441 is used in this procedure for ensuring that user variables have unique names */
DECLARE EXIT HANDLER FOR SQLSTATE '42S02'
BEGIN
SET p_does_table_exist = 0
;
END
;
IF p_table_name IS NULL THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'DoesTableExist received NULL for p_table_name.';
END IF;
/* redirect resultset to a dummy variable */
SET @test_select_sql_793441 = CONCAT[
"SET @dummy_var_793441 = ["
" SELECT"
" NULL"
" FROM ",
IF[
p_database_name IS NULL,
"",
CONCAT[
"`",
REPLACE[p_database_name, "`", "``"],
"`."
]
],
"`",
REPLACE[p_table_name, "`", "``"],
"`"
" LIMIT 0"
"]"
]
;
PREPARE _sql_statement FROM @test_select_sql_793441
;
SET @test_select_sql_793441 = NULL
;
EXECUTE _sql_statement
;
DEALLOCATE PREPARE _sql_statement
;
SET p_does_table_exist = 1
;
END
$$
DELIMITER ;
0.Nếu bạn làm điều gì đó như:
SET @table_exists = 0;
SET @table_exists = [SELECT 1 FROM test_table LIMIT 1];
Bạn sẽ không nhận được kết quả dự kiến nếu bảng có hàng bằng không.
Dưới đây là một quy trình được lưu trữ sẽ hoạt động cho tất cả các bảng [thậm chí là tạm thời].
Nó có thể được sử dụng như:
SET @test_table = 'test_table';
SET @test_db = NULL;
SET @does_table_exist = NULL;
CALL DoesTableExist[@test_table, @test_db, @does_table_exist];
SELECT @does_table_exist;
Mật mã:
/*
p_table_name is required
p_database_name is optional
if NULL is given for p_database_name, then it defaults to the currently selected database
p_does_table_exist
The @variable to save the result to
This procedure attempts to
SELECT NULL FROM `p_database_name`.`p_table_name` LIMIT 0;
If [SQLSTATE '42S02'] is raised, then
SET p_does_table_exist = 0
Else
SET p_does_table_exist = 1
Info on SQLSTATE '42S02' at:
//dev.mysql.com/doc/refman/5.7/en/server-error-reference.html#error_er_no_such_table
*/
DELIMITER $$
DROP PROCEDURE IF EXISTS DoesTableExist
$$
CREATE PROCEDURE DoesTableExist [
IN p_table_name VARCHAR[64],
IN p_database_name VARCHAR[64],
OUT p_does_table_exist TINYINT[1] UNSIGNED
]
BEGIN
/* 793441 is used in this procedure for ensuring that user variables have unique names */
DECLARE EXIT HANDLER FOR SQLSTATE '42S02'
BEGIN
SET p_does_table_exist = 0
;
END
;
IF p_table_name IS NULL THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'DoesTableExist received NULL for p_table_name.';
END IF;
/* redirect resultset to a dummy variable */
SET @test_select_sql_793441 = CONCAT[
"SET @dummy_var_793441 = ["
" SELECT"
" NULL"
" FROM ",
IF[
p_database_name IS NULL,
"",
CONCAT[
"`",
REPLACE[p_database_name, "`", "``"],
"`."
]
],
"`",
REPLACE[p_table_name, "`", "``"],
"`"
" LIMIT 0"
"]"
]
;
PREPARE _sql_statement FROM @test_select_sql_793441
;
SET @test_select_sql_793441 = NULL
;
EXECUTE _sql_statement
;
DEALLOCATE PREPARE _sql_statement
;
SET p_does_table_exist = 1
;
END
$$
DELIMITER ;
Làm thế nào để bạn kiểm tra rằng bảng đã tồn tại?
Cách kiểm tra xem một bảng đã tồn tại trước khi tạo nó trong ....
Kiểm tra xem bảng bây giờ có tồn tại không. Chúng ta có thể sử dụng thủ tục sys.table_exists [] để kiểm tra xem bảng có tồn tại không: gọi sys.table_exists ['test', 't1', @table_type]; Chọn @Table_Type; ....
Example:
CALL sys.table_exists['Music', 'Albums', @table_type];
SELECT @table_type;
Result:
+-------------+ | @table_type | +-------------+ | BASE TABLE | +-------------+
Cố gắng tạo lại bảng. ....
Bảng /*
p_table_name is required
p_database_name is optional
if NULL is given for p_database_name, then it defaults to the currently selected database
p_does_table_exist
The @variable to save the result to
This procedure attempts to
SELECT NULL FROM `p_database_name`.`p_table_name` LIMIT 0;
If [SQLSTATE '42S02'] is raised, then
SET p_does_table_exist = 0
Else
SET p_does_table_exist = 1
Info on SQLSTATE '42S02' at:
//dev.mysql.com/doc/refman/5.7/en/server-error-reference.html#error_er_no_such_table
*/
DELIMITER $$
DROP PROCEDURE IF EXISTS DoesTableExist
$$
CREATE PROCEDURE DoesTableExist [
IN p_table_name VARCHAR[64],
IN p_database_name VARCHAR[64],
OUT p_does_table_exist TINYINT[1] UNSIGNED
]
BEGIN
/* 793441 is used in this procedure for ensuring that user variables have unique names */
DECLARE EXIT HANDLER FOR SQLSTATE '42S02'
BEGIN
SET p_does_table_exist = 0
;
END
;
IF p_table_name IS NULL THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'DoesTableExist received NULL for p_table_name.';
END IF;
/* redirect resultset to a dummy variable */
SET @test_select_sql_793441 = CONCAT[
"SET @dummy_var_793441 = ["
" SELECT"
" NULL"
" FROM ",
IF[
p_database_name IS NULL,
"",
CONCAT[
"`",
REPLACE[p_database_name, "`", "``"],
"`."
]
],
"`",
REPLACE[p_table_name, "`", "``"],
"`"
" LIMIT 0"
"]"
]
;
PREPARE _sql_statement FROM @test_select_sql_793441
;
SET @test_select_sql_793441 = NULL
;
EXECUTE _sql_statement
;
DEALLOCATE PREPARE _sql_statement
;
SET p_does_table_exist = 1
;
END
$$
DELIMITER ;
6
/*
p_table_name is required
p_database_name is optional
if NULL is given for p_database_name, then it defaults to the currently selected database
p_does_table_exist
The @variable to save the result to
This procedure attempts to
SELECT NULL FROM `p_database_name`.`p_table_name` LIMIT 0;
If [SQLSTATE '42S02'] is raised, then
SET p_does_table_exist = 0
Else
SET p_does_table_exist = 1
Info on SQLSTATE '42S02' at:
//dev.mysql.com/doc/refman/5.7/en/server-error-reference.html#error_er_no_such_table
*/
DELIMITER $$
DROP PROCEDURE IF EXISTS DoesTableExist
$$
CREATE PROCEDURE DoesTableExist [
IN p_table_name VARCHAR[64],
IN p_database_name VARCHAR[64],
OUT p_does_table_exist TINYINT[1] UNSIGNED
]
BEGIN
/* 793441 is used in this procedure for ensuring that user variables have unique names */
DECLARE EXIT HANDLER FOR SQLSTATE '42S02'
BEGIN
SET p_does_table_exist = 0
;
END
;
IF p_table_name IS NULL THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'DoesTableExist received NULL for p_table_name.';
END IF;
/* redirect resultset to a dummy variable */
SET @test_select_sql_793441 = CONCAT[
"SET @dummy_var_793441 = ["
" SELECT"
" NULL"
" FROM ",
IF[
p_database_name IS NULL,
"",
CONCAT[
"`",
REPLACE[p_database_name, "`", "``"],
"`."
]
],
"`",
REPLACE[p_table_name, "`", "``"],
"`"
" LIMIT 0"
"]"
]
;
PREPARE _sql_statement FROM @test_select_sql_793441
;
SET @test_select_sql_793441 = NULL
;
EXECUTE _sql_statement
;
DEALLOCATE PREPARE _sql_statement
;
SET p_does_table_exist = 1
;
END
$$
DELIMITER ;
Một cách khác để kiểm tra xem một bảng tồn tại là truy vấn bảng
/*
p_table_name is required
p_database_name is optional
if NULL is given for p_database_name, then it defaults to the currently selected database
p_does_table_exist
The @variable to save the result to
This procedure attempts to
SELECT NULL FROM `p_database_name`.`p_table_name` LIMIT 0;
If [SQLSTATE '42S02'] is raised, then
SET p_does_table_exist = 0
Else
SET p_does_table_exist = 1
Info on SQLSTATE '42S02' at:
//dev.mysql.com/doc/refman/5.7/en/server-error-reference.html#error_er_no_such_table
*/
DELIMITER $$
DROP PROCEDURE IF EXISTS DoesTableExist
$$
CREATE PROCEDURE DoesTableExist [
IN p_table_name VARCHAR[64],
IN p_database_name VARCHAR[64],
OUT p_does_table_exist TINYINT[1] UNSIGNED
]
BEGIN
/* 793441 is used in this procedure for ensuring that user variables have unique names */
DECLARE EXIT HANDLER FOR SQLSTATE '42S02'
BEGIN
SET p_does_table_exist = 0
;
END
;
IF p_table_name IS NULL THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'DoesTableExist received NULL for p_table_name.';
END IF;
/* redirect resultset to a dummy variable */
SET @test_select_sql_793441 = CONCAT[
"SET @dummy_var_793441 = ["
" SELECT"
" NULL"
" FROM ",
IF[
p_database_name IS NULL,
"",
CONCAT[
"`",
REPLACE[p_database_name, "`", "``"],
"`."
]
],
"`",
REPLACE[p_table_name, "`", "``"],
"`"
" LIMIT 0"
"]"
]
;
PREPARE _sql_statement FROM @test_select_sql_793441
;
SET @test_select_sql_793441 = NULL
;
EXECUTE _sql_statement
;
DEALLOCATE PREPARE _sql_statement
;
SET p_does_table_exist = 1
;
END
$$
DELIMITER ;
6:SELECT
TABLE_SCHEMA,
TABLE_NAME,
TABLE_TYPE
FROM
information_schema.TABLES
WHERE
TABLE_SCHEMA LIKE 'music' AND
TABLE_TYPE LIKE 'BASE TABLE' AND
TABLE_NAME = 'Artists';
Kết quả:
+--------------+------------+------------+ | TABLE_SCHEMA | TABLE_NAME | TABLE_TYPE | +--------------+------------+------------+ | Music | Artists | BASE TABLE | +--------------+------------+------------+
Trong trường hợp này, tôi đã trả lại bảng cơ sở gọi là
/*
p_table_name is required
p_database_name is optional
if NULL is given for p_database_name, then it defaults to the currently selected database
p_does_table_exist
The @variable to save the result to
This procedure attempts to
SELECT NULL FROM `p_database_name`.`p_table_name` LIMIT 0;
If [SQLSTATE '42S02'] is raised, then
SET p_does_table_exist = 0
Else
SET p_does_table_exist = 1
Info on SQLSTATE '42S02' at:
//dev.mysql.com/doc/refman/5.7/en/server-error-reference.html#error_er_no_such_table
*/
DELIMITER $$
DROP PROCEDURE IF EXISTS DoesTableExist
$$
CREATE PROCEDURE DoesTableExist [
IN p_table_name VARCHAR[64],
IN p_database_name VARCHAR[64],
OUT p_does_table_exist TINYINT[1] UNSIGNED
]
BEGIN
/* 793441 is used in this procedure for ensuring that user variables have unique names */
DECLARE EXIT HANDLER FOR SQLSTATE '42S02'
BEGIN
SET p_does_table_exist = 0
;
END
;
IF p_table_name IS NULL THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'DoesTableExist received NULL for p_table_name.';
END IF;
/* redirect resultset to a dummy variable */
SET @test_select_sql_793441 = CONCAT[
"SET @dummy_var_793441 = ["
" SELECT"
" NULL"
" FROM ",
IF[
p_database_name IS NULL,
"",
CONCAT[
"`",
REPLACE[p_database_name, "`", "``"],
"`."
]
],
"`",
REPLACE[p_table_name, "`", "``"],
"`"
" LIMIT 0"
"]"
]
;
PREPARE _sql_statement FROM @test_select_sql_793441
;
SET @test_select_sql_793441 = NULL
;
EXECUTE _sql_statement
;
DEALLOCATE PREPARE _sql_statement
;
SET p_does_table_exist = 1
;
END
$$
DELIMITER ;
8 từ cơ sở dữ liệu được gọi là /*
p_table_name is required
p_database_name is optional
if NULL is given for p_database_name, then it defaults to the currently selected database
p_does_table_exist
The @variable to save the result to
This procedure attempts to
SELECT NULL FROM `p_database_name`.`p_table_name` LIMIT 0;
If [SQLSTATE '42S02'] is raised, then
SET p_does_table_exist = 0
Else
SET p_does_table_exist = 1
Info on SQLSTATE '42S02' at:
//dev.mysql.com/doc/refman/5.7/en/server-error-reference.html#error_er_no_such_table
*/
DELIMITER $$
DROP PROCEDURE IF EXISTS DoesTableExist
$$
CREATE PROCEDURE DoesTableExist [
IN p_table_name VARCHAR[64],
IN p_database_name VARCHAR[64],
OUT p_does_table_exist TINYINT[1] UNSIGNED
]
BEGIN
/* 793441 is used in this procedure for ensuring that user variables have unique names */
DECLARE EXIT HANDLER FOR SQLSTATE '42S02'
BEGIN
SET p_does_table_exist = 0
;
END
;
IF p_table_name IS NULL THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'DoesTableExist received NULL for p_table_name.';
END IF;
/* redirect resultset to a dummy variable */
SET @test_select_sql_793441 = CONCAT[
"SET @dummy_var_793441 = ["
" SELECT"
" NULL"
" FROM ",
IF[
p_database_name IS NULL,
"",
CONCAT[
"`",
REPLACE[p_database_name, "`", "``"],
"`."
]
],
"`",
REPLACE[p_table_name, "`", "``"],
"`"
" LIMIT 0"
"]"
]
;
PREPARE _sql_statement FROM @test_select_sql_793441
;
SET @test_select_sql_793441 = NULL
;
EXECUTE _sql_statement
;
DEALLOCATE PREPARE _sql_statement
;
SET p_does_table_exist = 1
;
END
$$
DELIMITER ;
9. Truy vấn điều này mà không cần lọc kết quả bằng CALL sys.table_exists['Music', 'Albums', @table_type];
SELECT @table_type;
0 trả về các bảng cơ sở từ tất cả các cơ sở dữ liệu. Truy vấn nó mà không lọc bằng CALL sys.table_exists['Music', 'Albums', @table_type];
SELECT @table_type;
1 trả về tất cả các loại bảng.Nếu chúng tôi không cần tất cả thông tin đó, chúng tôi có thể làm điều này:
SELECT EXISTS [
SELECT
TABLE_NAME
FROM
information_schema.TABLES
WHERE
TABLE_SCHEMA LIKE 'music' AND
TABLE_TYPE LIKE 'BASE TABLE' AND
TABLE_NAME = 'Artists'
];
Kết quả:
1
Hoặc chúng ta có thể nhận được số lượng:
SELECT COUNT[TABLE_NAME]
FROM
information_schema.TABLES
WHERE
TABLE_SCHEMA LIKE 'music' AND
TABLE_TYPE LIKE 'BASE TABLE' AND
TABLE_NAME = 'Artists';
Kết quả:
SET @test_table = 'test_table';
SET @test_db = NULL;
SET @does_table_exist = NULL;
CALL DoesTableExist[@test_table, @test_db, @does_table_exist];
SELECT @does_table_exist;
0Lệnh CALL sys.table_exists['Music', 'Albums', @table_type];
SELECT @table_type;
2
CALL sys.table_exists['Music', 'Albums', @table_type];
SELECT @table_type;
Lệnh
CALL sys.table_exists['Music', 'Albums', @table_type];
SELECT @table_type;
2 liệt kê các bảng, chuỗi, trình tự và lượt xem không phải là cơ sở dữ liệu MySQL nhất định. Chúng ta có thể sử dụng mệnh đề CALL sys.table_exists['Music', 'Albums', @table_type];
SELECT @table_type;
5 để thu hẹp nó thành một loại đã cho.Chúng tôi cũng có thể sử dụng công cụ sửa đổi
CALL sys.table_exists['Music', 'Albums', @table_type];
SELECT @table_type;
6 để trả về cột thứ hai hiển thị loại:SET @test_table = 'test_table';
SET @test_db = NULL;
SET @does_table_exist = NULL;
CALL DoesTableExist[@test_table, @test_db, @does_table_exist];
SELECT @does_table_exist;
1Kết quả:
SET @test_table = 'test_table';
SET @test_db = NULL;
SET @does_table_exist = NULL;
CALL DoesTableExist[@test_table, @test_db, @does_table_exist];
SELECT @does_table_exist;
2Lệnh
CALL sys.table_exists['Music', 'Albums', @table_type];
SELECT @table_type;
2Lệnh CALL sys.table_exists['Music', 'Albums', @table_type];
SELECT @table_type;
2 liệt kê các bảng, chuỗi, trình tự và lượt xem không phải là cơ sở dữ liệu MySQL nhất định. Chúng ta có thể sử dụng mệnh đề CALL sys.table_exists['Music', 'Albums', @table_type];
SELECT @table_type;
5 để thu hẹp nó thành một loại đã cho.
CALL sys.table_exists['Music', 'Albums', @table_type];
SELECT @table_type;
CALL sys.table_exists['Music', 'Albums', @table_type];
SELECT @table_type;
Chúng tôi cũng có thể sử dụng công cụ sửa đổi
CALL sys.table_exists['Music', 'Albums', @table_type];
SELECT @table_type;
6 để trả về cột thứ hai hiển thị loại:Example:
SET @test_table = 'test_table';
SET @test_db = NULL;
SET @does_table_exist = NULL;
CALL DoesTableExist[@test_table, @test_db, @does_table_exist];
SELECT @does_table_exist;
3Kết quả:
SET @test_table = 'test_table';
SET @test_db = NULL;
SET @does_table_exist = NULL;
CALL DoesTableExist[@test_table, @test_db, @does_table_exist];
SELECT @does_table_exist;
4Lệnh CALL sys.table_exists['Music', 'Albums', @table_type];
SELECT @table_type;
2
CALL sys.table_exists['Music', 'Albums', @table_type];
SELECT @table_type;
Lệnh
CALL sys.table_exists['Music', 'Albums', @table_type];
SELECT @table_type;
2 liệt kê các bảng, chuỗi, trình tự và lượt xem không phải là cơ sở dữ liệu MySQL nhất định. Chúng ta có thể sử dụng mệnh đề CALL sys.table_exists['Music', 'Albums', @table_type];
SELECT @table_type;
5 để thu hẹp nó thành một loại đã cho.Chúng tôi cũng có thể sử dụng công cụ sửa đổi
CALL sys.table_exists['Music', 'Albums', @table_type];
SELECT @table_type;
6 để trả về cột thứ hai hiển thị loại:SET @test_table = 'test_table';
SET @test_db = NULL;
SET @does_table_exist = NULL;
CALL DoesTableExist[@test_table, @test_db, @does_table_exist];
SELECT @does_table_exist;
5Trong trường hợp này, tên cơ sở dữ liệu là
/*
p_table_name is required
p_database_name is optional
if NULL is given for p_database_name, then it defaults to the currently selected database
p_does_table_exist
The @variable to save the result to
This procedure attempts to
SELECT NULL FROM `p_database_name`.`p_table_name` LIMIT 0;
If [SQLSTATE '42S02'] is raised, then
SET p_does_table_exist = 0
Else
SET p_does_table_exist = 1
Info on SQLSTATE '42S02' at:
//dev.mysql.com/doc/refman/5.7/en/server-error-reference.html#error_er_no_such_table
*/
DELIMITER $$
DROP PROCEDURE IF EXISTS DoesTableExist
$$
CREATE PROCEDURE DoesTableExist [
IN p_table_name VARCHAR[64],
IN p_database_name VARCHAR[64],
OUT p_does_table_exist TINYINT[1] UNSIGNED
]
BEGIN
/* 793441 is used in this procedure for ensuring that user variables have unique names */
DECLARE EXIT HANDLER FOR SQLSTATE '42S02'
BEGIN
SET p_does_table_exist = 0
;
END
;
IF p_table_name IS NULL THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'DoesTableExist received NULL for p_table_name.';
END IF;
/* redirect resultset to a dummy variable */
SET @test_select_sql_793441 = CONCAT[
"SET @dummy_var_793441 = ["
" SELECT"
" NULL"
" FROM ",
IF[
p_database_name IS NULL,
"",
CONCAT[
"`",
REPLACE[p_database_name, "`", "``"],
"`."
]
],
"`",
REPLACE[p_table_name, "`", "``"],
"`"
" LIMIT 0"
"]"
]
;
PREPARE _sql_statement FROM @test_select_sql_793441
;
SET @test_select_sql_793441 = NULL
;
EXECUTE _sql_statement
;
DEALLOCATE PREPARE _sql_statement
;
SET p_does_table_exist = 1
;
END
$$
DELIMITER ;
9, và do đó cột đầu tiên là CALL sys.table_exists['Music', 'Albums', @table_type];
SELECT @table_type;
8.Result:
SET @test_table = 'test_table';
SET @test_db = NULL;
SET @does_table_exist = NULL;
CALL DoesTableExist[@test_table, @test_db, @does_table_exist];
SELECT @does_table_exist;
6Lệnh
CALL sys.table_exists['Music', 'Albums', @table_type];
SELECT @table_type;
9Trong MySQL, lệnh
CALL sys.table_exists['Music', 'Albums', @table_type];
SELECT @table_type;
9 tương tự như lệnh CALL sys.table_exists['Music', 'Albums', @table_type];
SELECT @table_type;
2 nhưng cung cấp thông tin rộng rãi hơn & nbsp; về mỗi bảng [không phải -____ 23].Máy khách
+-------------+ | @table_type | +-------------+ | BASE TABLE | +-------------+3
Một cách khác để kiểm tra các bảng trong cơ sở dữ liệu MySQL là sử dụng máy khách +-------------+
| @table_type |
+-------------+
| BASE TABLE |
+-------------+
3.
Để sử dụng tiện ích này, hãy mở một cửa sổ dấu nhắc/thiết bị đầu cuối dòng lệnh và chạy như sau:
Hãy chắc chắn thay thế
/*
p_table_name is required
p_database_name is optional
if NULL is given for p_database_name, then it defaults to the currently selected database
p_does_table_exist
The @variable to save the result to
This procedure attempts to
SELECT NULL FROM `p_database_name`.`p_table_name` LIMIT 0;
If [SQLSTATE '42S02'] is raised, then
SET p_does_table_exist = 0
Else
SET p_does_table_exist = 1
Info on SQLSTATE '42S02' at:
//dev.mysql.com/doc/refman/5.7/en/server-error-reference.html#error_er_no_such_table
*/
DELIMITER $$
DROP PROCEDURE IF EXISTS DoesTableExist
$$
CREATE PROCEDURE DoesTableExist [
IN p_table_name VARCHAR[64],
IN p_database_name VARCHAR[64],
OUT p_does_table_exist TINYINT[1] UNSIGNED
]
BEGIN
/* 793441 is used in this procedure for ensuring that user variables have unique names */
DECLARE EXIT HANDLER FOR SQLSTATE '42S02'
BEGIN
SET p_does_table_exist = 0
;
END
;
IF p_table_name IS NULL THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'DoesTableExist received NULL for p_table_name.';
END IF;
/* redirect resultset to a dummy variable */
SET @test_select_sql_793441 = CONCAT[
"SET @dummy_var_793441 = ["
" SELECT"
" NULL"
" FROM ",
IF[
p_database_name IS NULL,
"",
CONCAT[
"`",
REPLACE[p_database_name, "`", "``"],
"`."
]
],
"`",
REPLACE[p_table_name, "`", "``"],
"`"
" LIMIT 0"
"]"
]
;
PREPARE _sql_statement FROM @test_select_sql_793441
;
SET @test_select_sql_793441 = NULL
;
EXECUTE _sql_statement
;
DEALLOCATE PREPARE _sql_statement
;
SET p_does_table_exist = 1
;
END
$$
DELIMITER ;
9 bằng cơ sở dữ liệu mà bạn quan tâm và +-------------+ | @table_type | +-------------+ | BASE TABLE | +-------------+6 với người dùng hiện hành.
+-------------+ | @table_type | +-------------+ | BASE TABLE | +-------------+7 bit dẫn đến người dùng được nhắc nhận mật khẩu.