MySQL දිවා කාල තීරුව සඳහා පෙරනිමි අගයක් ඔබ සකසන්නේ කෙසේද?


912

MySQL දිවා කාල තීරුව සඳහා පෙරනිමි අගයක් ඔබ සකසන්නේ කෙසේද?

SQL සේවාදායකයේ එය එයයි getdate(). MySQL සඳහා සමාන වන්නේ කුමක්ද? එය සාධකයක් නම් මම MySQL 5.x භාවිතා කරමි.


5
මම මගේ MySQL වගුවේ CURRENT_TIMESTAMP භාවිතා කරමි (විමසුමේ නොවේ), සමහර විට මෙයද ප්‍රයෝජනවත් විය හැකිය.
රූබන්

15
මෙම අංගය දැන් MySQL 5.6.5 වෙත එකතු කර ඇත. මෙය යමෙකුට උපකාරී වේ යැයි සිතමි. optimize-this.blogspot.co.uk/2012/04/…
GhostInTheSecureShell

HostGhostInTheSecureShell එය අවම වශයෙන් ඩෙබියන් මත ස්ථාපනය කිරීමේ මෙහෙයුම, නමුත් අනිවාර්යයෙන්ම විශිෂ්ට ලක්ෂණයකි. මම හිතන්නේ අවසානයේදී මේ "CURRENT_TIMESTAMP" ප්‍රශ්න දෙක සමනය වේවි!
මාක් ඩිමිලෝ

එය දැන් () ශ්‍රිතය හෝ නැතිනම් ඔබට තීරු මට්ටමින් පෙරනිමි සැකසුම් සමඟ කළ හැකිය.
අන්ෂුල් ෂර්මා

Answers:


878

වැදගත් සංස්කරණය: MySQL 5.6.5 සිට DATETIME ක්ෂේත්‍ර සමඟ මෙය සාක්ෂාත් කරගත හැකිය , පහත දැක්වෙන අනෙක් ලිපිය දෙස බලන්න ...

පෙර අනුවාදයන්ට DATETIME සමඟ එය කළ නොහැක ...

නමුත් ඔබට එය TIMESTAMP සමඟ කළ හැකිය:

mysql> create table test (str varchar(32), ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP);
Query OK, 0 rows affected (0.00 sec)

mysql> desc test;
+-------+-------------+------+-----+-------------------+-------+
| Field | Type        | Null | Key | Default           | Extra |
+-------+-------------+------+-----+-------------------+-------+
| str   | varchar(32) | YES  |     | NULL              |       | 
| ts    | timestamp   | NO   |     | CURRENT_TIMESTAMP |       | 
+-------+-------------+------+-----+-------------------+-------+
2 rows in set (0.00 sec)

mysql> insert into test (str) values ("demo");
Query OK, 1 row affected (0.00 sec)

mysql> select * from test;
+------+---------------------+
| str  | ts                  |
+------+---------------------+
| demo | 2008-10-03 22:59:52 | 
+------+---------------------+
1 row in set (0.00 sec)

mysql>

** CAVEAT: ඔබ CURRENT_TIMESTAMP ON සමඟ තීරුවක් පෙරනිමියෙන් අර්ථ දක්වන්නේ නම්, ඔබට මෙම තීරුව සඳහා සෑම විටම අගයක් නියම කිරීමට අවශ්‍ය වනු ඇත, නැතහොත් යාවත්කාලීනයේ අගය ස්වයංක්‍රීයව "දැන් ()" වෙත යලි සකසනු ඇත. මෙයින් අදහස් කරන්නේ ඔබට අගය වෙනස් වීමට අවශ්‍ය නැතිනම්, ඔබගේ යාවත්කාලීන කිරීමේ ප්‍රකාශයේ "[ඔබේ තීරුවේ නම] = [ඔබේ තීරුවේ නම]" (හෝ වෙනත් වටිනාකමක්) අඩංගු විය යුතු අතර වටිනාකම "දැන් ()" බවට පත්වනු ඇත. අමුතු, නමුත් ඇත්ත. මම හිතනවා මේක උදව් වෙයි කියලා. මම භාවිතා කරන්නේ 5.5.56-MariaDB **


