Guest User

Untitled

a guest
May 22nd, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.81 KB | None | 0 0
  1. CREATE TABLE a (
  2. id int(11) NOT NULL AUTO INCREMENT,
  3. b varchar(10) NOT NULL,
  4. d date NULL,
  5. PRIMARY KEY (id)
  6. ) ENGINE=InnoDB DEFAULT CHARSET=latin1; //
  7.  
  8. CREATE PROCEDURE CheckNoDuplicates (new_id int(11), new_b varchar(10), new_d date)
  9. BEGIN
  10. DECLARE existingId INT(11);
  11.  
  12. SELECT id INTO existingId
  13. FROM a
  14. WHERE new_b = b
  15. AND d IS NOT NULL AND new_d IS NOT NULL AND YEAR(d) = YEAR(new_d)
  16. OR d IS NULL AND new_d IS NULL
  17. )
  18. AND id <> new_id;
  19.  
  20. IF existingId IS NOT NULL THEN
  21. SIGNAL SQLSTATE '23000';
  22. END IF;
  23. END //
  24.  
  25. CREATE TRIGGER NoDuplicateOnInsert BEFORE INSERT ON a
  26. FOR EACH ROW
  27. BEGIN
  28. CALL CheckNoDuplicates(NEW.id, NEW.b, NEW.d);
  29. END //
  30.  
  31. CREATE TRIGGER NoDuplicateOnInsert BEFORE UPDATE ON a
  32. FOR EACH ROW
  33. BEGIN
  34. CALL CheckNoDuplicates(NEW.id, NEW.b, NEW.d);
  35. END //
Add Comment
Please, Sign In to add comment