我有一个脚本要在我的数据库中运行。但问题是这个脚本假设表上没有前缀并且所有数据库都有一个前缀(我们称之为prefix_)。
是否有命令或方法让 MySQL 尝试运行
INSERT INTO prefix_mytable ...
代替
INSERT INTO mytable...
对于脚本中的所有 sql 查询(UPDATE、INSERT 和 DELETE)?
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\_%';
这是将 WordPress 表前缀从 wp_ 替换为不同的指南,像这样您可以更新任何 mysql 表。如何重命名 WordPress 表前缀?