休眠:table 锁定 select?

Hibernate: table lock with a select?

我有这个方法 select 是 table 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 中截断 table:

TRUNCATE wla.product_customer; 

但是 truncate 被锁定阻止并且永远不会结束。 为什么一个简单的 select 行应该锁定 table?

PS:我可以使用 DELETE 删除行,只有截断被锁定

您需要在 运行 TRUNCATE 语句之前在代码中提交事务。 MySQL维护元数据锁,如果有来自DML语句的锁,需要在执行DDL语句(本例为TRUNCATE)之前通过commit释放。 SELECT 和 DELETE 是 DML 语句,TRUNCATE 是 DDL 语句。因此,除非释放锁,否则您将能够执行 DELETE 但不能执行 TRUNCATE。