c# - 如何使用 C# 复制 MySql 数据库架构?

标签 c# mysql database-schema

我正在尝试使用 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/

相关文章:

c# - 如何使用 SqlParameterCollection?

用于日志记录的 mysql 触发器,查找更改的列

database - 为什么在数据库设计中使用一对一的关系?

mysql - 在 SQL 中设计灵活的模式设计

c# - 如何确定 .NET 中 explorer.exe 的路径?

c# - 我应该使用结构还是类?

c# - 在 Windows 窗体中渲染 OxyPlot 图形

php - 使用 PHP 限制登录用户的内容访问

java - mysql连接超时后无法从apache DBCP连接池获取连接

MYSQL - 最佳数据结构