如果有人在users表中插入一个值,我想创建一个新表。我有一个触发器:
但它会引发错误:
MySQL meldet:#1422 - 存储函数或触发器中不允许显式或隐式提交。
然后我尝试使用begin和end语句手动创建它,但它引发了另一个错误:
如果我使用像delete from users
这样的简单语句执行相同的触发器,则触发器可以正常工作。有人知道如何使用create语句创建触发器吗?
还可以选择如何创建像user_22
这样的表名(用户插入的用户ID)?
答案 0 :(得分:1)
所有数据定义语言(DDL)语句(如create,alter,drop)都会导致事务的隐式提交,因此它们不允许在用户定义的函数或触发器中使用,因为它们应该在与sql相同的事务中运行调用它们的语句。您可以创建一个存储过程,在user表中插入数据并创建另一个表,但我也不会这样做。
此外,您似乎有一个严重的设计缺陷:您不应该为每个用户创建一个单独的表。您可以将用户相关信息存储在一个表中,其中用户ID将告诉您某个记录属于哪个用户。