MariaDB Zkontrolujte, zda hodnota atributu w/ jiné tabulky atribut

0

Otázka

Chci vás ujistit, při vložení manažer, který vedoucí oddělení datum zahájení [ODDĚLENÍ.mgr_start_date] přichází poté, co jeho datum narození [ZAMĚSTNANEC.bdate], jak to mám udělat, že?

CREATE TABLE IF NOT EXISTS IF NOT EXISTS EMPLOYEE
(
    ssn INT(16) unsigned NOT NULL,
    fname VARCHAR(16),
    lname VARCHAR(16),
    bdate DATE,
    address VARCHAR(32),
    gender enum('m','f'),
    salary decimal(16,2),
    Dno VARCHAR(8),
    PRIMARY KEY (ssn)
);

CREATE TABLE IF NOT EXISTS IF NOT EXISTS DEPARTMENT
(
    mgr_ssn INT(16) unsigned,
    Dname VARCHAR(32),
    mgr_start_date DATE,
    Dnumber VARCHAR(8),
    PRIMARY KEY (Dnumber),
    FOREIGN KEY (mgr_ssn) REFERENCES EMPLOYEE(ssn)
);
mariadb mariadb-10.4
2021-11-22 15:09:40
1

Nejlepší odpověď

0

Budete muset udělat to s spoušť.

ZKONTROLUJTE, zda omezení může odkazovat pouze sloupce v tabulce, kde omezení je definované.

Plné SQL standard obsahuje typ omezení se nazývá TVRZENÍ, která umožňuje multi-table omezení, ale MariaDB nemusí implementovat tuto funkci SQL (velmi málo značek SQL databázích realizovat to).

CREATE TRIGGER t BEFORE INSERT ON DEPARTMENT
FOR EACH ROW BEGIN
  IF NEW.mgr_start_date < (SELECT bdate FROM EMPLOYEE WHERE ssn = NEW.mgr_ssn) THEN
    SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'manager is way too young';
  END IF;
END

Test:

insert into EMPLOYEE set ssn=123, bdate='2021-01-01';

insert into DEPARTMENT set mgr_ssn=123, dnumber='1', mgr_start_date='2010-01-01';

ERROR 1644 (45000): manager is way too young
2021-11-22 17:14:03

#1064 - máš chybu v SQL syntax; check the manual, který odpovídá vaší MariaDB server verze pro správné syntaxe poblíž " na řádku 4SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'manager is way too young';
Muhannad Bashar

Proč mám, že chybovat?
Muhannad Bashar

Co dělá SELECT VERSION(); vrátit se k vám?
Bill Karwin

10.4.21-MariaDB
Muhannad Bashar

Hmm. MariaDB by měl podporovat SIGNAL od verze 5.5. Vidět mariadb.com/kb/en/signal. Ale nechci používat MariaDB, takže nemůžu vyzkoušet.
Bill Karwin

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................