MySQL 创建 table 并触发

MySQL create table and 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;

我了解 table 的创建和值的插入,但我不明白其余部分。

代码接缝是计算或检查多插入是否插入所有记录的变通方法。

    SELECT @xxx;

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

但是 MySQL 没有找到它的本机方法。

demo

一个更简单的 MySQL 代码,无需 TRIGGER 代码和 SET 即可完成相同的操作。
但它需要一个新的 table 结构才能运行。

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