Mengapa hanya ada satu kolom TIMESTAMP dengan CURRENT_TIMESTAMP dalam DEFAULT atau klausa ONDATE?
CREATE TABLE `foo` (
`ProductID` INT(10) UNSIGNED NOT NULL,
`AddedDate` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`UpdatedDate` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=INNODB;
Kesalahan yang dihasilkan:
Kode Kesalahan: 1293
Definisi tabel salah; hanya ada satu kolom TIMESTAMP dengan CURRENT_TIMESTAMP dalam DEFAULT atau klausa ON UPDATE
mysql
timestamp
mysql-error-1293
ripper234
sumber
sumber
CURRENT_TIMESTAMP
diDEFAULT
atauON UPDATE
klausa sekali ada kolom denganTIMESTAMP
tipe data, tidak peduli apakah itu mendapat klausul tambahan!CREATE TABLE foo (created_on TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_on TIMESTAMP)
CREATE TABLE foo (updated_on TIMESTAMP, created_on TIMESTAMP DEFAULT CURRENT_TIMESTAMP)
timestamp
kolom pertama yaitu nullablenull
. Jikatimestamp
kolom pertamanot null
maka secara defaultDEFAULT CURRENT_TIMESTAMP
danON UPDATE CURRENT_TIMESTAMP
akan ditambahkan. stackoverflow.com/a/13544181/2859238timestamp
kolom pertama memiliki nilai default yang ditetapkan seperti sukadefault '0000-00-00 00:00:00'
. Jika kolom nullable atau nilai default eksplisit diatur, makaDEFAULT CURRENT_TIMESTAMP
danON UPDATE CURRENT_TIMESTAMP
TIDAK akan ditambahkanJawaban:
Keterbatasan ini, yang hanya karena alasan historis dan alasan kode, telah diangkat dalam versi terbaru MySQL:
http://dev.mysql.com/doc/relnotes/mysql/5.6/en/news-5-6-5.html
sumber
Saya juga sudah lama bertanya-tanya. Saya mencari sedikit dalam sejarah saya dan saya pikir posting ini: http://lists.mysql.com/internals/34919 mewakili posisi semi-resmi MySQL (sebelum intervensi Oracle;))
Pendeknya:
Jadi penjelasan mereka adalah "karena diimplementasikan seperti ini". Kedengarannya tidak terlalu ilmiah. Saya kira itu semua berasal dari beberapa kode lama. Ini disarankan di utas di atas: "carry-over mulai dari ketika hanya timestamp pertama yang disetel / diperbarui secara otomatis".
Bersulang!
sumber
Kami dapat memberikan nilai default untuk cap waktu untuk menghindari masalah ini.
Posting ini memberikan solusi terperinci: http://gusiev.com/2009/04/update-and-create-timestamps-with-mysql/
sumber
Memang kesalahan implementasi.
Pendekatan asli di MySQL adalah memperbarui tanggal pembuatan sendiri (jika Anda membutuhkannya) dan membuat MySQL khawatir tentang timestamp
update date ? update date : creation date
seperti:Saat membuat, Masukkan NULL:
Nilai NULL untuk cap waktu diinterpretasikan sebagai CURRENT_TIMESTAMP secara default.
Di MySQL, kolom TIMESTAMP pertama dari sebuah tabel mendapatkan keduanya
DEFAULT CURRENT_TIMESTAMP
danON UPDATE CURRENT_TIMESTAMP
atribut, jika tidak ada atribut yang diberikan untuk itu. inilah mengapa kolom TIMESTAMP dengan atribut harus didahulukan atau Anda mendapatkan kesalahan yang dijelaskan dalam utas ini.sumber
Seperti:
sumber
Nah perbaikan untuk Anda bisa dengan meletakkannya di bidang UpdatedDate dan memiliki pemicu yang memperbarui bidang AddedDate dengan nilai UpdatedDate hanya jika AddedDate adalah nol.
sumber
Menggabungkan berbagai jawaban:
Di MySQL 5.5,
DEFAULT CURRENT_TIMESTAMP
danON UPDATE CURRENT_TIMESTAMP
tidak bisa ditambahkanDATETIME
tetapi hanya aktifTIMESTAMP
.Aturan:
1) paling banyak satu
TIMESTAMP
kolom per tabel dapat secara otomatis (atau secara manual [ Penambahan saya ]) diinisialisasi atau diperbarui ke tanggal dan waktu saat ini. (MySQL Documents).Sehingga hanya satu
TIMESTAMP
dapat memilikiCURRENT_TIMESTAMP
diDEFAULT
atauON UPDATE
klausa2)
NOT NULL
TIMESTAMP
Kolom pertama tanpaDEFAULT
nilai eksplisit sukacreated_date timestamp default '0000-00-00 00:00:00'
akan secara implisit diberikanDEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
dan karenanyaTIMESTAMP
kolom berikutnya tidak dapat diberikanCURRENT_TIMESTAMP
padaDEFAULT
atauON UPDATE
klausaPilihan lain (Tapi
updated_date
adalah kolom pertama):sumber
Coba ini:
sumber
created_at
kolom sendiri. Saya pikir inilah yang ingin dikatakan secara sengaja oleh op.Ini adalah batasan dalam versi MYSQL 5.5. Anda perlu memperbarui versi ke 5.6.
Saya mendapatkan kesalahan ini dalam menambahkan tabel di MYSQL
Tabel terlihat seperti ini.
Setelah beberapa waktu membaca tentang perubahan di berbagai versi MYSQL dan beberapa googling. Saya menemukan bahwa ada beberapa perubahan yang dibuat di MYSQL versi 5.6 dari versi 5.5.
Artikel ini akan membantu Anda menyelesaikan masalah. http://www.oyewiki.com/MYSQL/Incorrect-table-definition-there-can-be-only-one-timestamp-column
sumber