我有建立在CakePHP 1.2.11上的web应用程序。和mysql数据库。在此应用程序中,我有两个表,即users和actions。Users hasMany actions,user_id ( users表中的id)是actions表中的外键。id字段为自增整数。
CakePHP文档指出,将id字段设置为Char(36)将使CakePHP能够为作为id的每条记录生成唯一字符串。
我的应用程序正在运行,我不想丢失应用程序已经拥有的数据记录。我需要知道是否可以安全地从自增量整数id迁移到char(36),同时记住相关的表?
换句话说,我如何将整数值更改为cakephp所做唯一字符串id?有什么规定吗?如果有任何工具可以自动执行这种迁移,我将不胜感激。
发布于 2012-11-07 22:57:29
可以,只需将表更改为使用varchar即可。可以将INT列转换为字符,因此不会丢失原始ID(最终将得到旧的常规int和新的uuid的混合)。您需要确保也对需要存储VARCHAR(36)的任何其他表上的任何外键进行更改。
然后确保立即推送新代码,否则将无法创建新记录,因为varchar字段不能自动递增。
最后,在推送新代码后,立即清除模型缓存,这样Cake就不会仍然认为它是一个INT。
发布于 2012-11-08 00:35:13
确实要切换吗?
老实说,除非您有很好的理由更改为UUID (CHAR(36)),否则我建议您只使用自动递增的ID。有很多人吹捧每种方法的好处,但归根结底是自动递增IDs可以更快,除非您有多个数据库,担心数据重叠,否则自动ids就很好。(这不是一个简单的“开关”)
并不疯狂--简单:
如果你仍然确定你想要切换到UUID,没有自动化的过程,但要小心-这不仅仅是关于切换字段类型和瞧-你必须创建一个脚本或其他东西来更新id字段以及所有相关的字段(即'actions‘表中的'user_id’不会是updated..etc等)。
如果是这样,方法如下:
因此-创建数据库(或表)的副本作为备份。然后,您可能想要将' id‘字段重命名为'autoid',创建另一个id字段CHAR(36),运行一个脚本来填充所有的UUID,然后运行另一个脚本,用相应的UUID填充相关的id(即'actions’表中的'user_id‘)。
生成UUID的CakePHP代码:
下面是在CakePHP 1.2中创建UUID的链接:http://book.cakephp.org/1.2/en/view/826/uuid
https://stackoverflow.com/questions/13271267
复制相似问题