2

我有一个脚本要在我的数据库中运行。但问题是这个脚本假设表上没有前缀并且所有数据库都有一个前缀(我们称之为prefix_)。

是否有命令或方法让 MySQL 尝试运行

INSERT INTO prefix_mytable ...

代替

INSERT INTO mytable...

对于脚本中的所有 sql 查询(UPDATE、INSERT 和 DELETE)?

4

2 回答 2

2

MySQL 中无法按照您描述的方式自动为表添加前缀。@MichaelBerkowski 是正确的。

我能建议的最好的方法是创建第二个具有可更新视图的数据库,使用不带前缀的名称作为前缀表名的前端。

这是一个例子:

mysql> CREATE DATABASE test;
mysql> CREATE TABLE test.prefix_mytable (id INT PRIMARY KEY, x VARCHAR(20));
mysql> CREATE DATABASE test2;
mysql> CREATE VIEW test2.mytable AS SELECT * FROM test.prefix_mytable;

现在您可以使用不带前缀的名称插入:

mysql> INSERT INTO test2.mytable (id, x) VALUES (123, 'abc');

并验证数据是否已插入到您的原始表中:

mysql> SELECT * FROM test.prefix_mytable;

一旦你这样做了,你就可以对数据库运行你的 SQL 脚本,test2并且所有的 INSERT 都应该可以正确地到达你的原始表。

如果您有很多需要为其创建视图的表,则可以自动创建 CREATE VIEW 语句:

mysql> SELECT CONCAT('CREATE VIEW test2.', REPLACE(TABLE_NAME, 'prefix_', ''), 
  ' AS SELECT * FROM test.', TABLE_NAME, ';') AS _sql 
  FROM INFORMATION_SCHEMA.TABLES 
  WHERE TABLE_SCHEMA='test' AND TABLE_NAME LIKE 'prefix\_%';
于 2013-02-27T01:38:24.847 回答
0

这是将 WordPress 表前缀从 wp_ 替换为不同的指南,像这样您可以更新任何 mysql 表。如何重命名 WordPress 表前缀?

于 2014-01-11T08:35:39.137 回答