DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table
(id SERIAL PRIMARY KEY
,user_id INT NOT NULL
,dt DATETIME NOT NULL
);
INSERT INTO my_table (user_id,dt) VALUES (101,NOW());
Query OK, 1 row affected (0.00 sec)
SELECT * FROM my_table;
+----+---------+---------------------+
| id | user_id | dt |
+----+---------+---------------------+
| 1 | 101 | 2018-10-07 23:21:44 |
+----+---------+---------------------+
1 row in set (0.00 sec)
……大约一分钟后……
INSERT INTO my_table (user_id,dt)
SELECT 101,NOW()
FROM (SELECT 1) x
LEFT
JOIN my_table y
ON y.user_id = 101
AND y.dt >= NOW() - INTERVAL 60 SECOND
WHERE y.id IS NULL;
Query OK, 1 row affected (0.00 sec)
Records: 1 Duplicates: 0 Warnings: 0
SELECT * FROM my_table;
+----+---------+---------------------+
| id | user_id | dt |
+----+---------+---------------------+
| 1 | 101 | 2018-10-07 23:21:44 |
| 2 | 101 | 2018-10-07 23:23:39 |
+----+---------+---------------------+
2 rows in set (0.00 sec)
……几秒钟后……
INSERT INTO my_table (user_id,dt)
SELECT 101,NOW()
FROM (SELECT 1) x
LEFT
JOIN my_table y
ON y.user_id = 101
AND y.dt >= NOW() - INTERVAL 60 SECOND
WHERE y.id IS NULL;
Query OK, 0 rows affected (0.00 sec)
SELECT * FROM my_table;
+----+---------+---------------------+
| id | user_id | dt |
+----+---------+---------------------+
| 1 | 101 | 2018-10-07 23:21:44 |
| 2 | 101 | 2018-10-07 23:23:39 |
+----+---------+---------------------+
2 rows in set (0.00 sec)