2015-02-01 7 views
2

У меня есть база данных с 2 таблицы, как это:Sqlite: Включить, если не существует, Update, если существует

cg_resp 
id | name | email 
1 | George | [email protected] 

id колонка primary_key, autoincremented и name является unique

и

equip_info 
id | description | cg_resp_id 
1 | Caliper  | 1 

В форме заявки у меня есть 2 поля для редактирования: edit_resp_name и edit_resp_email

Если пользователь вставить новое ответственное имя, как John с электронной почтой [email protected] затем во время сохранения формы я хотел бы insert новый ответственный в cg_resp таблицы, получить последнюю вставленную id и обновить его до equip_info.cg_resp_id.

Если пользователь сохранить имя George но это обновление электронной почты, как [email protected] тогда я хотел бы update в id = 1 из cg_resp с новым адресом электронной почты, а остальные из них (equip_info.cg_resp_id и cg_resp.id) остаются теми же.

Я хотел бы сохранить исходную ссылку cg_resp_id из таблицы equip_info, если имя ответственного является таким же, поэтому необходимо избегать ситуаций, таких как удаление и вставка нового.

Как это можно сделать в одном Sqlite sql sequence?

+0

Нужно ли это делать в одном заявлении на sql? Вы можете попробовать «выбрать» имя из своей базы данных. Если результирующий набор пуст, вы используете оператор 'insert', если в наборе содержится имя, которое вы называете оператором' update'. – JusticeJuice

+0

Это не совсем необходимо ... если возможно, в противном случае я сделаю это классическим. – REALSOFO

+0

Обновление cg_resp WHERE id = 1 – REALSOFO

ответ

0

Используйте INSERT OR REPLACE, который выполняет именно то, что вы хотите: вставьте новую строку, если имя не существует или обновляется в противном случае.

+2

REPLACE удаляет старую строку, если она существует. –

3

SQLite не имеет встроенного механизма, который не удаляет существующую строку.

Самый простой способ сделать это, чтобы положить логику в приложение:

cursor = db.execute("SELECT ...") 
if cursor.empty: 
    db.execute("INSERT ...") 
else: 
    db.execute("UPDATE ...") 

Если ваш язык позволяет считывать количество изменяемых строк, то можно сделать это с помощью двух команд SQL :

db.execute("UPDATE ...") 
if db.rowcount == 0: 
    db.execute("INSERT ...") 
Смежные вопросы