MySQL记录存在则更新,不存在则插入

Create TABLE `tb_file_authorize` (
  `authorize_id` int(11) NOT NULL auto_increment,
  `str_id` int(11) default NULL COMMENT '用户标识',
  `file_id` int(11) default NULL COMMENT '文件标识',
  `right_id` int(11) default NULL COMMENT '权限标识',
  `catalog_id` int(11) default NULL COMMENT '目录标识',
  `catalog_index` varchar(100) character set utf8 collate utf8_bin default NULL COMMENT '目录索引标识',
  `expired_date` varchar(30) default NULL COMMENT '过期时间',
  `limit_times` int(11) default NULL COMMENT '限制次数',
  `open_times` int(11) default NULL COMMENT '已经打开次数',
  `start_date` varchar(30) default NULL COMMENT '开始时间',
  `end_date` varchar(30) default NULL COMMENT '结束时间',
  `grant_user` varchar(30) default NULL,
  PRIMARY KEY  (`authorize_id`),
  KEY `file_right_index` (`str_id`,`file_id`),
  UNIQUE KEY `update_or_insert` (`str_id`,`file_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

我遇到的问题:

   str_id标识用户的唯一标识,fiile_id为文件的唯一标识,此表为中间表str_id,与file_id确定right_id

当该表中存在str_id与file_id的记录时,更新right_id,否则插入一条新的记录,SQL语句如下:

 

Insert into tb_file_authorize(str_id,file_id,right_id,catalog_id,catalog_index)
values ('35','20','2048','1','1') ON DUPLICATE KEY Update right_id='1024'

 

此sql的意思判断是否存在str_id为30,file_id为20的记录,存在则更新right_id为1024,否则插入新的记录.

 

注意:使用该方法,建表的时候要定义 UNIQUE KEY `update_or_insert` (`str_id`,`file_id`),这样才能保证语句能够正常执行。



上一篇: 解决w3wp.exe内存占用问题
下一篇: php实现相对路径转绝对路径
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: mysql
相关日志:
评论: 0 | 引用: 0 | 查看次数: 3795
发表评论
昵 称:
密 码: 游客发言不需要密码.
邮 箱: 邮件地址支持Gravatar头像,邮箱地址不会公开.
网 址: 输入网址便于回访.
内 容:
验证码:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 1000 字 | UBB代码 开启 | [img]标签 关闭

 广告位

↑返回顶部↑