[置顶] MySQL与Oracle查询一条语句,如果有则更新,无则添加
2018-02-08 19:03
459 查看
需求:
当某个用户访问某个菜单时,如果该用户没有访问过该菜单则新增一条访问记录,如果该用户过去访问过该菜单则更新访问该菜单的次数。分析:
前端传递的参数:用户id,菜单编号数据库字段:访问id(主键),用户id,菜单编号,访问记录数
MySQL数据库
创建数据表 MB_APP_MENU_VISITCREATE 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>
相关文章推荐
- mysql 添加的如果重复则采用更新语句
- MySql的sql语句中添加存储过程或者存储函数来实现Oracle中的start with ……connect by prior……递归(树形结构数据)查询
- mysql判断一条记录是否存在,如果存在,则更新此语句,如果不存在,则插入
- oracle mybatis(Mergr into语句带序列)添加数据时如果数据存在就更新,如果不存在就插入
- MySq之一条mysql语句来更新(插入)查询结果
- mysql判断一条记录是否存在,如果存在,则更新此语句,如果不存在,则插入
- Mysql 一条SQL语句实现批量更新数据,update结合case、when和then的使用案例
- 转载:如何写个SQL语句查询一个字段里是否有重复记录如果有只读取其中一条记录
- oracle 执行一条查询语句,把数据加载到页面或者前台发生的事情
- 简单的添加更新语句 一条语句实现
- MySQL、Oracle分页查询的SQL语句
- Oracle中merge into的使用:该命令使用一条语句从一个或者多个数据源中完成对表的更新和插入数据.
- mysql,sqlserver和oracle的模糊查询语句
- MySQL中实现插入或更新操作(类似Oracle的merge语句)
- Update语句更新多表时在SQL Server,Oracle,MySQL三种数据库中的用法
- MySQL一条语句实现同时查询和修改
- 9、步步为营VS 2008 + .NET 3.5(9) - DLINQ(LINQ to SQL)之执行SQL语句的添加、查询、更新和删除
- 两段表名为参数,查询和更新的MySQL语句
- 数据初始化:有则更新无则添加(mySql,oracle)
- MySQL、Oracle和SQL Server的分页查询语句