405
දිවා කාලය 1000-9999 පරාසයක් ඇති බව සැලකිල්ලට ගැනීම වැදගත්ය, නමුත් කාලරාමුව සඳහා පරාසය 1970-2038 පමණි . ඔබේ පද්ධතියට උපන්දිනය ගබඩා කිරීමට සිදුවුවහොත් මෙය ගැටළුවක් විය හැකිය, නැතහොත් අවුරුදු 30 ක උකසක් සඳහා ගෙවීම් සැලැස්ම වැනි දෙයක් හැසිරවීමට ඔබට සිදුවේ. dev.mysql.com/doc/refman/5.0/en/datetime.html
Kip

13
ස්වයංක්‍රීයව යාවත්කාලීන වන විට කාලරාමුව සමඟද
Cerber

6
එය වේ 5.6.5 අනුවාදය සිට හැකි, (! මම MySQL තවමත් 5.0 විට ඔබගේ පිළිතුර තැපැල් කරන ලද තේරුම්) පහත ගුස්ටාව් පිළිතුර බලන්න
e2-E4

5
Ip කිප්, හායි, DATEතීරුවකට පෙරනිමි අගයක් තිබිය හැකිද? ( datetimeතීරුවක් නොවේ ).
සජිබ් ආචාර්යා

DATE තීරු සඳහා ti කළ නොහැකි බව පෙනේ: ඔබ DATETIME දත්ත වර්ගය භාවිතා කළ යුතුය
Fabio Napodano

609

5.6.5 අනුවාදයේ, දිවා කාල තීරුවක පෙරනිමි අගයක් සැකසිය හැකි අතර පේළිය යාවත්කාලීන වූ විට යාවත්කාලීන වන තීරුවක් පවා සාදන්න. වර්ගය අර්ථ දැක්වීම:

CREATE TABLE foo (
    `creation_time`     DATETIME DEFAULT CURRENT_TIMESTAMP,
    `modification_time` DATETIME ON UPDATE CURRENT_TIMESTAMP
)

යොමුව: http://optimize-this.blogspot.com/2012/04/datetime-default-now-finally-available.html


3
'Menu_creation_time' සඳහා වලංගු නොවන පෙරනිමි අගය
ප්‍රනාන්දු ට්‍රින්ඩේඩ්

2
ErnFernandoTrindade ඔබට MySQL අනුවාදය 5.6.5 හෝ ඊට පසුව අවශ්‍ය වේ. එය මෙහි ක්‍රියාත්මක වන ආකාරය ඔබට දැක ගත හැකිය: sqlfiddle.com/#!9/dd2be
ගුස්ටාව් බර්ට්‍රම්

1
Ust ගුස්ටාව් බර්ට්‍රම්, මම 5.6.22 අනුවාදය භාවිතා කරමි, නමුත් තවමත් මට පහත පරිදි දෝෂයක් ඇතිවිය: ටේබල් ටී.බී.එල්. දෝෂ කේතය: 1294. 'යාවත්කාලීන දිනය' තීරුව සඳහා යාවත්කාලීන කිරීමේ වගන්තිය අවලංගුයි
මනීෂ් සප්කල්

An මනීෂ් සප්කල් ඔබ භාවිතා කරන්නේ ටයිම්ස්ටැම්ප් මිස ඩේටයිම් නොවේ. එසේම, එය NULL බවට පත් නොකරන්න.
ගුස්ටාව් බර්ට්‍රම්

2
මම හිතන්නේ "ON UPDATE" සින්ටැක්ස් වැරදියි. Dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html ට අනුව එය එසේ විය යුතුයdt DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
Dan Bough

149

MySQL ( 5.6.5 අනුවාදයට පෙර ) පෙරනිමි දිනය ටයිම් අගයන් සඳහා කාර්යයන් භාවිතා කිරීමට ඉඩ නොදේ. TIMESTAMP එහි අමුතු හැසිරීම නිසා සුදුසු නොවන අතර ආදාන දත්ත ලෙස භාවිතා කිරීම නිර්දේශ නොකරයි. ( MySQL දත්ත වර්ග පෙරනිමි බලන්න .)

ප්‍රේරකයක් නිර්මාණය කිරීමෙන් ඔබට මෙය කළ හැකිය .

