[英]Hibernate: table lock with a select?
我有这种方法可以从表product_customer中选择一行:
public static String getQuoziente(String pcCustomer, String pcAccountNumber, String prodCode) {
String quoziente=null;
Session session = HibernateUtil.getSessionFactory().openSession();
try {
String sql = String.format("SELECT pc_quoziente FROM product_customer " +
"WHERE pc_customer=:cliente and pc_account_number=:numacc and pc_prod_desc=:prod");
quoziente = (String) session.createSQLQuery(sql)
.setParameter("cliente", pcCustomer)
.setParameter("numacc", pcAccountNumber)
.setParameter("prod", prodCode)
.uniqueResult();
} finally {
session.close();
}
return quoziente;
}
此查询后,尝试使用以下命令从MySqlWorkbench截断表:
TRUNCATE wla.product_customer;
但是截断被锁定,并且永远不会结束。 为什么简单的选择行应该锁定表?
PS:我可以使用DELETE删除行,只有截断被锁定
在运行TRUNCATE语句之前,您需要在代码中提交事务。 MySQL维护元数据锁,如果DML语句有锁,则需要在执行DDL语句之前通过提交释放它(在这种情况下为TRUNCATE)。 SELECT和DELETE是DML语句,而TRUNCATE是DDL语句。 因此,除非释放锁,否则您将能够执行DELETE但不能执行TRUNCATE。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.