CREATE TABLE test1(a1 INT);
CREATE TABLE test4(
a4 INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
b4 INT DEFAULT 0);
DELIMITER |
CREATE TRIGGER testref BEFORE INSERT ON test1 FOR EACH ROW
BEGIN
UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
END
|
DELIMITER ;
INSERT INTO test4 (a4)
VALUES (0), (0), (0), (0), (0), (0), (0), (0), (0),(0);
如果将下述值插入表test1,如下所示:
mysql> INSERT INTO test1 VALUES
-> (1), (3), (1), (7), (1), (8), (4), (4);
Query OK, 8 rows affected (0.01 sec)Records: 8 Duplicates: 0 Warnings: 0那么
mysql> SELECT * FROM test4;
+----+------+
| a4 | b4 |
+----+------+
| 1 | 3 |
| 2 | 0 |
| 3 | 1 |
| 4 | 2 |
| 5 | 0 |
| 6 | 0 |
| 7 | 1 |
| 8 | 1 |
| 9 | 0 |
| 10 | 0 |
+----+------+
10 rows in set (0.00 sec)我不是很明白触发器后面的插入语句有什么用,T4表已经声明a4是自增列,不明白这里插入0是什么意思?b4最后的结果为什么是3,0,1,2。。呢?
CREATE TABLE test4(
a4 INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
b4 INT DEFAULT 0);
DELIMITER |
CREATE TRIGGER testref BEFORE INSERT ON test1 FOR EACH ROW
BEGIN
UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
END
|
DELIMITER ;
INSERT INTO test4 (a4)
VALUES (0), (0), (0), (0), (0), (0), (0), (0), (0),(0);
如果将下述值插入表test1,如下所示:
mysql> INSERT INTO test1 VALUES
-> (1), (3), (1), (7), (1), (8), (4), (4);
Query OK, 8 rows affected (0.01 sec)Records: 8 Duplicates: 0 Warnings: 0那么
mysql> SELECT * FROM test4;
+----+------+
| a4 | b4 |
+----+------+
| 1 | 3 |
| 2 | 0 |
| 3 | 1 |
| 4 | 2 |
| 5 | 0 |
| 6 | 0 |
| 7 | 1 |
| 8 | 1 |
| 9 | 0 |
| 10 | 0 |
+----+------+
10 rows in set (0.00 sec)我不是很明白触发器后面的插入语句有什么用,T4表已经声明a4是自增列,不明白这里插入0是什么意思?b4最后的结果为什么是3,0,1,2。。呢?
就是插入10条记录,主键不能重复,插入1-10我不是很明白触发器后面的插入语句有什么用
插入TEST1时对TEST4替换最后的结果为什么是3,0,1,2。。呢?
1有3个
4:2个
7:1个
VALUES (0), (0), (0), (0), (0), (0), (0), (0), (0),(0);你说的没错,a4 是自增值,对于自增值来说,你可以在insert 语句中用 null, 或 0 来做输入,或者如你所说在前面不要把它加在表的列名中比如
insert into test4(a5) values (0);
但由于这个test4表就两个字段,你要么把字段全写,或者想省略,但无论是a4 或b4你总得保留一个吧。
对UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
这样你的test4中的值就被更新了。