如果我的问题标题不清楚,让我详细介绍一下:在我的rails应用程序中,在本地(开发)中,我使用PL-SQL作为我的数据库,并且有一个Customer表,主ID从1,2,3.......so开始。直到我开始在本地(开发)和生产中使用相同的数据库,在创建客户时没有问题,所以在我开始运行本地(开发)和生产与相同的数据库并行后,许多时候客户创建失败,因为ID试图创建为副本。那么,我如何在Local/Production中设置,将ID的下一个索引更改为另一个数字,以避免此冲突。?
例如:我想在本地继续使用(1,2.....etc) ID &在生产中,我想从50000开始设置下一个Id,从wards和continue开始。
发布于 2016-01-05 16:23:37
如果我正确理解了您的问题,您的开发环境和实时环境都链接到相同的数据库和表(假设表名为customer_tab,主id列为cus_id)。
虽然这不是非常推荐的做法,但是如果您想让主id按顺序排列,而不管插入来自哪里(live或dev),那么您可以使用序列和触发器。也就是说,insert语句不会插入主id,而是将其保留为空。但是,在插入时,将运行使用序列号的触发器。如下所示:
/*Create sequence*/
create sequence customer_tab_seq
start with 5000
increment by 1;
/*Create trigger*/
CREATE OR REPLACE TRIGGER customer_tab_tri
BEFORE INSERT ON customer_tab
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
BEGIN
IF INSERTING THEN
IF :NEW.cus_id IS NULL THEN
SELECT customer_tab_seq.NEXTVAL INTO :NEW.cus_id FROM DUAL;
END IF;
END IF;
END;
/在这种情况下,插入的第一行将被赋予5000 (不管它来自live还是dev),第二行将被赋予5001 (无论它来自live还是dev)。而且它还能帮你避免将来的冲突。
https://stackoverflow.com/questions/34606749
复制相似问题