MySQL“锁定”表只在一行最大

时间:2016-05-22 00:18:23

标签: php apache

这是我的表

`id` int(11) NOT NULL,
`notifyroles` varchar(50) NULL,
 PRIMARY KEY  (`id`)
 ENGINE=MyISAM  DEFAULT CHARSET=utf8

我用它来存储一组数据的动态值,这些数据被内爆到诸如item1,item2,item3之类的字符串,当我从数据库中提取数据时,我将再次爆炸这些值。

当我初始化我的软件时,我插入行ID 1,然后将notifyroles元素保留为NULL,直到我使用它为止。

它将会也应该永远不会有任何其他行,但是第1行,所以我选择不使用自动增量功能。我从不使用INSERT我总是只对id 1使用UPDATE。

因为我不想写一堆代码来检查更多行并截断它并重置它,如果存在和所有这些东西我的问题是:

有没有办法锁定表格,使其不能超过1行?如果有人试图插入另一行,它将失败。

PS。我希望随着MySQL的发展,也许毕竟这一次有了这样的方式。

2 个答案:

答案 0 :(得分:1)

最简单的方法是管理权限,以便您的软件使用的用户没有插入权限,但确实拥有该表的更新权限。

请参阅:http://dev.mysql.com/doc/refman/5.7/en/grant.html

答案 1 :(得分:0)

没有办法锁定表,但你可以利用MySQL触发器。顾名思义,它们会在执行指定操作时立即激活,在本例中为插入操作。也许试试这个:

CREATE TRIGGER locktable
AFTER INSERT ON mytable
FOR EACH ROW
BEGIN
  IF (NEW.id != --id of the row you want protected--) THEN
    DELETE FROM mytable WHERE id = NEW.id;
  END IF;
END;

为什么不在插入之前?一些策略建议导致查询失败,但我对这种方法感到很不舒服。

我希望它有所帮助。