2011-12-28 42 views
5

Vì vậy, tôi có hàng stamp timestamp DEFAULT NOW() ON UPDATE NOW() trên bảng của mình và tôi cần cập nhật ngay cả khi bản cập nhật tôi thực thi về cơ bản là cùng một dữ liệu trên tất cả các trường.Cập nhật bảng mysql với cùng giá trị và vẫn nhận được cập nhật dấu thời gian

Có cách nào thực hiện việc này trong bảng kê, như một số tùy chọn khác ngoài on update hay tôi buộc phải stamp = now() mỗi khi tôi cập nhật (và xóa on update tất nhiên vì nó sẽ vô ích).

Tôi đã nhìn thấy this thread, nhưng nó chỉ trả lời những gì đang xảy ra và tại sao, không phải là cách để có được xung quanh nó khác hơn là buộc nó gián tiếp

Trả lời

2

Bạn sẽ phải sử dụng một kích hoạt để buộc nó mỗi lần.

DELIMITER GO 

CREATE TRIGGER `mydb`.`mytable_U` BEFORE UPDATE ON `mydb`.`mytable` 
FOR EACH ROW 
BEGIN 
    SET NEW.stamp = CURRENT_TIMESTAMP; 
END 
GO 

DELIMITER ; 
+0

Cảm ơn, tôi sẽ cung cấp cho thử này – Bimp

+0

Hmm, tôi có thể đặt trình kích hoạt này trong mã java của mình bằng bất kỳ cơ hội nào hoặc có phải được thực hiện bên ngoài không? – Bimp

+0

@Jayto: nó đi vào cơ sở dữ liệu. Động cơ DB kích hoạt nó cho bạn khi bạn gửi một UPDATE – gbn

1

Tôi tìm thấy nó dễ dàng hơn để chỉ làm những việc sau như một phần của báo cáo cập nhật của bạn:

UPDATE table_name SET last_logged_in = NOW() WHERE `user_id`... 

Bằng cách này, giá trị luôn được cập nhật và nếu không có gì khác đã làm thay đổi dấu thời gian vẫn được cập nhật. Cảm ơn câu hỏi của bạn; nó cũng giống như tôi.

3

Như @veeTrain đã nói, thật dễ dàng nếu bạn thêm nó vào bản cập nhật của mình. Đây chỉ là một cách khác để làm điều đó, bạn cũng có thể sử dụng unix_timestamp().

UPDATE tên_bảng SET last_logged_in = unix_timestamp() WHERE id = '$user_id'

Tôi biết câu trả lời của tôi là muộn, nhưng tôi chạy vào một vấn đề tương tự và figured tôi muốn chia sẻ giải pháp của tôi đối với những người gặp phải chủ đề này trong tương lai.

+0

phụ thuộc vào loại cột 'last_logged_in'. UNIX_TIMESTAMP() trả về một số nguyên, trong khi NOW() trả về một DATETIME đã định dạng. Có nhiều lý do để chọn cái khác, xem câu hỏi này để biết thêm: http://stackoverflow.com/questions/14849911/difference-between-unix-timestamp-and-now-in-mysql – SpaceDog

+1

Phải, nó cũng phụ thuộc vào việc sử dụng. Bạn cũng có thể sử dụng định dạng của PHP khi cần: ngày ("F j, Y, g: i a"); Tham chiếu PHP: [ở đây] (http://php.net/manual/en/function.date.php) và các hàm ngày/giờ của MySQL: [ở đây] (http://dev.mysql.com/doc/refman/ 5.6/en/date-and-time-functions.html) – Winter

Các vấn đề liên quan