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