2011-11-19 8 views
46

SEE: Update timestamp column in Application or Database?MySQL Workbench: cách thiết lập "ON UPDATE"? và CURRENT_TIMESTAMP?

Tôi đang cố gắng mô hình một cái gì đó tương tự trong Bàn làm việc, nhưng tôi không biết vị trí đặt phần "CẬP NHẬT". Điều tốt nhất tôi có thể nhận được như sau:

-- ----------------------------------------------------- 
-- Table `foo`.`test` 
-- ----------------------------------------------------- 
DROP TABLE IF EXISTS `foo`.`test` ; 

CREATE TABLE IF NOT EXISTS `foo`.`test` (
    `test_id` INT NOT NULL , 
    `date_created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , 
    `date_updated` TIMESTAMP NOT NULL DEFAULT 0 , 
    PRIMARY KEY (`test_id`)) 
ENGINE = InnoDB; 

Tôi nên làm gì trong Bàn làm việc để thiết lập phần CẬP NHẬT này?

Ngoài ra, tôi có quy tắc rằng tất cả dấu thời gian được lưu trữ trong cơ sở dữ liệu phải là UTC. Làm cách nào để tạo CURRENT_TIMESTAMP, NOW, v.v ...?

+0

Đối với bất cứ ai quan tâm, tôi đã tạo ra một [Workbench kịch bản] (https: //gist.github. com/pepijnolivier/61ba3d69af2884ef2d6fa107d657e2d5) tự động thêm các cột dấu thời gian trên tất cả các bảng tổng hợp được chấp nhận trên bảng –

Trả lời

91

Tôi đang sử dụng MySQL Workbench 5.2.35. Mở tạo/thay đổi bảng điều khiển bảng, chuyển sang tab cột, nhấp chuột phải vào trường dấu thời gian; ở đó bạn có thể thấy các tùy chọn có thể là defaulton update.

Lưu ý quan trọng: Bạn có thể sử dụng CURRENT_TIMESTAMP làm giá trị mặc định hoặc được cập nhật cho chỉ một cột trong bảng!

Sample screenshot showing the context menu

Về câu hỏi UTC, bạn có thể có một cái nhìn tại question này. Có một giải pháp được chấp nhận ở đó.

Tôi khuyên bạn nên đọc hướng dẫn tham khảo MySQL cũng như cho Timestamp data typeNOW() function.

+0

OK, điều đó đã hiệu quả đối với tôi. Nếu tôi muốn biết khi nào một bản ghi bị xóa mềm, tôi sẽ chỉ tạo một date_deleted và thiết lập nó từ lớp ứng dụng, đúng không? Ngoài ra, bất kỳ ý tưởng về vấn đề UTC? – StackOverflowNewbie

+0

có, nếu bạn đã chạy truy vấn để đánh dấu một mục là đã xóa mềm, thì tốt hơn là cập nhật ngày từ lớp ứng dụng cũng như trong cùng một truy vấn (hoặc ít nhất một giao dịch). Tôi đã cập nhật câu trả lời cho vấn đề UTC. – melihcelik

+0

Nó có thể được thực hiện trên nhiều lĩnh vực không? – carbonr

-1

Theo mặc định, MySQL đặt trường timestamp đầu tiên thành CURRENT_TIMESTAMP trên mọi câu hỏi UPDATE hoặc INSERT. Tôi đi về thiết kế lược đồ của tôi theo cách sao cho updated_at là trường đầu tiên timestamp, do đó tôi không phải chỉ định rõ ràng nó.

3

Dưới đây là những gì tôi làm với MySQL Workbench

Data Type: dấu thời gian Mặc định: CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP