一张表的不同表前缀?
Posted
技术标签:
【中文标题】一张表的不同表前缀?【英文标题】:Different table prefix for one table? 【发布时间】:2011-11-15 21:28:10 【问题描述】:假设,假设我多次安装了一些奇怪的 mysql/php 驱动软件。它们是相同的软件,因此数据库表结构在所有安装中都是相同的。我想要做的是让软件对 one 表使用不同的数据库前缀。具体来说,一个用户表。所以说安装是这样设置的:
主安装:/home/www/main,数据库主,前缀为1 第二次安装:/home/www/second,数据库主,前缀是2 第三次安装:/home/www/third,数据库主,前缀是3所以我想要告诉第二次安装和第三次安装从前缀为 is1 的用户表中通过该表提取自己的数据。因此,在主安装上注册的任何用户也会在第二次和第三次注册,反之亦然。有可能吗,如果可以,我会怎么做?即使它只是一种提供相同基本结果的解决方法,我也会很高兴。
【问题讨论】:
我不确定您是否可以只为一张表添加前缀,是否有任何理由不能为其他所有内容添加前缀?对于您问题的第二部分,您是否有 sql 查询问题?当有人注册时,您可以简单地插入 3 次,每个表中一次。或者你还有什么想做的吗? 【参考方案1】:如果您不想修改应用程序的 PHP 源代码,并且在这方面还不能配置,那么另一种选择是修改数据库,将 is2users
和 is3users
更改为 @987654325 上的视图@:
DROP TABLE is2users;
CREATE VIEW is2users AS SELECT * FROM is1users;
DROP TABLE is3users;
CREATE VIEW is3users AS SELECT * FROM is1users;
(有关视图的一般信息,请参阅http://dev.mysql.com/doc/refman/5.0/en/views.html,有关 CREATE VIEW 的具体信息,请参阅http://dev.mysql.com/doc/refman/5.0/en/create-view.html。)
根据应用程序,这可能无法完美运行 - 例如,应用程序可能会在内存中缓存一些信息(例如标识符序列的当前值) - 但它会可能 工作。在投入生产之前对其进行测试!
【讨论】:
天哪,谢谢。非常感谢,它破坏了副本上现有用户的密码,但在全新安装时,它没有任何区别,因为我可以放弃 root 帐户(我通常会这样做)。我可以吻你。给你的饼干。 =3【参考方案2】:您的 php 代码可能在 cfg.php 之类的文件中如下所示:
$prefix = 'is3'
类似 user.model.php:
$sql = 'SELECT * FROM `'.$prefix.'users`';
因此,您需要更改三个安装代码中的两个以使用“用户”表。不过好像太危险了。
【讨论】:
是什么让你说它很危险? 在大项目中进行所有必要的更改而不犯错误是相当困难的。当然,这取决于它的结构。我认为 ruakh 的回答是更好的方法。【参考方案3】:这个设置很简单,模式明智。您提到“安装”,这意味着您正在使用一些打包的库,该库可能包含一个配置文件,您可以在其中更改各种设置,其中一个设置可能是表前缀。如果没有表前缀选项,您可以浏览安装代码并找到架构所在的位置,然后为每次安装手动更改前缀。
现在是最困难的部分,让代码按照您描述的方式运行。您必须让您的应用程序了解所有三个数据库,这意味着您可能必须在代码中添加两个新的数据库连接器(每个数据库一个连接器)。然后,您必须添加逻辑来处理用户 CRUD 功能,以便在所有三个数据库中插入/更新/删除用户数据(这里的事务会很好)。
您所描述的内容是可能的,但需要一些自定义代码。
【讨论】:
以上是关于一张表的不同表前缀?的主要内容,如果未能解决你的问题,请参考以下文章
SQL一次性查询一个字段不同条件下的统计结果(另一张表的统计数量)