mysql - والتاريخ - كود التاريخ في الفيجوال بيسك




قم بتعيين NOW() كقيمة افتراضية لنوع بيانات التاريخ والوقت؟ (8)

لدي عمودين في مستخدمي الجدول هما registerDate and lastVisitDate الذي يتكون من نوع بيانات التاريخ والوقت. أود القيام بما يلي.

  1. عيّن قيمة defaultDate الافتراضية على MySQL NOW ()
  2. تعيين القيمة الافتراضية lastVisitDate إلى 0000-00-00 00:00:00 بدلاً من الصفر الذي يستخدمه بشكل افتراضي.

لأن الجدول موجود بالفعل ولديه سجلات حالية ، أود استخدام تعديل الجدول. لقد حاولت استخدام اثنين من رمز أدناه ، ولكن لا يعمل.

ALTER TABLE users MODIFY registerDate datetime DEFAULT NOW()
ALTER TABLE users MODIFY registerDate datetime DEFAULT CURRENT_TIMESTAMP;

يعطيني خطأ: ERROR 1067 (42000): Invalid default value for 'registerDate'

هل من الممكن بالنسبة لي لتعيين قيمة التاريخ والوقت الافتراضية إلى NOW () في MySQL؟


EUREKA !!!

لجميع أولئك الذين فقدوا قلوبهم يحاولون تحديد قيمة DATETIME الافتراضية في MySQL ، أعرف بالضبط ما تشعر به / شعرت به. حتى هنا هو عليه:

`ALTER TABLE  `table_name` CHANGE `column_name` DATETIME NOT NULL DEFAULT 0

لاحظ بعناية أني لم أضف اقتباسات فردية / علامات اقتباس مزدوجة حول 0 .

تحديث مهم :

تم نشر هذه الإجابة منذ فترة طويلة. في ذلك الوقت ، عملت على تثبيت MySQL (على الأرجح) وكنت أشعر بمشاركتها. يرجى قراءة التعليقات أدناه قبل أن تقرر استخدام هذا الحل الآن.


أفضل طريقة هي جعل الزناد:

/************ ROLE ************/
drop table if exists `role`;
create table `role` (
    `id_role` bigint(20) unsigned not null auto_increment,
    `date_created` datetime,
    `date_deleted` datetime,
    `name` varchar(35) not null,
    `description` text,
    primary key (`id_role`)
) comment='';

drop trigger if exists `role_date_created`;
create trigger `role_date_created` before insert
    on `role`
    for each row 
    set new.`date_created` = now();

بلدي الحل

ALTER TABLE `table_name` MODIFY COLUMN `column_name` TIMESTAMP NOT
NULL DEFAULT CURRENT_TIMESTAMP;


لست متأكدا ما إذا كان هذا لا يزال نشطا ولكن هنا يذهب.

فيما يتعلق بتعيين الإعدادات الافتراضية إلى Now () ، لا أجد ذلك ممكنًا لنوع بيانات DATETIME. إذا كنت ترغب في استخدام نوع البيانات هذا ، فقم بتعيين التاريخ عند إجراء الإدراج على النحو التالي:

INSERT INTO Yourtable (Field1, YourDateField) VALUES('val1', (select now()))

بلدي نسخة من الخلية 5.5


لقد نجحت في ذلك ، باستخدام MySQL:

ALTER TABLE `table_name` MODIFY `column_name` datetime NOT NULL DEFAULT NOW();

يمكنني استخدام مشغل كحل بديل لتعيين حقل تاريخ / وقت إلى NOW () للإدخالات الجديدة:

CREATE TRIGGER `triggername` BEFORE INSERT ON  `tablename` 
FOR EACH ROW 
SET NEW.datetimefield = NOW()

يجب أن تعمل للتحديثات أيضا

تتضمن إجابات Johan & Leonardo التحويل إلى حقل الطابع الزمني. على الرغم من أن هذا قد يكون مناسبًا لحالة الاستخدام المعروضة في السؤال (تخزين RegisterDate و LastVisitDate) ، إلا أنه ليس حلاً شاملاً. انظر datetime vs timestamp question.


ALTER TABLE table_name
  CHANGE COLUMN date_column_name date_column_name DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP;

وأخيرا ، هذا العمل بالنسبة لي!





mysql-error-1067