Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Thiết lập giá trị cột (thêm ngày/giờ) ngay khi INSERT mà không cần UPDATE trong MySQL

Giới thiệu

Có thể tính toán giá trị cột (ví dụ: cộng thêm phút/giờ/ngày/tháng/năm) trực tiếp trong câu lệnh INSERT bằng hàm DATE_ADD(), tránh phải UPDATE sau đó.

Ví dụ thực hành

1. Tạo bảng DemoTable816

mysql> CREATE TABLE DemoTable816 (DueDate DATETIME);

2. INSERT với DATE_ADD

mysql> INSERT INTO DemoTable816 VALUES (DATE_ADD(NOW(), INTERVAL 3 MINUTE));
mysql> INSERT INTO DemoTable816 VALUES (DATE_ADD('2018-01-21 00:00:00', INTERVAL 3 HOUR));
mysql> INSERT INTO DemoTable816 VALUES (DATE_ADD('2016-11-11 12:40:00', INTERVAL 3 DAY));
mysql> INSERT INTO DemoTable816 VALUES (DATE_ADD('2018-12-01 11:00:00', INTERVAL 3 MONTH));
mysql> INSERT INTO DemoTable816 VALUES (DATE_ADD('2011-03-21 10:00:00', INTERVAL 3 YEAR));

3. Kết quả

+---------------------+
| DueDate             |
+---------------------+
| 2019-08-03 13:08:43 |  -- NOW() + 3 phút
| 2018-01-21 03:00:00 |  -- + 3 giờ
| 2016-11-14 12:40:00 |  -- + 3 ngày
| 2019-03-01 11:00:00 |  -- + 3 tháng
| 2014-03-21 10:00:00 |  -- + 3 năm
+---------------------+

Các hàm liên quan

  • DATE_ADD(date, INTERVAL expr unit) — Cộng.
  • DATE_SUB(date, INTERVAL expr unit) — Trừ.
  • ADDDATE() / SUBDATE() — Alias.
  • Cú pháp ngắn: date + INTERVAL 3 DAY, date - INTERVAL 1 MONTH.

Ứng dụng thực tế

  • Tự động đặt due_date = DATE_ADD(created_at, INTERVAL 30 DAY) khi tạo hóa đơn.
  • Tính hạn bảo hành: warranty_end = DATE_ADD(purchase_date, INTERVAL 1 YEAR).
  • Lịch nhắc nhở: remind_at = DATE_ADD(event_time, INTERVAL -1 HOUR).

Lưu ý

  • NOW() được đánh giá một lần cho cả câu lệnh (tất cả hàng INSERT cùng lúc có cùng NOW()).
  • Dùng DEFAULT (DATE_ADD(NOW(), INTERVAL 1 DAY)) trong định nghĩa cột (MySQL 8.0.13+) để tự động gán khi INSERT không cung cấp giá trị.