কম্পিউটার টিউটোরিয়াল

MySQL-এ TIMESTAMP DEFAULT CURRENT_TIMESTAMP কলামে খালি ইনসার্ট করলে কী হয়?

MySQL-এ TIMESTAMP DEFAULT CURRENT_TIMESTAMP কলামে ভ্যালু না দিয়ে (খালি) ইনসার্ট করলে স্বয়ংক্রিয়তঃ বর্তমান ডেট-টাইম সেট হয়।

টেবিল তৈরি

CREATE TABLE DemoTable (
    UserId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    UserLoginDate TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

ইনসার্ট (কলাম বাদ দিয়ে)

INSERT INTO DemoTable VALUES();           -- সব ডিফল্ট
INSERT INTO DemoTable VALUES();           -- সব ডিফল্ট
INSERT INTO DemoTable VALUES();           -- সব ডিফল্ট
INSERT INTO DemoTable(UserId) VALUES(NULL); -- শুধু PK দিয়ে

ফলাফল

+--------+---------------------+
| UserId | UserLoginDate       |
+--------+---------------------+
| 1      | 2019-11-03 12:55:44 |
| 2      | 2019-11-03 12:55:45 |
| 3      | 2019-11-03 12:55:46 |
| 4      | 2019-11-03 12:56:06 |
+--------+---------------------+

ব্যাখ্যা

  • প্রতিটি ইনসার্টে সার্ভারের বর্তমান টাইমস্ট্যাম্প আটোমেটিক সেট হয়েছে
  • UserId অটো-ইনক্রিমেন্ট হওয়ায় NULL দিয়ে অটো জেনারেট হয়েছে
  • TIMESTAMP টাইপের প্রথম কলামে ডিফল্ট CURRENT_TIMESTAMP এবং ON UPDATE CURRENT_TIMESTAMP থাকে (পুরানো ভার্শন)

গুরুত্বপূর্ণ পরিবর্তন (MySQL 5.6.5+)

  • শুধু এক্সপ্লিসিট DEFAULT CURRENT_TIMESTAMP দিলেই অটো টাইমস্ট্যাম্প działa করে
  • ON UPDATE CURRENT_TIMESTAMP আলাদা যোগ করতে হয় আপডেটে টাইম আপডেটের জন্য
  • NULL ইনসার্ট করলেও করেন্ট টাইমস্ট্যাম্প সেট হয় (যদি NULLable না হয়)

বিকল্প: DATETIME (MySQL 5.6.5+)

CreatedAt DATETIME DEFAULT CURRENT_TIMESTAMP,
UpdatedAt DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

DATETIME রেঞ্জ বেশি (১০০০-৯৯৯৯ বছর), TIMESTAMP ২০৩৮ সাল পর্যন্ত (Y2K38 সমস্যা)।

  1. Java-MySQL 연동: 단일 컬럼만 INSERT하기

  2. MySQL-এ একক কোয়ারি দিয়ে একটি কলামে একাধিক মান কিভাবে ইনসার্ট করবেন?

  3. MySQL-এ ENUM টাইপ ব্যবহার করে কলাম মান সীমাবদ্ধ করা

  4. MySQL-এ JSON টাইপ কলামে ডিফল্ট ভ্যালু সেট করা