триггеры mysql - ограничение количества значений, хранящихся в столбце - PullRequest
0 голосов
/ 26 октября 2018

Имя базы данных: Библиотека

Clients table: 
ID_number | Surname | Forename ...

Loans table: 
Loan_ID | Borrower | Book | Date

Клиенты ID_Number - это внешний ключ в Loans.Borrower

Я хочу ограничить количество кредитов на клиента до <= 5 </p>

Так что если в столбце Заемщик ID_Number повторяется> 5 раз, не вставляйте.

Как бы я реализовал это с помощью TRIGGER?

Пока у меня есть:

CREATE TRIGGER limit_borrows BEFORE INSERT

ON Loans

FOR EACH ROW

BEGIN

[NO IDEA WHAT GOES HERE]

IF value in borrow column repeated > 5 
Do not insert

[NO IDEA WHAT GOES HERE]



END IF;

END // 

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

Вам нужно посчитать количество идентификаторов в вашем операторе if и вызвать ошибку, чтобы строка не вставлялась:

CREATE TRIGGER limit_borrows BEFORE INSERT

ON Loans

FOR EACH ROW

BEGIN
DECLARE _id (borrower id data type here)

SELECT borrower from loans where loan_ID = new.loan_ID into _id;

SET @count = (select count(1) from loans where borrower_id = _id ;
IF @count > 5
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'your error message';

END IF;

END // 
0 голосов
/ 26 октября 2018

Вот одна идея ...

DROP TABLE IF EXISTS loans;

CREATE TABLE loans
(loan_id SERIAL PRIMARY KEY
,user_id INT NOT NULL
);
INSERT INTO loans (user_id) 
SELECT 128 
  FROM (SELECT 1) x 
  LEFT 
  JOIN 
     ( SELECT user_id
            , COUNT(*) total 
         FROM loans 
        GROUP  
           BY user_id
     )  y 
    ON y.user_id = 128
   AND y.total >= 5
 WHERE y.user_id IS NULL;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...