ඩේට් ටයිම් වර්ගයේ ඩේට්ක්‍රියේටඩ් ක්ෂේත්‍රයක් සහිත වගුවක් මා සතුව ඇත. මම එම වගුවේ "ඇතුල් කිරීමට පෙර" සහ " SET NEW.DateCreated=NOW()" ප්‍රේරකයක් නිර්මාණය කළ අතර එය විශිෂ්ට ලෙස ක්‍රියා කරයි.

මම හිතනවා මේක කාටහරි උදව් කරයි කියලා.


21
සෑම පේළියක් සඳහාම foo මතට ඇතුල් කිරීමට පෙර TRIGGER ප්‍රේරක_ෆූ_සෙට්ක්‍රීට් සාදන්න NEW.created_at = UTC_TIMESTAMP ();
kgriffs

5
අනාගත සනීපාරක්ෂාව (නඩත්තු කිරීම) සඳහා ප්‍රේරකයකට වඩා කාලරාමුව භාවිතා කිරීම වඩා හොඳය. මෙය විසඳුමක් වුවද ප්‍රේරකයක් සඳහා භාවිතා කිරීමේ අවස්ථාව ඉතා සුළුය.
getWeberForStackExchange

8
පෙරනිමි අගය පමණක් සැකසීමට ඔබට අවශ්‍ය වනු ඇතIF NEW.created_at IS NOT NULL
Petr Peller

134

මට නම් ප්‍රේරක ප්‍රවේශය වඩාත්ම සාර්ථක වී ඇත, නමුත් මම ප්‍රවේශය සමඟ මඳක් සොයා ගතිමි. ඇතුළත් කිරීමේ වත්මන් වේලාවට දින ක්ෂේත්‍රයක් සැකසීමට මූලික ප්‍රේරකය සලකා බලන්න:

CREATE TRIGGER myTable_OnInsert BEFORE INSERT ON `tblMyTable`
    FOR EACH ROW SET NEW.dateAdded = NOW();

මෙය සාමාන්‍යයෙන් විශිෂ්ටයි, නමුත් ඔබට INSERT ප්‍රකාශය හරහා ක්ෂේත්‍රය අතින් සැකසීමට අවශ්‍ය යැයි කියන්න:

INSERT INTO tblMyTable(name, dateAdded) VALUES('Alice', '2010-01-03 04:30:43');

සිදුවන්නේ, ප්‍රේරකය ඔබ විසින් ක්ෂේත්‍රය සඳහා ලබා දී ඇති අගය වහාම නැවත ලියයි, එබැවින් වත්මන් නොවන වේලාවක් සැකසීමට ඇති එකම ක්‍රමය පසු විපරම් යාවත්කාලීන ප්‍රකාශයකි - යක්! අගයක් ලබා දුන් විට මෙම හැසිරීම අභිබවා යාමට, IFNULL ක්‍රියාකරු සමඟ තරමක් වෙනස් කළ ප්‍රේරකය උත්සාහ කරන්න:

CREATE TRIGGER myTable_OnInsert BEFORE INSERT ON `tblMyTable`
    FOR EACH ROW SET NEW.dateAdded = IFNULL(NEW.dateAdded, NOW());

මෙය ලෝක දෙකෙහිම හොඳම දේ ලබා දෙයි: ඔබට ඔබගේ දින තීරුවට වටිනාකමක් ලබා දිය හැකි අතර එය ගතවනු ඇත, එසේ නොමැතිනම් එය වත්මන් කාලයට පෙරනිමිය වේ. වගු අර්ථ දැක්වීමේදී DEFAULT GETDATE () වැනි පිරිසිදු දෙයකට සාපේක්ෂව එය තවමත් ගිටෝ ය, නමුත් අපි සමීප වෙමින් සිටිමු!


6
ඇතුලත් කිරීමේදී පැහැදිලි පරිශීලක අගයන් නැවත ලිවීමෙන් අවවාදය පිළිගැනීමට +1.
කිප්

2
මම පෞද්ගලිකව සිතන්නේ මෙය යා හැකි හොඳම ක්‍රමය බවයි. TIMESTAMP හි ඇත්ත වශයෙන්ම අමුතු හැසිරීමක් ඇති අතර මම කිසි විටෙකත් අවුරුදු 2038 ක සීමාවක් ඇති කේතයක් ලියන්නේ නැත.
එරික්

