MySQL创建表和触发器

时间:2019-02-05 19:21:16

标签: mysql database-trigger

有人可以帮助我了解这段代码的作用吗?

CREATE TABLE `exams` (

`id` int(11) NOT NULL, `score` int(2) NOT NULL, `class` int(11) NOT NULL, `date` date NOT NULL, PRIMARY KEY (`class`,`date`,`id`));

CREATE TRIGGER `trig3` BEFORE INSERT ON `exams` FOR EACH ROW SET @xxx = @xxx + 1;

SET @xxx = 0;

INSERT INTO `exams` VALUES (10001,24,1,'2013-09-16'), (10005,30,1,'2013-09-16'), (10083,30,1,'2014-03-21'), (10120,26,1,'2014-03-21'), (10035,23,1,'2014-07-22'), (10005,28,2,'2014-01-23'), (10001,27,2,'2014-06-30'), (10001,25,4,'2014-01-23'), (10083,22,4,'2014-01-23'), (10120,30,4,'2014-01-23'), (10005,22,4,'2014-03-21');

SELECT @xxx;

我了解表的创建和值的插入,但是我不了解其余的内容。

1 个答案:

答案 0 :(得分:2)

代码似乎是一种变通方法,可以计算或检查多重插入是否插入了所有记录。

    SELECT @xxx;

| @xxx |
| ---- |
| 11   |

但是MySQL没有一种本机的方法来发现这一点。

请参阅demo

一种更简单的MySQL代码,无需触发代码和SET即可执行相同的操作。
但这需要一个新的表结构才能起作用。

CREATE TABLE `esami` (
    `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY
  , `id_studente` int(11) NOT NULL
  , `voto` int(2) NOT NULL
  , `id_corso` int(11) NOT NULL
  , `data` date NOT NULL
  , UNIQUE KEY (`id_corso`,`data`,`id_studente`)    
);

和查询以测试是否所有记录都被多重插入插入。

SELECT
  COUNT(*)
FROM
  esami
WHERE
  id BETWEEN LAST_INSERT_ID() AND LAST_INSERT_ID() + 11;

请参阅demo