2014-12-06 47 views
0

我正在致力于一个现有系统升级的项目。MySQL Id列

现有的DB结构必须保持不变,因为有一个系统正在读取将在新系统的顶部使用的相同数据库。

我正在建立一个新的CMS /管理系统使用PHP框架,期望如此看到所有数据库表自动增量ID字段命名为“ID” - 我不想修改任何其他“ID”的PHP处理作为这个字段的名字 - 相信我这将是一项艰巨的任务。

现有的数据库具有非标准的自动增量ID字段命名,如: “iBmsId” -shcema:I = INT BMS =表,ID = ID的名称....

请问有什么可以对数据库本身做一个“iBmsId”列的副本,创建一个名为“id”的具有相应INT值的匹配列?这样,我的新系统就可以按预期运行,而不必进行严重的重写,同时仍然能够使现有系统与数据库通信。

+0

你可以在iBmsId上使用INSERT触发器,它将插入的值插入到你所谓的'id'列中 – Codeek 2014-12-06 12:54:29

+0

新系统只读取'id'值还是修改它? – 2014-12-06 12:59:01

+0

新系统将输入新条目,自动增量将处理ID的编号。系统不应更改ID值。 – Nick 2014-12-06 13:02:59

回答

1

在这种情况下,你可以只使用VIEW :)

http://dev.mysql.com/doc/refman/5.0/en/create-view.html

查看在DBMS就像一个虚拟的表(除非它物化)。视图添加了一个新的抽象层,它可以支持您如何使用db以及如何实现它们之间的独立性。它还可以通过隐藏某些字段或只读视图来提高安全性。

提示:为了透明地添加视图,您可以重命名原点表并创建带有原点视图名称的视图。这让你避免修改现有的代码。

您可以阅读here如何创建可更新和可插入的视图(可以像普通表一样)。

0

如果只有一次一个系统修改的值,那么你可以使用一个观点:

create view v_table as 
    select t.*, iBMid as id 
    from table t; 

据推测,一个自增的价值是不会被更新,所以这应该是安全的。但是,请记住:

更具体地讲,一个观点是不是否含有下列的更新:

。 。 。

  • 对基表的任何列的多次引用。

这可能会影响您可能想要以相同方式处理的其他列。