INSERT INTO TABLE_2
(id, name)
SELECT t1.id,
t1.name
FROM TABLE_1 t1
WHERE NOT EXISTS(SELECT id
FROM TABLE_2 t2
WHERE t2.id = t1.id)
使用NOT IN:
INSERT INTO TABLE_2
(id, name)
SELECT t1.id,
t1.name
FROM TABLE_1 t1
WHERE t1.id NOT IN (SELECT id
FROM TABLE_2)
使用LEFT JOIN/IS NULL:
INSERT INTO TABLE_2
(id, name)
SELECT t1.id,
t1.name
FROM TABLE_1 t1
LEFT JOIN TABLE_2 t2 ON t2.id = t1.id
WHERE t2.id IS NULL
这就是自己实现一个ID自增的东西。比如的你有个公用类专门用来生成后面的数字,所有需要用到的方法都调用这个类的一个方法我们就叫它nextId吧,只要这个方法是线程安全的就可以了。
IdUtils.nextId()
int nextId() {
lock(this){
return this.id++
}
}
应用启动的时候从数据库查询一下id的最大值并设置给工具类的id,让它接着增长就行了。
具体实现看你用什么语言。
请仔细阅读别人回答的是什么意思。想想oracle的sequence的实现,是不是类似?
设置表的联合主键
在INSERT语句中添加OR IGNORE,即可。
示例如下:
insert OR IGNORE into PDA_Test (DeviceID,MethodName) values('1112','测试原有')
sqlite避免重复插入数据
SQLite 数据库常用约束如下:
NOT NULL - 非空
UNIQUE - 唯一
PRIMARY KEY - 主键
FOREIGN KEY - 外键
CHECK - 条件检查
DEFAULT - 默认
用insert语句插入数据,为避免重复插入又不打断数据处理。
首先要避免重复插入,就必须在插入时引发冲突。在表中设置了id字段,该字段为UNIQUE属性,当插入的id已存在时引发冲突。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)