在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/Java  數(shù)據(jù)庫(kù)/ oracle 訂單表主鍵為自增主鍵,如何動(dòng)態(tài)的和訂單詳情表關(guān)聯(lián)?

oracle 訂單表主鍵為自增主鍵,如何動(dòng)態(tài)的和訂單詳情表關(guān)聯(lián)?

----訂單表
CREATE TABLE DD_ORDER
(

    ORDER_ID    VARCHAR2(10)   PRIMARY KEY NOT NULL, ---訂單編號(hào),主鍵
    USER_ID     VARCHAR2(10)   NOT NULL,             ---用戶編號(hào),外鍵,引用自用戶表主鍵
    REAL_NAME   VARCHAR2(10)   NOT NULL,             ---收貨人姓名
    TEL         VARCHAR2(20)   NOT NULL,             ---收貨人電話
    ADDRESS     VARCHAR2(200)  NOT NULL,             ---收貨人地址

);

CREATE TABLE DD_ORDER_DETAIL
(

    DETAIL_ID     VARCHAR2(10)   PRIMARY KEY NOT NULL,  ---自增編號(hào),主鍵
    ORDER_ID      VARCHAR2(10)   NOT NULL,              ---訂單編號(hào),外鍵,引用自訂單表主鍵
    PRODUCT_ID    VARCHAR2(10)   NOT NULL,              ---商品編號(hào),外鍵,引用自商品表主鍵
    ORDER_TOTAL   NUMBER(5,0)    NOT NULL,              ---訂單數(shù)量
    PRICE         NUMBER(10,2)   NOT NULL,              ---成交單價(jià)

);

// 生成訂單表語(yǔ)句
String sql1 = "INSERT INTO DD_ORDER VALUES (ORDER_AUTOID.NEXTVAL,?,?,?,?)";

//生成訂單詳情表語(yǔ)句
String sql2 = "INSERT INTO DD_ORDER_DETAIL VALUES (DETAIL_AUTOID.NEXTVAL,?,?,?,?)";

由于訂單表ORDER_ID是自增主鍵,我在java中執(zhí)行完插入訂單表操作后,應(yīng)該如何寫插入訂單詳情表的語(yǔ)句,使兩者能通過(guò)ORDER_ID關(guān)聯(lián)?(簡(jiǎn)言之,如何得到剛插入訂單表的ORDER_ID)

回答
編輯回答
喵小咪

ORDER_AUTOID.NEXTVAL 獲取下一個(gè)序列值,即加上crement
ORDER_AUTOID.CURRVAL 獲取當(dāng)前序列值,即值不改變
但是進(jìn)行第一次連接的時(shí)候,直接執(zhí)行 ORDER_AUTOID.CURRVAL會(huì)報(bào)錯(cuò), 提示無(wú)序列值,必須先執(zhí)行下ORDER_AUTOID.NEXTVAL

2017年4月6日 01:39
編輯回答
好難瘦

在一個(gè)事務(wù)里,你的訂單沒(méi)提交,訂單詳情理論上是獲取不到訂單id的。

很簡(jiǎn)單的辦法,不用自增id作為訂單號(hào)。也不建議用自增id作為訂單號(hào)

舉個(gè)栗子:你可以用UUID(保證訂單號(hào)唯一性即可,同時(shí)最好有一定的業(yè)務(wù)含義),創(chuàng)建一個(gè)隨機(jī)的UUID,同時(shí)插入到訂單表和訂單詳情表就ok。關(guān)于訂單號(hào)生成策略,網(wǎng)上很多,自行了解。

不建議自增id做訂單號(hào):

1. 暴露訂單數(shù)量
2. 耦合度太高,且自增id沒(méi)有任何業(yè)務(wù)意義
3. 在效率上也有一定劣勢(shì)
2017年11月23日 15:45
編輯回答
夢(mèng)若殤

換個(gè)思路,先獲取sequence的下一個(gè)值,用這個(gè)值插入訂單和訂單明細(xì)表

SELECT ORDER_AUTOID.NEXTVAL FROM DUAL;

另外,oracle中沒(méi)有自增字段,用sequence來(lái)替代;如果是mysql中auto increment屬性的字段,可以通過(guò)statement.getGeneratedKeys()獲取自增字段的值。

2018年7月15日 16:17