කමක් නෑ, මම ඒක හොයාගත්තා. ඉඩ දීම සඳහා ක්ෂේත්‍රය සැකසීමට අමතක විය NULL. තවදුරටත් අනතුරු ඇඟවීම් නැත.
කජි

ප්‍රේරක නපුරුයි! යමක් කිරීමට වෙනත් ක්‍රමයක් නොමැති විට පමණක් ඒවා භාවිතා කරන්න. ප්‍රේරකයක් භාවිතා කිරීමට වඩා ඔබට 5.6.x හැඳුනුම්පත දක්වා යාවත්කාලීන කිරීම වඩා හොඳය.
ksymeon

4
MySQL 5.5 හි IFNULL DATETIME මත ක්‍රියා නොකරයි; ඉහත ප්‍රේරකය භාවිතා කිරීමෙන් dateAdded'0000-00-00 00:00:00' පෙන්වනු ඇත. මෙය භාවිතා කිරීම උපක්‍රමය කරයි: `සෑම පේළියකටම NEW.dateAdded = 0 පසුව අළුත් කරන්න.ඩේට් එකතු කරන්න = දැන් (); END IF; `
කෙනී

30

දිවා කාලයේ ක්ෂේත්‍ර දෙකක් ඇති මගේ වගුවේ මෙම වෙනස් කිරීමේ ප්‍රකාශය භාවිතයෙන් මෙය විසඳීමට මට හැකි විය.

ALTER TABLE `test_table`
  CHANGE COLUMN `created_dt` `created_dt` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
  CHANGE COLUMN `updated_dt` `updated_dt` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;

මෙය ක්‍රියාත්මක වන්නේ ඔබ දැන් () ශ්‍රිතය ක්‍රියාත්මක කරනු ඇතැයි අපේක්ෂා කරන ආකාරයට ය. ශුන්‍ය ඇතුල් කිරීම හෝ නිර්මාණය කළ_ඩී සහ යාවත්කාලීන කළ ක්ෂේත්‍ර නොසලකා හැරීම මඟින් ක්ෂේත්‍ර දෙකෙහිම පරිපූර්ණ කාලරාමු අගයක් ලැබේ. පේළියට කරන ඕනෑම යාවත්කාලීනයක් යාවත්කාලීන_ඩී වෙනස් කරයි. ඔබ MySQL විමසුම් බ්‍රව්සරය හරහා වාර්තා ඇතුළු කරන්නේ නම්, ඔබට තවත් එක් පියවරක් අවශ්‍ය විය, නව කාලරාමුවකින් create_dt හැසිරවීමට ප්‍රේරකයක්.

CREATE TRIGGER trig_test_table_insert BEFORE INSERT ON `test_table`
    FOR EACH ROW SET NEW.created_dt = NOW();

ප්‍රේරකය ඔබට අවශ්‍ය ඕනෑම දෙයක් විය හැකිය මම නම් කිරීමේ සම්මුතියට කැමතියි [ප්‍රේරකය] _ [my_table_name] _ [ඇතුළු කරන්න]


මා අදහස් කළේ, ඔබ MySQL විමසුම් බ්‍රව්සරය හරහා ග්‍රිඩ් හරහා අතින් () ප්‍රකාශයක් නොමැතිව වාර්තා ඇතුළත් කළහොත් ප්‍රේරකය අවශ්‍ය වේ. ඔබ සැමවිටම ඇතුළු කිරීමේ ප්‍රකාශයක් භාවිතා කරන්නේ නම් ප්‍රේරකය සම්පූර්ණයෙන්ම අනවශ්‍යය.

අපොයි! මා අදහස් කළේ ප්‍රේරකය (නම) ඔබට අවශ්‍ය ඕනෑම දෙයක් විය හැකි නිසා ප්‍රේරක නාමය ක්‍රියාකාරීත්වයට කිසිසේත් බලපාන්නේ නැත. බොහෝ අය එය දැන ගනු ඇත, නමුත් MySQL වෙත අලුතින් පැමිණෙන සමහර අය නොදැන සිටිය හැකිය ...

අහෝ, රේඛා බිඳීම් නොමැති වීම ගැන කණගාටුයි. එක් එක් පේළියේ අවසානය සලකුණු කිරීමට අර්ධ කොලෝන් භාවිතා කරන්න.

25

මේ ආකාරයේ දේවල් කිරීමට ඔබට ප්‍රේරක භාවිතා කළ හැකිය.

CREATE TABLE `MyTable` (
`MyTable_ID`  int UNSIGNED NOT NULL AUTO_INCREMENT ,
`MyData`  varchar(10) NOT NULL ,
`CreationDate`  datetime NULL ,
`UpdateDate`  datetime NULL ,
PRIMARY KEY (`MyTable_ID`)
)
;

CREATE TRIGGER `MyTable_INSERT` BEFORE INSERT ON `MyTable`
FOR EACH ROW BEGIN
        -- Set the creation date
    SET new.CreationDate = now();

        -- Set the udpate date
    Set new.UpdateDate = now();
END;

CREATE TRIGGER `MyTable_UPDATE` BEFORE UPDATE ON `MyTable`
FOR EACH ROW BEGIN
        -- Set the udpate date
    Set new.UpdateDate = now();
END;

19

MySQL හි සුපුරුදු DATETIME අගයක් සැකසීමට උත්සාහ කරන හදවත අහිමි වූ සියලු දෙනා සඳහා , ඔබට දැනෙන / දැනෙන ආකාරය මම හරියටම දනිමි. ඉතින් මෙන්න:

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

මම 0 වටා තනි උපුටා දැක්වීම් / ද්විත්ව උපුටා දැක්වීම් එකතු කර නොමැති බව ප්‍රවේශමෙන් නිරීක්ෂණය කරන්න

මෙය විසඳීමෙන් පසු මම වචනාර්ථයෙන් පනින්නෙමි: ඩී


8
එය වත්මන් වේලාවට ඇතුළත් නොකරයි. එය '0000-00-00 00:00:00' ඇතුල් කරනු ඇත.
පිට් ඩිගර්

8
එය වර්තමාන වේලාව නියම කරන බව මම නොකියමි. බොහෝ ppl පෙරනිමි ශුන්‍ය අගයක් සැකසීමට උත්සාහ කළ නමුත් එය ක්‍රියා නොකරයි. අපි උපුටා දැක්වීම් ඉවත් කළ යුතුයි. මෙම සොයා ගැනීම බොහෝ කාලයක් හා කලකිරීමක් ඇති කළ හෙයින්, මම එය ප්‍රජාව සමඟ බෙදා ගැනීමට සිතුවෙමි. ප්‍රයෝජනවත් තොරතුරු වෙනත් පුද්ගලයින් සමඟ බෙදා ගැනීමට උනන්දුවක් දක්වන පරිශීලකයින්ට ඔබ වැනි අය වගකිව යුතුය. -1 ලබා ගැනීමට කිසිදු හේතුවක් මට බැරෑරුම් ලෙස නොපෙනේ! කුමක් වුවත්.
ඔගිවන්

3
DATETIME NOT NULL සමඟ ද එය සාක්ෂාත් කරගත හැකිය.
බ්‍රෙන්ඩන් බර්ඩ්

උදාහරණ sql විධානය තුළ තවත් එක් අක්ෂරයක් ඇත, එය මට සංස්කරණය කළ නොහැක, මන්ද එය එක් අක්‍ෂර සංස්කරණයකි.
quapka

ඔබේ කේතය මට වැඩ කළේ නැත, මෙන්න වැඩ කළේALTER TABLE zones MODIFY created datetime NOT NULL DEFAULT 0;
ස්මිත්


14

මෙය ඇත්තෙන්ම භයානක ආරංචියකි. මෙන්න මේ සඳහා දීර් pe කාලයක් තිස්සේ පවතින දෝෂ / විශේෂාංග ඉල්ලීමක් . එම සාකච්ඡාව කාලරාමු දත්ත වර්ගයේ සීමාවන් ගැන ද කතා කරයි.

මෙම කාරණය ක්‍රියාවට නැංවීමේ ගැටලුව කුමක්දැයි මම බරපතල ලෙස කල්පනා කරමි.



14

ඔබ දැනටමත් වගුව නිර්මාණය කර ඇත්නම් ඔබට භාවිතා කළ හැකිය

