MySQLレコードが存在する場合は更新、存在しない場合は挿入

1649 ワード

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`)は、文が正常に実行されることを保証します.