2016-06-09 103 views
1

更新PostgreSQL的表我有这两个表,我想使用Java代码的一个SQL查询来更新:一个SQL查询

CREATE TABLE ACCOUNT(
ID INTEGER NOT NULL, 
USER_NAME TEXT NOT NULL, 
PASSWD TEXT, 
FIRST_NAME TEXT, 
LAST_NAME TEXT, 
E_MAIL TEXT NOT NULL, 
COUNTRY TEXT, 
STATE TEXT, 
LAST_PASSWD_RESET DATE, 
DESCRIPTION TEXT, 
LAST_UPDATED DATE, 
CREATED DATE 
) 
; 

-- ADD KEYS FOR TABLE ACCOUNT 

ALTER TABLE ACCOUNT ADD CONSTRAINT KEY1 PRIMARY KEY (ID) 
; 

ALTER TABLE ACCOUNT ADD CONSTRAINT USER_NAME UNIQUE (USER_NAME) 
; 

ALTER TABLE ACCOUNT ADD CONSTRAINT E_MAIL UNIQUE (E_MAIL) 
; 

-- TABLE ACCOUNT_ROLE 

CREATE TABLE ACCOUNT_ROLE(
ID INTEGER NOT NULL, 
USER_NAME TEXT NOT NULL, 
ROLE INTEGER, 
PERMISSION TEXT, 
LAST_UPDATED DATE, 
CREATED DATE 
) 
; 

-- CREATE INDEXES FOR TABLE ACCOUNT_ROLE 

CREATE INDEX IX_RELATIONSHIP19 ON ACCOUNT_ROLE (ID) 
; 

-- ADD KEYS FOR TABLE ACCOUNT_ROLE 

ALTER TABLE ACCOUNT_ROLE ADD CONSTRAINT KEY26 PRIMARY KEY (ID) 
; 

ALTER TABLE ACCOUNT_ROLE ADD CONSTRAINT RELATIONSHIP19 FOREIGN KEY (ID) REFERENCES ACCOUNT (ID) ON DELETE CASCADE ON UPDATE CASCADE 
; 

我用这个SQL查询来更新第一个表中的数据。对于第二个表我使用类似的SQL查询:

UPDATE ACCOUNT SET ID = ?, USER_NAME = ?, PASSWD = ?, FIRST_NAME = ?, LAST_NAME = ?, E_MAIL = ?, COUNTRY = ?, STATE = ?, " CITY = ?, ADDRESS = ?, STATUS = ?, SECURITY_QUESTION = ?, SECURITY_ANSWER = ?, DESCRIPTION = ?, LAST_UPDATED = CURRENT_DATE WHERE ID = ? 

这是怎么解决的呢?

+1

解决什么问题?你似乎懂得如何编写'update'语句。 –

+0

正确,但如何用一个SQL查询更新两个表? –

+0

@PeterPenzov:你为什么认为你需要在一个声明中这样做?如果你想更新两个表,为什么不简单地运行两条'update'语句? –

回答

1

在Postgres里,你可以通过使用CTE更新两个表:

with t1 as (
     update . . . 
     returning * 
    ) 
update t2 
    . . . 

目前还不清楚这是如何适合你正在尝试做的。但是可以在Postgres中编写一个语句来做两个更新。

1

you can't除非你有使用inheritance

我不知道任何SQL数据库,将允许在同一时间更改两个或多个表两张表。

不知道你是否会需要这样的功能。

如果您想保留更改 - 只需打开transaction并将这两个更新放在一起,如果一个失败,整个事务可以回滚。

当然可以使用explicit lockingSELECT .. FOR UPDATE,这也很好。

如果你正在寻找简化代码的东西 - 也许你应该看看stored procedures,所以你将能够编写复杂的代码并用一些参数调用它。

+0

Postgres _can_使用修改CTE的数据在一条语句中更新两个表:https://www.postgresql.org/docs/current/static/queries-with.html#QUERIES-WITH-MODIFYING –