පෙරනිමි අගය වත්මන් දිනය වේලාවට වෙනස් කිරීම

ALTER TABLE <TABLE_NAME> 
CHANGE COLUMN <COLUMN_NAME> <COLUMN_NAME> DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP;

පෙරනිමි අගය '2015-05-11 13:01:01' ලෙස වෙනස් කිරීමට

ALTER TABLE <TABLE_NAME> 
CHANGE COLUMN <COLUMN_NAME> <COLUMN_NAME> DATETIME NOT NULL DEFAULT '2015-05-11 13:01:01';

9

දිවා කාල තීරුවක අගය සැකසීමට ඔබට දැන් () භාවිතා කළ හැකිය, නමුත් ඔබට එය පෙරනිමි අගයක් ලෙස භාවිතා කළ නොහැකි බව මතක තබා ගන්න.


4
සැබෑ. මම දැන් භාවිතා කිරීමට උත්සාහ කර දෝෂයක් ඇතිවිය "දෝෂ කේතය: 1067. වලංගු නොවන පෙරනිමි අගය.". ඉතින් පිළිතුර කුමක්ද? ;-)
බ්‍රයන් බෝට්‍රයිට්

MySQL අනුවාද 5.5 සහ 5.6 සමඟ සම්මුතියකට එළඹීම සඳහා හොඳම විසඳුම මෙයයි. 5.5 අනුවාදය සඳහා, එහි වටිනාකම කලින් තීරණය NOW()කර පසුව ඇතුළත් කිරීම සඳහා එය භාවිතා කරන්න. 5.6 අනුවාදය සඳහා, NOW()පෙරනිමි අගය ලෙස සකසන්න .
අබෙල් කැලෙජෝ

9

විසඳුමක් ලෙස TIMESTAMP තීරුව භාවිතා කරන සැමට, අත්පොතෙන් පහත දැක්වෙන සීමාව දෙවනුව කිරීමට මට අවශ්‍යය:

http://dev.mysql.com/doc/refman/5.0/en/datetime.html

"TIMESTAMP දත්ත වර්ගයට '1970-01-01 00:00:01' UTC සිට ' 2038-01-19 03:14:07 දක්වා පරාසයක් ඇත ' UTC . එයට MySQL අනුවාදය සහ SQL මත පදනම්ව විවිධ ගුණාංග ඇත. සේවාදායකය ක්‍රියාත්මක වන ආකාරය. මෙම ගුණාංග පසුව මෙම කොටසේ විස්තර කෙරේ.

එබැවින් මෙය වසර 28 කින් පමණ ඔබේ මෘදුකාංගය බිඳ දමනු ඇත.

දත්ත සමුදා පැත්තේ ඇති එකම විසඳුම වෙනත් පිළිතුරු වල සඳහන් කර ඇති ප්‍රේරක භාවිතා කිරීමයි.


2
මෙතැන් සිට වසර 20 ක් MySQL යාවත්කාලීන කර එම සීමාව ඉවත් කර ඇත්නම් කුමක් කළ යුතුද? එය කළ හැකිදැයි මට විශ්වාස නැත, නමුත් සිතුවිල්ලක් පමණි.
නෙස්ඩාන්

9

මම MySQL සේවාදායකය 5.7.11 ධාවනය කරන අතර මෙම වාක්‍යය:

ALTER TABLE table_name CHANGE date_column datetime NOT NULL DEFAULT '0000-00-00 00:00:00'

වැඩ කරන්නේ නැහැ . නමුත් පහත සඳහන් කරුණු:

ALTER TABLE table_name CHANGE date_column datetime NOT NULL DEFAULT '1000-01-01 00:00:00'

වැඩ කරනවා .

පැත්තක සටහනක් ලෙස , එය mysql ලේඛනයේ සඳහන් වේ :

දිනය කොටස සමඟ අගයන් සඳහා DATE වර්ගය භාවිතා කරන නමුත් කාල කොටසක් නොමැත. MySQL විසින් DATE අගයන් 'YYYY-MM-DD' ආකෘතියෙන් ලබා ගනී. සහාය දක්වන පරාසය '1000-01-01' සිට '9999-12-31' වේ.

ඔවුන් මෙසේ පැවසුවද:

