[MYSQL] BEFORE INSERT Trigger

Pagina: 1
Acties:

  • REDFISH
  • Registratie: Augustus 2001
  • Laatst online: 20-11-2024

REDFISH

beetje vreemd en niet lekker

Topicstarter
Ik zag dat het niet mogelijk was om een UNIQUE constraint toe te kennen aan een combinatie van 2 kolommen (datum, naam) en wil deze functionaliteit nu programmeren met een Trigger.

(Het is wel mogelijk om deze UNIQUE constraint te maken, maar MYSQL lapt deze gewoon aan zijn laars en je kunt dus lekker wel 2 records hebben met dezelfde datum en naam) Ook krijg ik een melding bij het editen in phpmyadmin

("PRIMARY" moet de naam van en alleen van een primaire sleutel zijn!)

In Interbase zou ik een Exception maken die wordt aangeroepen als de NEW waarden van datum en naam voorkomt bij hetzelfde id nummer, maar EXCEPTIONS bestaan niet in MYSQL?

Ik wil dat er niks geÏNSERT wordt als de combinatie van datum en naam al voorkomt

MySQL:
1
2
3
4
5
6
7
8
9
10
DELIMITER //
CREATE TRIGGER T_BI_tabelnaam
BEFORE INSERT ON tabelnaam
FOR EACH ROW
BEGIN
  IF CONCAT(NEW.datum, NEW.naam) in (SELECT (CONCAT(datum,naam) FROM tabelnaam))   THEN
  --doe niks
  END IF;
END; //
DELIMITER ; //


Ik heb geen zin om ook een else te moeten programmeren die de data daadwerkelijk invoegt als de record nog niet bestaat. Ik neem aan dat dit automatisch gebeurt als de IF statement niet waar oplevert?

Als een UNIQUE constraint wel over 2 fields kan, dan hoor ik het graag en gebruik ik die natuurlijk.

[ Voor 5% gewijzigd door REDFISH op 01-07-2007 18:08 ]


  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 24-09 20:59
Volgens mij is het gewoon prima mogelijk om een unique index op meerdere kolommen te zetten in MySql hoor. Misschien dat je bij het aanmaken van de index een fout maakt (phpmyadmin geeft waarschijnlijk ook niet voor niets een foutmelding).

Je kan natuurlijk ook altijd in de handleiding van MySql kijken.

If I can't fix it, it ain't broken.


  • REDFISH
  • Registratie: Augustus 2001
  • Laatst online: 20-11-2024

REDFISH

beetje vreemd en niet lekker

Topicstarter
Ja het maken lukt prima, maar als ik een INSERT probeer dan doet hij het gewoon met dezelfde naam en datum wat dus niet mag.

Ik heb deze syntax gebruikt:

MySQL:
1
CONSTRAINT un_datum_naam UNIQUE (datum, naam);


Of heb ik iets van een instelling over het hoofd gezien?

En is de link die jij geeft niet een INDEX maken om queries te optimalizeren en niet daadwerkelijk het maken van een UNIQUE constraint?

Hmm daar was ik dus mee in de war. Het klopt wat je zegt. Bedankt.

De syntax klopte gewoon uit mijn eerdere create statement, maar omdat ik een verwijssleutel had over dezelfde kolommen werkte het niet naar behoren. Is er een manier om die dubbele verwijssleutel te gebruiken icm de unique?

[ Voor 79% gewijzigd door REDFISH op 01-07-2007 19:08 ]


  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 24-09 20:59
Een Unique Index is ook een constraint, het dwingt namelijk iets af (een bepaalde kolom of kolommen moeten unique zijn in de tabel).

Volgens mij is je CONSTRAINT syntax ook niet helemaal correct, de handleiding zegt het volgende:
SQL:
1
2
ADD [CONSTRAINT [symbol]]
        UNIQUE [INDEX|KEY] [index_name] [index_type] (index_col_name,...)


Jouw sql code zou dan eigenlijk moeten zijn:
SQL:
1
CONSTRAINT UNIQUE INDEX un_datum_naam (datum, naam);


of in het kort:
SQL:
1
UNIQUE (datum, naam);

If I can't fix it, it ain't broken.