MYSQL – TRIGGER 结合 IF + INSERT INTO

huangapple go评论102阅读模式
英文:

MYSQL - TRIGGER combined with IF + INSERT INTO

问题

我的代码故意没有主键或外键,所以我正在寻找一种不添加它们的解决方案。
我的错误是:

错误代码:1054. 未知列 'cedula' 在 '字段列表' 中

触发器是问题的原因,因为当我删除触发器时,它能够正常工作,所以我不知道如何创建触发器。我希望触发器能够在名为 audit1 的表中存储插入到 personas表 的重复数据,以便我可以知道哪些ID在表 personas 中出现两次或更多次。

希望您能帮助我。我将我的所有代码都写在这里。

  1. CREATE DATABASE auditoria;
  2. USE auditoria;
  3. CREATE TABLE personas
  4. (
  5. cedula BIGINT,
  6. nombre VARCHAR(30),
  7. codciudadnacimiento INT,
  8. codactividadlaboral INT
  9. );
  10. CREATE TABLE ciudadesnacimiento
  11. (
  12. codciudadnacimiento INT,
  13. nombreciudadnacimiento VARCHAR(30)
  14. );
  15. CREATE TABLE actividadeslaborales
  16. (
  17. codactividadlaboral INT,
  18. nombreactividadlaboral VARCHAR(30)
  19. );
  20. CREATE TABLE audit1
  21. (
  22. cedula BIGINT,
  23. nombre VARCHAR(30),
  24. observacion VARCHAR(30),
  25. fecha DATETIME
  26. );
  27. DELIMITER //
  28. CREATE TRIGGER SPT1
  29. AFTER INSERT ON personas
  30. FOR EACH ROW
  31. BEGIN
  32. IF (cedula = NEW.cedula)
  33. THEN
  34. INSERT INTO audit1 VALUES
  35. (NEW.cedula, NEW.nombre, 'DUPLICATE ID', NOW());
  36. END IF;
  37. END //
  38. DELIMITER ;
  39. INSERT INTO ciudadesnacimiento VALUES
  40. (1, 'Bogota'),
  41. (3, 'Cartagena');
  42. INSERT INTO actividadeslaborales VALUES
  43. (1, 'Medico'),
  44. (2, 'Abogado');
  45. INSERT INTO personas VALUES
  46. (100,'Megadeth', 1, 1),
  47. (100,'Megadeth', 1, 1),
  48. (100,'Megadeth', 1, 1),
  49. (200,'Babasonicos', 2, 2),
  50. (200,'Babasonicos', 2, 2),
  51. (200,'Babasonicos', 2, 2),
  52. (300,'Spinetta', 3, 3),
  53. (400,'Paez', 3, 3),
  54. (500,'Charly', 3, 3),
  55. (500,'Charly', 3, 3);

我希望能够在不出错的情况下向 personas 表中插入数据。

英文:

everyone

My code doesn't have primary key nor foreign key on purpose so I'm looking for a solution without adding that.
My error is:

> Error Code: 1054. Unknown column 'cedula' in 'field list'

The trigger is the problem because when I drop the trigger it works well so I don't know how to create the trigger. What I want with the trigger is to have in a table called audit1 the duplicate data that is INSERT INTO personas table so I can tell which ID is twice or more in the table personas.

Hope you can help me. I write my all code down here.

  1. CREATE DATABASE auditoria;
  2. USE auditoria;
  3. CREATE TABLE personas
  4. (
  5. cedula BIGINT,
  6. nombre VARCHAR(30),
  7. codciudadnacimiento INT,
  8. codactividadlaboral INT
  9. );
  10. CREATE TABLE ciudadesnacimiento
  11. (
  12. codciudadnacimiento INT,
  13. nombreciudadnacimiento VARCHAR(30)
  14. );
  15. CREATE TABLE actividadeslaborales
  16. (
  17. codactividadlaboral INT,
  18. nombreactividadlaboral VARCHAR(30)
  19. );
  20. CREATE TABLE audit1
  21. (
  22. cedula BIGINT,
  23. nombre VARCHAR(30),
  24. observacion VARCHAR(30),
  25. fecha DATETIME
  26. );
  27. DELIMITER //
  28. CREATE TRIGGER SPT1
  29. AFTER INSERT ON personas
  30. FOR EACH ROW
  31. BEGIN
  32. IF (cedula = NEW.cedula)
  33. THEN
  34. INSERT INTO audit1 VALUES
  35. (NEW.cedula, NEW.nombre, 'DUPLICATE ID', NOW());
  36. END IF;
  37. END //
  38. DELIMITER ;
  39. INSERT INTO ciudadesnacimiento VALUES
  40. (1, 'Bogota'),
  41. (3, 'Cartagena');
  42. INSERT INTO actividadeslaborales VALUES
  43. (1, 'Medico'),
  44. (2, 'Abogado');
  45. INSERT INTO personas VALUES
  46. (100,'Megadeth', 1, 1),
  47. (100,'Megadeth', 1, 1),
  48. (100,'Megadeth', 1, 1),
  49. (200,'Babasonicos', 2, 2),
  50. (200,'Babasonicos', 2, 2),
  51. (200,'Babasonicos', 2, 2),
  52. (300,'Spinetta', 3, 3),
  53. (400,'Paez', 3, 3),
  54. (500,'Charly', 3, 3),
  55. (500,'Charly', 3, 3);

I want to be able to insert data into personas table without that mistake.

答案1

得分: 1

以下是您需要的中文翻译:

似乎您需要的是

  1. CREATE TRIGGER SPT1
  2. BEFORE INSERT ON personas
  3. FOR EACH ROW
  4. BEGIN
  5. IF EXISTS (SELECT NULL FROM personas WHERE cedula = NEW.cedula)
  6. THEN
  7. INSERT INTO audit1 VALUES
  8. (NEW.cedula, NEW.nombre, '重复的ID', NOW());
  9. END IF;
  10. END

您可以在 https://dbfiddle.uk/94TG_YmB 上查看示例。

英文:

It seems that you need in

  1. CREATE TRIGGER SPT1
  2. BEFORE INSERT ON personas
  3. FOR EACH ROW
  4. BEGIN
  5. IF EXISTS (SELECT NULL FROM personas WHERE cedula = NEW.cedula)
  6. THEN
  7. INSERT INTO audit1 VALUES
  8. (NEW.cedula, NEW.nombre, 'DUPLICATE ID', NOW());
  9. END IF;
  10. END

https://dbfiddle.uk/94TG_YmB

huangapple
  • 本文由 发表于 2023年6月13日 07:47:46
  • 转载请务必保留本文链接:https://go.coder-hub.com/76460907.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定