අවලංගු DATE, DATETIME, හෝ TIMESTAMP අගයන් සුදුසු වර්ගයේ ('0000-00-00' හෝ '0000-00-00 00:00:00') “ශුන්‍ය” අගයට පරිවර්තනය වේ.


8

බහු-රේඛීය ප්‍රේරක නිර්වචනය කරන විට යමෙකුට පරිමිතිය වෙනස් කළ යුතු බැවින් අර්ධ සළකුණ MySQL සම්පාදකයා විසින් ප්‍රේරකයේ අවසානය ලෙස ගෙන දෝෂ උත්පාදනය කරයි. උදා

DELIMITER //
CREATE TRIGGER `MyTable_UPDATE` BEFORE UPDATE ON `MyTable`
FOR EACH ROW BEGIN
        -- Set the udpate date
    Set new.UpdateDate = now();
END//
DELIMITER ;

5

MySQL 5.1 හි එය කරන්නේ කෙසේද යන්න මෙන්න:

ALTER TABLE `table_name` CHANGE `column_name` `column_name` 
TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP;

ඔබ තීරුවේ නම දෙවරක් ඇතුළත් කළ යුත්තේ මන්දැයි මට කිසිදු ඉඟියක් නොමැත.


5
ක්ෂේත්‍රය නැවත නම් කිරීම සඳහා ද වෙනස් වේ. පළමු තීරුවේ නම 'පැරණි', දෙවන තීරුවේ නම 'නව' ය. ඔබ ක්ෂේත්‍රයේ නම වෙනස් නොකරන්නේ නම් එය අතිරික්තයක් ලෙස පෙනේ. එය සෞන්දර්යාත්මකව අප්‍රසන්න නම්, මෝඩිෆයි උත්සාහ කරන්න.
ජෝන් ගෝර්ඩන්

5

ඔබ සමඟ මේ කරන්න බැහැ අතර DATETIMEපෙරනිමි අර්ථ, ඔබ හුදෙක් මේ වගේ ඔබේ ඇතුලත් කරන්න ප්රකාශය තේරීම් ප්රකාශයක් සංස්ථාගත කළ හැකිය:

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

මේසය වටා උපුටා දැක්වීම් නොමැතිකම සැලකිල්ලට ගන්න.

MySQL 5.5 සඳහා


4

පෙරනිමි අගය දැන් () ලෙස සැකසීමට ඔබ උත්සාහ කරන්නේ නම්, MySQL එයට සහය දක්වයි යැයි මම නොසිතමි. MySQL හි, TIMESTAMP දත්ත වර්ග තීරුව හැර, ඔබට ඕනෑම ආකාරයක තීරු සඳහා පෙරනිමි අගයක් ලෙස ශ්‍රිතයක් හෝ ප්‍රකාශනයක් භාවිතා කළ නොහැක, ඒ සඳහා ඔබට පෙරනිමිය ලෙස CURRENT_TIMESTAMP නියම කළ හැකිය.


3

වර්තමාන කාලය (එම ඇතුළත් කිරීමේ වේලාව) ලබා දෙන, දැන් () ලෙස හඳුන්වන ඉන්බිල්ට් ශ්‍රිතය mysql සිට mysql හි සරල යැයි මම සිතමි.

එබැවින් ඔබේ විමසුම ඒ හා සමාන විය යුතුය

CREATE TABLE defaultforTime(
    `creation_time`     DATETIME DEFAULT CURRENT_TIMESTAMP,
    `modification_time` DATETIME default now()
);

ඔබට ස්තුතියි.


2
CREATE TABLE `testtable` (
    `id` INT(10) NULL DEFAULT NULL,
    `colname` DATETIME NULL DEFAULT '1999-12-12 12:12:12'
)

'පරීක්‍ෂා කළ හැකි' නිර්මාණය කිරීම සඳහා ඉහත විමසුමේදී, මම DATETIME තීරුවේ පෙරනිමි අගය ලෙස '1999-12-12 12:12:12' භාවිතා කළෙමි. colname


1

පහත කේතය භාවිතා කරන්න

DELIMITER $$

    CREATE TRIGGER bu_table1_each BEFORE UPDATE ON table1 FOR EACH ROW
    BEGIN
      SET new.datefield = NOW();
    END $$

    DELIMITER ;

