限制表可以拥有的记录数

时间:2012-03-08 19:27:11

标签: mysql sql

我创建了一个表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数据库。

3 个答案:

答案 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;

在桌面上尝试以上触发器。希望这会对你有所帮助。