2015-12-08 3 views
0

Я хочу запросить одну таблицу, чтобы увидеть, существуют ли строки с типом «А». поэтому я использую этот SQL:Mysql как это сделать без блокировки

SELECT EXISTS(select * from %T where type = 'A'); 

тогда мне нужно обновить значение столбца другой таблицы к вышеупомянутому результату. Чтобы предотвратить вставку с типом «А» во время обновления, я думаю использовать блокировку. но блокировка очень дорогая, есть ли другой альтернативный способ сделать это без блокировки?

Если мы должны использовать блокировку, я думаю, что если таблица уже имела тип A, нет необходимости блокировать вставку во время обновления, потому что результат все равно будет 1. предотвращать вставку, если нет строки с типом A . Как это сделать?

Спасибо!

+1

Вы пытались выполнить транзакцию в SQL? Я думаю, вы можете это использовать. Эта ссылка поможет вам «http://dev.mysql.com/doc/refman/5.7/en/commit.html» –

+0

Разве вы не можете просто ОБНОВИТЬ another_table SET field = (SELECT EXISTS ...)? – StanislavL

+0

Конечно, любой замок дешевле, чем обновление. Какова ваша фактическая цель? Вместо того, чтобы обманывать явным блокированием, вы можете захотеть ['start transaction' ...' commit'] (http://dev.mysql.com/doc/refman/5.7/en/commit.html) – wallyk

ответ

0

Поскольку вы хотите обновить таблицу, когда есть тип «A», обычно я предлагаю вам обновлять или проверять каждый раз сразу после вставки или удаления строки.

Или вы могли бы сделать что-то вроде этого:

UPDATE table1 t1 
LEFT JOIN table2 t2 ON t1.type = t2.type 
SET t1.column1 = 1 
WHERE t2.type IS NOT NULL 

или

UPDATE table1 t1 
SET t1.column1 = 1 
WHERE EXISTS (
    SELECT ... 
    FROM table2 
    WHERE type = 'A' 
); 

Пожалуйста, дайте мне больше деталей, таких, как то, что ваш стол, как и то, что именно вы хотите сделать, чтобы мы могли обсудить в дальнейшем.

+0

Спасибо! Если я использую UPDATE table1 t1 SET t1.column1 = 1 WHERE EXISTS ( SELECT ... FROM table2 ГДЕ тип = 'A' ); будет вставляться с типом = 'A' в таблицу2 во время обновления? – Jess

Смежные вопросы