1

MySQL 8.x සමඟ හොඳින් වැඩ කිරීම

CREATE TABLE `users` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `dateCreated` datetime DEFAULT CURRENT_TIMESTAMP,
      `dateUpdated` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
      PRIMARY KEY (`id`),
      UNIQUE KEY `mobile_UNIQUE` (`mobile`)
    ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

0

ඔබ පෙරනිමි අගය NOW () ලෙස සැකසීමට උත්සාහ කරන්නේ නම්, DATETIME වෙනුවට TIMESTAMP තීරුවේ වර්ගය වෙනස් කළ යුතු බව MySQL සහය දක්වයි. TIMESTAMP හි වත්මන් දිනය සහ වේලාව පෙරනිමියෙන් ඇත..මම සිතන්නේ එය ඔබගේ ගැටලුව විසඳනු ඇති බවයි ..


0

නිදසුනක් ලෙස ගන්න, මට 'site' නමින් වගුවක් නිර්මාණය කර ඇති අතර එය යාවත්කාලින කළ තීරුවක් වන අතර එය DATETIME යන දෙකම වන අතර දැන් පෙරනිමි අගය අවශ්‍ය නම්, මෙය සාක්ෂාත් කර ගැනීම සඳහා මට පහත දැක්වෙන වර්ග අඩි ක්‍රියාත්මක කළ හැකිය.

වෙනත් වගුව `අඩවිය` වෙනස් කරන්න` සාදන ලද_අත්`` සාදන ලද_අත්` ටයිම්ස්ටැම්ප් සම්පූර්ණ අක්‍රීය නොවේ CURRENT_TIMESTAMP;

වෙනත් වගුව `අඩවිය` වෙනස් කරන්න` සාදන ලද_අත්`` සාදන ලද_අත්` දිනය නිරුපද්‍රිතව අක්‍රීයයි;

වෙනත් වගුව `අඩවිය` වෙනස් කරන්න` යාවත්කාලීන_අත්`` යාවත්කාලීන කළ_` කාලරාමුව සම්පූර්ණ අක්‍රීය නොවේ CURRENT_TIMESTAMP;

වෙනත් වගුව `අඩවිය` වෙනස් කරන්න` යාවත්කාලීන_අත්`` යාවත්කාලීන කළ_` දින නියමය අක්‍රීයයි;

ප්‍රකාශ අනුක්‍රමය වැදගත් වන්නේ CUREENT TIMESTAMP හි පෙරනිමි අගයන් සහිත TIMESTAMP වර්ගයේ තීරු දෙකක් වගුවකට තිබිය නොහැකි බැවිනි.


0

මෙය මගේ ප්‍රේරක උදාහරණයයි:

/************ 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();


-3

ඔබට පෙරනිමි කාලරාමුව විසඳිය හැකිය. මුලින්ම ඔබ භාවිතා කරන්නේ කුමන අක්‍ෂර කට්ටලයද යන්න සලකා බලන්න. ඔබ utf8 ලබා ගත්තේ නම් මෙම අක්ෂර කට්ටලය සියලුම භාෂාවන්ට සහය දක්වයි. ඊළඟ සැකසුම ඔබ කිසියම් ව්‍යාපෘතියක් යටතේ වැඩ කරන්නේ නම් ඔබ සේවාදායක කාල කලාපය දැනගෙන ඔබ සේවාදායක කලාපය තෝරා ගත යුතුය. මෙම පියවර අනිවාර්ය වේ.


2
දිනය ටයිම් තීරුවලට පෙරනිමි අගයන් තිබිය නොහැක. එය 'විශේෂාංගය' ලේඛනගත කර ඇත. සියළුම සංවර්ධකයින්ට ඔවුන්ගේ අක්ෂර කේතන ක්‍රමය වෙනස් කිරීමට ප්‍රවේශය නොමැත. සේවාදායකයා සිය සේවාදායකයින්ගේ කාල කලාපයට සැකසීම සාමාන්‍යයෙන් හැකියාවක් නොවේ, විශේෂයෙන් සේවාදායකයින් සියල්ලන්ම තනි කාල කලාපයකට ආවේණික නොවන විට.
rlb.usa
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.