有一个表user_info。
CREATE TABLE USER_INFO
(USER_ID VARCHAR2(50 BYTE) PRIMARY KEY,
USER_NAME VARCHAR2(50 BYTE),
USER_ROLE_TYPE VARCHAR2(50 BYTE)
)
扩展api和admin(其user_role_type为admin),创建了对表的新表引用。
CREATE TABLE ADMIN_INFO
(USER_ID VARCHAR2(50 BYTE),
USER_PHONE VARCHAR2(50 BYTE),
USER_EMAIL VARCHAR2(100 BYTE)
)
,新表引用带外键的USER_INFO。
ALTER TABLE ADMIN_INFO
ADD CONSTRAINT FK_ADMIN_INFO
FOREIGN KEY (USER_ID) REFERENCES USER_INFO(USER_ID) ON DELETE CASCADE;
并且USER_INFO已经将一些数据插入到USER_INFO中,并且它存在一行user_id ='123'。
现在我只想更改 USER_PHONE, 所以我写了sql:
update ADMIN_INFO set
USER_PHONE = '17096022212'
where USER_ID = '123'
但是当我尝试从新表中选择user_id ='123'的行时,仍然没有。
为什么?
我确实希望将新信息保存到它,它是一个edit-api,它会显示并可以保存页面中的数据,我是如何制作的?
如果我想给它一个if-else判断,对于这两种情况和sql不同。例如
if( the row exists){
update it
}else{insert
}
我可以在mapper.xml中使用sql吗?如果可以的话,我是如何编写sql的?
------------------- 2016年3月10日/ ----------------------
现在我完成了一个测试确定的SQL
merge into ADMIN_INFO d
using(select '123' as USER_ID,
'1234567' as USER_PHONE from dual) dd
on(d.USER_ID = dd.USER_ID)
when matched then
update set d.USER_PHONE = dd.USER_PHONE
when not matched then
insert (USER_ID,USER_PHONE)
values(dd.USER_ID,dd.DRIVER_NUMBER)
但是,当我尝试这样测试时:
merge into ADMIN_INFO d
using(select '1234' as USER_ID,
__null__ as USER_PHONE from dual) dd
on(d.USER_ID = dd.USER_ID)
when matched then
update set d.USER_PHONE = dd.USER_PHONE
when not matched then
insert (USER_ID,USER_PHONE)
values(dd.USER_ID,dd.DRIVER_NUMBER)
数据库显示错误,死锁,sql一直在运行,无法完成。发生了什么事?
答案 0 :(得分:1)
UPDATE用于更改该特定表中已存在的行 - 因此,如果ADMIN_INFO表(您尝试更新的那个)中没有USER_ID的行,则需要先将其插入
答案 1 :(得分:0)
更新sql的结果是什么?在我看来admin_info表中没有这样的记录。如果要将新记录插入表中,则应使用insert而不是update。