我正在尝试使用 C# 和 MySql 来复制空表(真正重新创建架构)。结构如下所示:
> TableTemplate (schema)
+ Tables
> FirstTable (table)
> second table (table)
> ...
> SomeOtherTable
+ Tables
> ...
我想要复制 TableTemplate
使用用户名进入新架构。
第一个明显的遗忘之路是尝试 CREATE TABLE @UserName LIKE TableTemplate
,很快就了解到 sql 参数应该用于值而不是表名(再次感谢 jon skeet: How to pass a table as parameter to MySqlCommand? )。
因此,我们需要手动验证用户名才能构建表名称 ( robert's a prime example )。
接下来,似乎连CREATE TABLE UserID LIKE TableTemplate;
无法工作(即使在 MySQL Workbench 中),因为 TableTemplate
不是一张 table 。
因此,需要编写一个循环来创建一个表 LIKE
TableTemplate
中的每个表,创建 UserID
后架构(手动验证该字符串后),或尝试其他选项,例如转储数据库并创建新数据库,如以下问题所示:
但我希望避免运行进程、转储数据库并在每次添加用户时从那里创建数据库。
如有任何建议,我们将不胜感激。
最佳答案
我认为mysqldump
会更好。但如果你想在一个过程中完成。试试这个。
SELECT
CONCAT ("CREATE TABLE SomeOtherTable.",
TABLE_NAME ," AS SELECT * FROM TableTemplate.", TABLE_NAME
) as creation_sql
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'TableTemplate';
输出将类似于
CREATE TABLE SomeOtherTable.tbl_name AS SELECT * FROM TableTemplate.tbl_name;
然后迭代结果并执行CREATE TABLE ....
关于c# - 如何使用 C# 复制 MySql 数据库架构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20207294/