SQL怎么查一个记录是否存在?

wax
ooo 2011-01-21 字数 576

例如有个表,里面存储一些小文件,以文件名称做主键。

create table if not exists data(name VARCHAR primary key,content VARCHAR,ts timestamp)

希望做个函数,在表里有某个文件时候,就update该记录,没有时候就insert该记录。

目前做法是先insert,如果失败,说明已经有该记录了,再去update。如下:

def set(self,name,content,ts): #ts : time stamp

try:

self.m_cu.execute("insert into data values (?,?,?)",(name, content, ts))

except:

self.m_cu.execute("update data set content=?, ts=? where name=?",(content, ts, name))

请问有没有更有效率的办法去根据主键值查一个记录是否存在?

多谢

Database 数据库技术
7 个回复
chylli
豆粉 2011-01-21

mysql有on duplicate update

其它的不知道

【 在 wax (ooo) 的大作中提到: 】

: 例如有个表,里面存储一些小文件,以文件名称做主键。

: create table if not exists data(name VARCHAR primary key,content VARCHAR,ts timestamp)

: 希望做个函数,在表里有某个文件时候,就update该记录,没有时候就insert该记录。

: ...................

Knightmare
梦醒时分 2011-01-21

oracle有merge

【 在 wax (ooo) 的大作中提到: 】

: 标  题: SQL怎么查一个记录是否存在?

: 发信站: 水木社区 (Fri Jan 21 16:13:35 2011), 站内

: 例如有个表,里面存储一些小文件,以文件名称做主键。

: create table if not exists data(name VARCHAR primary key,content VARCHAR,ts timestamp)

: 希望做个函数,在表里有某个文件时候,就update该记录,没有时候就insert该记录。

: 目前做法是先insert,如果失败,说明已经有该记录了,再去update。如下:

: def set(self,name,content,ts): #ts : time stamp

:   try:

:     self.m_cu.execute("insert into data values (?,?,?)",(name, content, ts))

:   except:

:     self.m_cu.execute("update data set content=?, ts=? where name=?",(content, ts, name))

: 请问有没有更有效率的办法去根据主键值查一个记录是否存在?

: 多谢

: --

wxstorm
企鹅 2011-01-21

这个很蛋疼

当存在多个key或者unique匹配时,随机选一条记录更新。。

【 在 chylli (二毳三毳n毳) 的大作中提到: 】

: mysql有on duplicate update

: 其它的不知道

chylli
豆粉 2011-01-21

随机?那确实比较疼...

【 在 wxstorm (企鹅) 的大作中提到: 】

: 这个很蛋疼

: 当存在多个key或者unique匹配时,随机选一条记录更新。。

RuralHunter
渔父 2011-01-21

select一下主键太低效?

【 在 wax (ooo) 的大作中提到: 】

: 例如有个表,里面存储一些小文件,以文件名称做主键。

: create table if not exists data(name VARCHAR primary key,content VARCHAR,ts timestamp)

: 希望做个函数,在表里有某个文件时候,就update该记录,没有时候就insert该记录。

: ...................

redwin
redwin 2011-01-21

恩,db2中也有

【 在 Knightmare (梦醒时分) 的大作中提到: 】

: oracle有merge

wax
ooo 2011-01-22

多谢各位。

我用的sqlite, 刚刚找到了insert or replace可以搞定。

【 在 redwin (redwin) 的大作中提到: 】

: 恩,db2中也有