Hướng dẫn check table exists in mysql - bảng kiểm tra tồn tại trong mysql

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

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;
0

Lệnh
CALL sys.table_exists['Music', 'Albums', @table_type]; 
SELECT @table_type;
2

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;
1

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;
2

Lệnh

CALL sys.table_exists['Music', 'Albums', @table_type]; 
SELECT @table_type;
2

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:

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;
3

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;
4

Lệnh
CALL sys.table_exists['Music', 'Albums', @table_type]; 
SELECT @table_type;
2

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;
5

Trong 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;
6

Lệnh

CALL sys.table_exists['Music', 'Albums', @table_type]; 
SELECT @table_type;
9

Trong 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.

Làm thế nào bạn sẽ kiểm tra xem một bảng tồn tại trong mysql?

4.26 Quy trình Table_Exists []. Kiểm tra xem một bảng nhất định có tồn tại dưới dạng bảng thông thường, bảng tạm thời hay chế độ xem hay không. Quy trình trả về loại bảng trong một tham số ra. Nếu cả một bảng tạm thời và một bảng vĩnh viễn tồn tại với tên đã cho, tạm thời sẽ được trả về.table_exists[] Procedure. Tests whether a given table exists as a regular table, a TEMPORARY table, or a view. The procedure returns the table type in an OUT parameter. If both a temporary and a permanent table exist with the given name, TEMPORARY is returned.

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; ....
Cố gắng tạo lại bảng. ....
Không có điều khoản nếu không tồn tại ..

Làm thế nào để bạn kiểm tra xem một bảng tồn tại trong một lược đồ?

Làm thế nào để kiểm tra xem một bảng [hoặc chế độ xem] có tồn tại hay không và người dùng hiện tại có quyền truy cập vào nó không?Chọn tồn tại [chọn từ thông tin_schema.tables trong đó Table_schema = 'Schema_name' và Table_Name = 'Table_Name'];Lược đồ thông tin chủ yếu hữu ích để giữ di động trên các phiên bản chính và trên các RDBM khác nhau.SELECT EXISTS [ SELECT FROM information_schema. tables WHERE table_schema = 'schema_name' AND table_name = 'table_name' ]; The information schema is mainly useful to stay portable across major versions and across different RDBMS.

Làm thế nào để bạn kiểm tra xem một bảng tồn tại trong SQL Python?

Chọn TableName từ sqlite_master trong đó loại = 'bảng' và tablename = 'student';Sau đó, sử dụng phương thức fetchall [] trên biến đó để tạo danh sách các bảng chứa tên của mẫu được tìm thấy.Nếu danh sách trống thì bảng không tồn tại trong cơ sở dữ liệu.

Bài Viết Liên Quan

Chủ Đề