2014-03-05 102 views
0

在MySQL中,我需要一个只存储一个静态值的表,应用程序可以根据需要访问和更改该静态值。为此,我必须确保不能插入另一行。如何在不允许插入的情况下创建MySQL表

所以我需要创建一个表,允许更新操作,但没有插入和删除操作。 是否有另一种方法检查触发器中表的大小,如果> 1取消操作?

+0

如果你不想更新或插入,你如何改变任何东西? –

+0

应该允许更新,只允许插入和删除 – Jbartmann

+1

如果您已经知道表的记录的确切数量,那么您可以简单地执行查询来检查计数,并且如果它返回的值超过预定义数字,则取消操作。 – har2vey

回答

1

如前所述Stephan的一个可能的解决方案是通过创建另一用户和指定这样的权限,从该表中的行不能被插入或删除。我认为这是一个很好的解决方案,但由于我通过现有的用户访问多个表,并且我不想创建另一个表,我用两个触发器解决了问题。

因此,这里是我的解决方案:

触发:On_Insert_Check_Count

BEGIN 

IF ((SELECT COUNT(*) FROM oe_last_tabkey) >= 1) THEN 
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = "DIE: Only Update allowed on this table."; 
END IF; 

END 

触发:On_Delete

BEGIN 

SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = "DIE: Only Update allowed on this table."; 

END 

通过这一解决方案,每次的任何用户试图插入(只要有分钟1行存在)或删除,MySQL将通过消息取消操作:“DIE:只允许在此表上更新”。

1

这可以通过指定MySQL用户用于interogate表的所需特权来控制。

例如,您可以创建表并将值(一次)插入一个用户,然后使用另一个仅具有更新权限的用户。

可以读取更多here

相关问题