SQLite中特殊的INSERT語(yǔ)句
在SQLite中,INSERT是基本語(yǔ)句,用來(lái)向表中插入數(shù)據(jù)。但是當(dāng)表中存在字段存在唯一、非空、檢查、主鍵等約束時(shí),插入的數(shù)據(jù)很容易和約束沖突,造成插入操作失敗。為了解決這類問題,SQLite提供集中特殊的INSERT語(yǔ)句。下面依次介紹一下:
(1)INSERT OR REPLACE語(yǔ)句:如果引起約束沖突,則取消插入操作。如果是與唯一、主鍵約束沖突,則將已存在的數(shù)據(jù)進(jìn)行更新。如果是與非空約束操作,并且存在默認(rèn)值設(shè)置,則將沖突的空列使用默認(rèn)值替代,然后插入;否則,按照INSERT OR ABORT方式執(zhí)行。如果是與檢查約束沖突,則按照INSERT OR ABORT執(zhí)行。
(2)INSERT OR ABORT語(yǔ)句:如果引起約束沖突,則取消該插入操作。如果在一個(gè)事務(wù)中,不會(huì)回滾當(dāng)前事務(wù),繼續(xù)執(zhí)行當(dāng)前事務(wù)的后續(xù)操作。
(3)INSERT OR ROLLBACK語(yǔ)句:如果引起約束沖突,則取消該插入操作。如果在一個(gè)事務(wù)中,會(huì)回滾當(dāng)前事務(wù)。
(4)INSERT OR FAIL語(yǔ)句:如果引起約束沖突,則取消該插入操作。如果在一個(gè)事務(wù)中,不會(huì)回滾當(dāng)前事務(wù),但會(huì)取消當(dāng)前事務(wù)的后續(xù)操作。
(5)INSERT OR IGNORE語(yǔ)句:如果引起約束沖突,則取消該插入操作。如果在一個(gè)事務(wù)中,不會(huì)回滾當(dāng)前事務(wù),繼續(xù)執(zhí)行當(dāng)前事務(wù)的后續(xù)操作。與INSERT OR ABORT不同的,它不會(huì)觸發(fā)SQLITE_CONSTRAINT錯(cuò)誤。