我创建了一个表master-domain
。该表应该只有3条记录。
如何限制mysql数据库只允许超过该数量的记录?
是否有特定的sql命令来执行此操作?
这是我目前的SQL:
CREATE TABLE `mydatabase`.`master-domain`
(
`domain` VARCHAR( 50 ) NOT NULL COMMENT 'Domain Name',
PRIMARY KEY ( `domain` )
)
PS。我有godaddy,它包括phpMyAdmin,以及MySQL数据库。
答案 0 :(得分:5)
您可以将表的主键设为ENUM
类型的字段。例如:
CREATE TABLE test (
id enum('1','2') NOT NULL,
domain varchar(50) NOT NULL,
primary key (id));
更新时,必须将ID明确设置为“”,“1”或“2”。*它不能为空,每个ID只能有一条记录。该域仍存储在domain
字段中,因此无论外部系统查询此数据库,都希望获得所需的结果不会有任何问题。
如果您想要复制当前限制域名必须是唯一的限制,您还可以添加unique key (domain)
。
*请注意,允许使用空字符串(而不是NULL),因为枚举实际上是一种字符串。因此,您要指定两个允许的ID值,以便总共有三个。
或者:你想在这里实现/阻止什么?是否有一些自动化流程可能会向表中添加记录?您是在尝试确保不会意外地执行此操作,还是劫持您帐户的人无法执行此操作?
如果您的用户正在运行可能插入记录的进程,您可以将三条记录放入表中,然后从自己手中夺走INSERT权限。您仍然可以更改现有记录,但除非您明确重新授予该功能,否则您将无法再添加。
答案 1 :(得分:1)
您可以在MAX_ROWS parameter查看此处。但是,我相信这通常用于使表大小大于磁盘大小,我认为你不会得到你正在寻找使用它的限制。或者,您可以选择前3行。
我会质疑使用数据库只存储3行 - 这似乎是完全浪费。
答案 2 :(得分:0)
我认为MySQL没有提供这样的内置功能。一种解决方案是您可以创建触发器。
CREATE TRIGGER your_trigger_name
BEFORE INSERT ON master-domain
FOR EACH ROW
BEGIN
DECLARE cnt INT;
SELECT count(*) INTO cnt FROM master-domain;
IF cnt = 10 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'You can store only 3 records.';
END IF;
END;
在桌面上尝试以上触发器。希望这会对你有所帮助。