欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
mysql處理存在則更新,不存在則插入(多列唯一索引)
mysql處理存在則更新,不存在則插入(多列唯一索引)
mysql處理某個(gè)唯一索引時(shí)存在則更新,不存在則插入的情況應該是很常見(jiàn)的,網(wǎng)上也有很多類(lèi)似的文章,我今天就講講當這個(gè)唯一的索引是多列唯一索引時(shí)可能會(huì )遇到的問(wèn)題和方法。
方法一:
使用
1
INSERT INTO ON ... DUPLICATE KEY UPDATE ...
表的創(chuàng )建如下:
1
2
3
4
5
6
7
8
9
10
11
12
[sql]
CREATE TABLE `test_table` ( 
  `id`  int(11) NOT NULL AUTO_INCREMENT , 
  `var1`  varchar(100) CHARACTER SET utf8 DEFAULT NULL
  `var2`  tinyint(1) NOT NULL DEFAULT '0'
  `var3`  varchar(100) character set utf8 default NULL
  `value1`  int(11) NOT NULL DEFAULT '1'
  `value2`  int(11) NULL DEFAULT NULL
  `value3`  int(5) DEFAULT NULL
  PRIMARY KEY (`Id`), 
  UNIQUE INDEX `index_var` (`var1`, `var2`, `var3`) 
) ENGINE=MyISAM DEFAULT CHARACTER SET=latin1 AUTO_INCREMENT=1; 

 

其中該表中var1、var2和var3完全相同的記錄只能有一條,所以建了一個(gè)多列唯一索引index_var,這樣一來(lái)我們就可以使用  INSERT INTO ON ... DUPLICATE KEY UPDATE ... 來(lái)實(shí)現插入數據時(shí)存在則更新,不存在則插入的功能了,如下:
1
2
3
4
5
6
[sql]
INSERT INTO `test_table`  
(`var1`, `var2`, `var3`, `value1`, `value2`, `value3`) VALUES  
('abcd', 0, 'xyz', 1, 2, 3)  
ON DUPLICATE KEY UPDATE `value1` = `value1` + 1 AND  
`value2` = `value2` + 2 AND `value3` = `value3` + 3;

 

該條插入語(yǔ)句的含義是:向test_table表中插入,如果不存在val1 = 'abcd',val2 = 0, val3 = ‘xyz’的記錄,那就插入
val1 = 'abcd',val2 = 0, val3 = ‘xyz’,value1 = 1, value2 = 2, value3 = 3的記錄,
如果存在,那就更新value1的值為value1+1,更新value2的值為value2+2,更新value3的值為value3+3。
這樣,的確是沒(méi)有問(wèn)題的,但是,如果表的創(chuàng )建如下:
1
2
3
4
5
6
7
8
9
10
11
12
[sql]
CREATE TABLE `test_table` ( 
  `id`  int(11) NOT NULL AUTO_INCREMENT , 
  `var1`  varchar(1024) CHARACTER SET utf8 DEFAULT NULL
  `var2`  tinyint(1) NOT NULL DEFAULT '0'
  `var3`  varchar(1024) character set utf8 default NULL
  `value1`  int(11) NOT NULL DEFAULT '1'
  `value2`  int(11) NULL DEFAULT NULL
  `value3`  int(5) DEFAULT NULL
  PRIMARY KEY (`Id`), 
  UNIQUE INDEX `index_var` (`var1`, `var2`, `var3`) 
) ENGINE=MyISAM DEFAULT CHARACTER SET=latin1 AUTO_INCREMENT=1;

 

注意:var1和var3的最大長(cháng)度由100變成了1024,此時(shí)執行該創(chuàng )建語(yǔ)句時(shí)會(huì )報如下錯誤:
1
2
[sql]
Specified key was too long; max key length is 1000 bytes

 

這是由于index_var索引的為1024 * 3 + 1 + 1024 * 3 > 1000導致的,如果遇到這種情況怎么辦?有兩種解決辦法。
第一,將數據庫的engine由MyISAM換成InnoDB就可以了,那么這兩個(gè)引擎有什么區別呢?
看這里
不過(guò),這樣換有一個(gè)缺點(diǎn),就是InnoDB的性能沒(méi)有MyISAM的好,那么如果想要不犧牲性能的話(huà),那就只有用第二個(gè)方法了,也就是我們這里說(shuō)的方法二!
方法二:
使用dual虛擬表來(lái)實(shí)現。
使用dual虛擬表來(lái)實(shí)現的話(huà)就不需要創(chuàng )建多列唯一索引了,表的創(chuàng )建如下:
1
2
3
4
5
6
7
8
9
10
11
[sql]
CREATE TABLE `test_table` ( 
  `id`  int(11) NOT NULL AUTO_INCREMENT , 
  `var1`  varchar(1024) CHARACTER SET utf8 DEFAULT NULL
  `var2`  tinyint(1) NOT NULL DEFAULT '0'
  `var3`  varchar(1024) character set utf8 default NULL
  `value1`  int(11) NOT NULL DEFAULT '1'
  `value2`  int(11) NULL DEFAULT NULL
  `value3`  int(5) DEFAULT NULL
  PRIMARY KEY (`Id`) 
) ENGINE=MyISAM DEFAULT CHARACTER SET=latin1 AUTO_INCREMENT=1;

 

插入語(yǔ)句則是形如:
1
2
3
4
5
6
[sql]
INSERT INTO table 
(primarykey, field1, field2, ...) 
SELECT key, value1, value2, ... 
FROM dual 
WHERE not exists (select * from table where primarykey = id);

 

的語(yǔ)句,此時(shí)我們可以用以下語(yǔ)句代替:
1
2
3
4
5
[sql]
INSERT INTO `test_table` SELECT 0, 'abcd', 0, 'xyz', 1, 2, 3 
FROM dual WHERE NOT EXISTS ( 
SELECT * FROM `test_table` WHERE  
`var1` = 'abcd' AND `var2` = 0 AND `var3` = 'xyz');

 

此時(shí),如果val1 = 'abcd',val2 = 0, val3 = ‘xyz’的記錄不存在,那么就會(huì )執行該插入語(yǔ)句插入該記錄,如果存在,那就需要我們再使用相應的更新語(yǔ)句來(lái)更新記錄:
1
2
3
4
[sql]
UPDATE `test_table` SET  
`value1` = `value1` + 1, `value2` = `value2` + 2, `value3` = `value3` + 3 
WHERE `val1` = 'abcd' AND `val2` = 0 AND `val3` = 'xyz';

 

OK!到這里,基本上講完了。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
涉及存儲過(guò)程的問(wèn)題
Mambo 中國社區 - Bugs 報告和功能需求 - 4.5.4全球版安裝第二步出錯
工欲善其事必先利其器——MySQL數據庫(1)
hive教程--nvl 和 coalesce
查詢(xún)某字段不重復記錄的SQL語(yǔ)句該怎么寫(xiě)?
12、JS類(lèi)應用實(shí)例之拆分數據到工作表或工作簿
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久