有人可以帮助我了解这段代码的作用吗?
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;
我了解表的创建和值的插入,但是我不了解其余的内容。
答案 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