我希望能够从SHOW CREATE TABLE中查看用于调试目的的任何表的sql文本。准备好逃跑可以做到吗?
// doesn't work because table name is escaped as string
SHOW CREATE TABLE ?
//doesn't work, syntax is not allowed
SHOW CREATE TABLE (SELECT table_name FROM `INFORMATION_SCHEMA.tables` WHERE `TABLE_NAME`=?)
答案 0 :(得分:1)
您可以使用预备声明:
-- here goes your table name, could be parametrized to call from app
SET @tab_name = '`tab`';
SET @query = REPLACE('SHOW CREATE TABLE @tab_name', '@tab_name', @tab_name);
-- SELECT @query;
PREPARE stmt1 FROM @query;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
的 SqlFiddleDemo
强>
输出:
╔════════╦═════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╗
║ Table ║ Create Table ║
╠════════╬═════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╣
║ tab ║ CREATE TABLE `tab` ( `col1` int(11) DEFAULT NULL, `col2` datetime DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ║
╚════════╩═════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝
如果你需要每个表,你可以用循环或光标包装它。
警告:
您应该在应用程序层引用@tab_name
以避免SQL注入。