您的位置:首页 > 数据库 > Oracle

[置顶] MySQL与Oracle查询一条语句,如果有则更新,无则添加

2018-02-08 19:03 459 查看

需求:

当某个用户访问某个菜单时,如果该用户没有访问过该菜单则新增一条访问记录,如果该用户过去访问过该菜单则更新访问该菜单的次数。

分析:

前端传递的参数:用户id,菜单编号

数据库字段:访问id(主键),用户id,菜单编号,访问记录数

MySQL数据库

创建数据表 MB_APP_MENU_VISIT

CREATE TABLE `mb_app_menu_visit` (
`VISIT_SEQ` INT(11) NOT NULL AUTO_INCREMENT COMMENT '访问id',
`CUST_NO` VARCHAR(20) NOT NULL COMMENT '用户id',
`CLIENT_MENU` VARCHAR(5) NOT NULL COMMENT '菜单编号',
`MENU_NUM` INT(11) DEFAULT '1' COMMENT '访问记录数',
PRIMARY KEY (`VISIT_SEQ`),
UNIQUE KEY `index_var` (`CUST_NO`,`CLIENT_MENU`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8


上述的
UNIQUE KEY index_var
(
CUST_NO
,
CLIENT_MENU
) 是将
CUST_NO
CLIENT_MENU
作为多列唯一索引,给
ON DUPLICATE KEY
方法判断,只有
CUST_NO
CLIENT_MENU
完全相同时才为同一条记录。

SQL语句:

/*'1313','1918'为模拟数据*/
INSERT INTO MB_APP_MENU_VISIT (CUST_NO,CLIENT_MENU,MENU_NUM)
VALUES('1313','1918',1)
ON DUPLICATE KEY UPDATE MENU_NUM=MENU_NUM+1;


mybatis中将数值改为map中的变量

<insert id="insertOrUpdate" parameterType="map">
INSERT INTO MB_APP_MENU_VISIT (CUST_NO,CLIENT_MENU,MENU_NUM)
VALUES(#{CUST_NO},#{CLIENT_MENU},1)
ON DUPLICATE KEY UPDATE MENU_NUM=MENU_NUM+1
</insert>


Oracle数据库

创建数据表 MB_APP_MENU_VISIT

//创建序列
create sequence TEST_SEQ
increment by 1
start with 1
maxvalue 999999999;

//创建表
DROP TABLE "YTTRAIN"."MB_APP_MENU_VISIT";
CREATE TABLE "YTTRAIN"."MB_APP_MENU_VISIT" (
"VISIT_SEQ" NUMBER NOT NULL ,
"CUST_NO" VARCHAR2(20 BYTE) NOT NULL ,
"CLIENT_MENU" VARCHAR2(20 BYTE) NOT NULL ,
"MENU_NUM" NUMBER NULL
)
LOGGING
NOCOMPRESS
NOCACHE
;
ALTER TABLE "YTTRAIN"."MB_APP_MENU_VISIT" ADD PRIMARY KEY ("VISIT_SEQ", "CUST_NO", "CLIENT_MENU");


<insert id="queryBankName" parameterType="map">
MERGE INTO MB_APP_MENU_VISIT m1 USING (SELECT #{CUST_NO} AS a,#{CLIENT_MENU} AS b FROM DUAL) m2
ON(m1.CUST_NO=m2.a AND m1.CLIENT_MENU=m2.b) WHEN MATCHED THEN
UPDATE SET MENU_NUM=MENU_NUM+1 WHERE m1.CUST_NO=m2.a AND m1.CLIENT_MENU=m2.b
WHEN NOT MATCHED THEN
INSERT(VISIT_SEQ,CUST_NO,CLIENT_MENU,MENU_NUM) VALUES(TEST_SEQ.nextval,m2.a,m2.b,1)
</insert>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