gpt4 book ai didi

mysql动态建表

转载 作者:行者123 更新时间:2023-11-30 21:52:17 26 4
gpt4 key购买 nike

我正在 mysql 上创建一个数据库。首先创建主表,每个表平均有 30 列。而日志表的标准是引用表的pk加上每列*2。像这样:

引用表:

Field   |   Type      |   Null   |   Key   |   Default   |   Extra
--------+-------------+----------+---------+-------------+----------------
TableID | int(11) | No | PRI | Null | auto_increment
Col1 | varchar(50) | No | | Null |

日志表:

Field       |   Type      |   Null   |   Key   |   Default   |   Extra
------------+-------------+----------+---------+-------------+----------------
LogTableID | int(11) | No | PRI | Null | auto_increment
TableID | int(11) | No | MUL | Null |
NewCol1 | varchar(50) | No | | Null |
UpdatedCol1 | varchar(50) | No | | Null |

现在我想要的是创建一个过程,在该过程中我将表名作为参数传递并生成表日志查询的创建并执行它。

执行此操作的最佳方法是什么?

最佳答案

要使字符串表示表(或数据库)名称,您需要将查询字符串与变量连接起来,并在存储过程中准备/执行语句。这是一个基本示例。

-- DROP PROCEDURE IF EXISTS createLogTable;
DELIMITER //
CREATE PROCEDURE createLogTable(tblName VARCHAR(255))
BEGIN
SET @tableName = tblName;
SET @q = CONCAT('
CREATE TABLE IF NOT EXISTS `' , @tableName, '` (
`id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`something` VARCHAR(10) NOT NULL,
`somedate` DATETIME NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
');
PREPARE stmt FROM @q;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- and you're done. Table is created.
-- process it here if you like (INSERT etc)
END //

然后……CALL createLogTable('exampleTable');

所以基本思路是

  1. 根据需要将过程参数与您的查询连接起来
  2. 根据这个查询字符串准备/执行一条语句

关于mysql动态建表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46711949/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com