SQL - дубликаты записи

262
03 мая 2018, 09:38

при парсинге магазинов у товаров возникает одна проблема:

В случае если магазина нету в базе данных, то он добавляется в него. При работе в несколько потоков возникает иногда ситуация:

У нескольких товаров (1 поток, под каждый товар) может иметь один и тот же магазин, и если этого магазина нет, то они одновременно добавляют одну и ту же запись в бд, хотя проверка на наличие этого магазина есть.

Как можно обойти эту проблему? Может как нибудь сделать совокупность несколько столбцов уникальными? (можно ли вообще так сделать?)

Проблема возникает именно, когда работает несколько потоков, чем больше, тем больше записей может добавиться. При работе в 1 поток проблемы нет.

Код

sql = """SELECT id FROM shop WHERE company=%s and name=%s and address=%s and locality_id=%s and class=%s"""
data = [(company, name_shop, address_shop, city_id, "1")]
print(data)
row = select_request_db(sql,data)
log.info("Выборка")
if(len(row)==1):
  shop_id = row [0]
else:
  if(len(row)==0):
     sql = """INSERT INTO shop(class,company,name,address,locality_id) VALUES (%s, %s, %s, %s,%s)"""
     data = [("1",company,name_shop,address_shop,city_id)]
     shop_id= insert_request_db (sql,data)
     log.info("Добавление")
  else:
     print("Ошибка")
     exit(0)

READ ALSO
MySQL Workbench has encountered a problem

MySQL Workbench has encountered a problem

Не получается создать соединение в Workbench, показывает следующее:

613
Забыл при создании сделать поле с ID AI

Забыл при создании сделать поле с ID AI

При создании таблицы забыл сделать поле AIКак сейчас, не дропая, сделать определённое поле AI?

246
UPDATE триггером той же таблицы

UPDATE триггером той же таблицы

Мне нужно в триггере обнулить все поля dflt таблицы кроме того, которому ставится dflt=1

245
Не устанавливается MySQL 5.7 на ubuntu 14

Не устанавливается MySQL 5.7 на ubuntu 14

Пытаюсь установить MySQL сервер версии 57, но в репозитории он 5

292