这是我的表
`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的发展,也许毕竟这一次有了这样的方式。
答案 0 :(得分:1)
最简单的方法是管理权限,以便您的软件使用的用户没有插入权限,但确实拥有该表的更新权限。
答案 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;
为什么不在插入之前?一些策略建议导致查询失败,但我对这种方法感到很不舒服。
我希望它有所帮助。