Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql如何做到这一点而不锁定_Mysql_Sql_Database Performance_Sqlperformance - Fatal编程技术网

Mysql如何做到这一点而不锁定

Mysql如何做到这一点而不锁定,mysql,sql,database-performance,sqlperformance,Mysql,Sql,Database Performance,Sqlperformance,我想查询一个表,看看是否存在任何“A”类型的行。 因此,我使用以下sql: SELECT EXISTS(select * from %T where type = 'A'); 然后我需要将另一个表的列值更新为上述结果。为了防止在更新期间发生“A”类型的插入,我考虑使用锁。但是锁是非常昂贵的,有没有其他方法可以不用锁来实现呢 若我们必须使用lock,我认为若表已经有了类型A,那个么在更新期间就不需要锁定insert,因为结果仍然是1。仅当没有类型为A的行时才防止插入。如何执行 谢谢 由于您希望在

我想查询一个表,看看是否存在任何“A”类型的行。 因此,我使用以下sql:

SELECT EXISTS(select * from %T where type = 'A');
然后我需要将另一个表的列值更新为上述结果。为了防止在更新期间发生“A”类型的插入,我考虑使用锁。但是锁是非常昂贵的,有没有其他方法可以不用锁来实现呢

若我们必须使用lock,我认为若表已经有了类型A,那个么在更新期间就不需要锁定insert,因为结果仍然是1。仅当没有类型为A的行时才防止插入。如何执行


谢谢

由于您希望在存在类型“a”时更新表,通常我建议您在插入或删除行后立即进行更新或检查

或者你可以这样做:

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


请提供更多详细信息,例如您的表是什么样的,以及您想要做什么,以便我们进一步讨论。

您是否尝试过SQL中的事务处理?我想你可以用这个。此链接将帮助您更新另一个_table SET field=SELECT EXISTS…?当然,任何锁都比更新便宜。你的实际目标是什么?您可能想要的不是显式锁定,而是谢谢!如果我使用UPDATE table1 t1 SET t1.column1=1(如果存在),请选择。。。来自表2,其中类型='A';更新期间是否允许在表2中插入类型为='A'的内容?
UPDATE table1 t1
SET t1.column1 = 1
WHERE EXISTS (
    SELECT ...
    FROM table2
    WHERE type = 'A'
);