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`),这样才能保证语句能够正常执行。