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
谁能帮我理解这段代码的作用?
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