Ограничить количество записей, которые может иметь таблица - PullRequest
3 голосов
/ 08 марта 2012

Я создал таблицу, 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 ]

5 голосов
/ 09 марта 2012

Вы можете сделать первичный ключ таблицы полем типа ENUM.Например:

CREATE TABLE test (
    id enum('1','2') NOT NULL, 
    domain varchar(50) NOT NULL, 
    primary key (id));

Когда вы обновляете его, вы должны явно установить идентификатор в "", "1" или "2". * Это не может быть нулем, и может быть только одна записьс каждым ID.Домен по-прежнему хранится в поле domain, поэтому, надеюсь, что любая внешняя система запрашивает эту базу данных, не будет проблем с получением желаемых результатов.

Если вы хотите повторить текущее ограничение, согласно которому доменные имена должны быть уникальными, вы также можете добавить unique key (domain).

*, отметив, что пустая строка разрешена (а не совпадает сNULL), потому что enum на самом деле является типом строки.Таким образом, вы должны указать два допустимых значения идентификатора, чтобы иметь всего три значения.


Поочередно: Чего вы пытаетесь достичь / предотвратить здесь?Есть какой-то автоматизированный процесс, который может добавить записи в таблицу?Вы пытаетесь удостовериться, что вы случайно этого не делаете или что тот, кто похитил ваш аккаунт, не может этого сделать?

Если процесс, который может вставлять записи, выполняется для вашего пользователя, вы можете поместить свои три записи в таблицу и затем забрать привилегии INSERT у себя.Вы по-прежнему сможете изменять существующие записи, но вы не сможете добавлять больше, если вы не предоставите эту возможность явно.

1 голос
/ 08 марта 2012

Здесь вы можете посмотреть параметр MAX_ROWS .Тем не менее, я считаю, что это обычно используется, чтобы сделать размер таблицы больше, чем размер диска, и я не думаю, что вы получите ограничение, которое вы ищете для его использования.В качестве альтернативы, вы можете просто выбрать верхние 3 строки.

Я бы поставил под сомнение смысл использования базы данных для хранения только 3 строк - кажется, это полная трата.

0 голосов
/ 13 июля 2017

Я думаю, что нет такой встроенной функциональности, предоставляемой 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;

Попробуйте выше триггер на вашем столе. Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...