mysql時間フィールドの作成要点

3092 ワード

一般的に表を作るときは、作成時間はdatetime、更新時間はtimestampです.これはとても重要です.
テストしてみました.テーブルにtimestampフィールドが2つある場合、timestampフィールド以外の値を更新すると、最初のtimestamp列は現在の時間に更新され、2番目のtimestamp列の値は変更されません.
———————————————————————————MySQL 5日付型DATETIMEとTIMESTAMPに関する質問の詳細
MySQL 5の日付タイプは、DATETIME、DATE、TIMESTAMPの3種類で、DATEが時間分秒を持たない日付を表す以外は、両方とも時間分秒を持っています.TIMESTAMPはまた、ミリ秒まで正確にすることができる.
次に共通性があります.彼らのフォーマットは「厳しくない」ので、自由で、正しいフォーマットがデータベースに正しく挿入できると思います.
ここでは、時間分秒の日付を伴う一般的な問題を主に解決します.
一、IMESTAMP
1、TIMESTAMP列にはデフォルト値が必要です.デフォルト値は「000-00-00 00:00:00」ですがnullではありません.2、TIMESTAMP列は値を設定することができず、データベースが自動的に変更するしかない.3、1つのテーブルに複数のTIMESTAMP列が存在してもよいが、1つのカラムのみがデータ更新によってデータベースシステムの現在値に変更される.したがって,1つのテーブルに複数のTIMESTAMP列があるのは意味がなく,実際には1つのテーブルに1つのTIMESTAMP列しか設定されていない.4、TIMESTAMP列のデフォルト値はCURRENT_TIMESTAMP定数値.記録データが変化すると、TIMESTAMP列は自動的にCURRENT_に設定されますTIMESTAMP. 5、TIMESTAMP列作成後のフォーマットは:a timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP、この文の意味、aフィールドのデフォルト値はCURRENT_ですTIMESTAMP、記録更新時に自動的にaフィールドの値をCURRENT_に設定TIMESTAMP. 6、また、次の定義は構文の観点から正しいが、意味がない.このフィールドの値は変更できないため、いつまでもデフォルト値しか指定できない.b timestamp NOT NULL DEFAULT ‘0000-00-00 00:00:00′,
二、DATETIME
1、DATETIME列は複数に設定でき、デフォルトはnullで、手動で値を設定できます.2、DATETIME列はデフォルト値を設定できません.これは多くの人が苦労して研究した成果です.ほほほ!3、DATETIME列は、フリップフロップやデータ挿入時にDATETIMEフィールド値をnow()に設定するなど、位相変化可能なデフォルト値を設定することで、特に後者はプログラム開発でよく用いられる.
一般的に表を作るときは、作成時間はdatetime、更新時間はtimestampです.CREATE TABLE user ( id bigint(20) NOT NULL AUTO_INCREMENT, name varchar(20) CHARACTER SET gbk NOT NULL, sex tinyint(1) DEFAULT ‘1′, state smallint(2) DEFAULT ‘1′, createtime datetime NOT NULL, updatetime timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (id) ) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=latin1
三、日付最大値範囲の問題
日付の最大範囲の問題は絶対的なものではありません.多くの人が20 XX年も調べられないと言っています.これは冗談です.そんなことはありません.日付の範囲などの問題はMySQLの運転パターンに関連しています.もちろんこの範囲は広くて、祖先の18代用に十分で、この問題を心配する必要はありません.
逆に、プログラミング言語の日付範囲の制限、異なる言語、異なる制限があることに注意してください.ここでは議論しません.
四、日付書式変換
1、文字列回転日select STR_TO_DATE(‘2010-03-03 16:41:16′, ‘%Y-%m-%d %H:%i:%s’)
2、日付変換文字列select DATE_FORMAT(‘2010-03-03 16:41:16′, ‘%Y-%m-%d %H:%i:%s’)
五、日付の中日時分秒月月等の取得方法
select TIMESTAMP(‘2019-03-03 16:41:16′);
select DATE(‘2019-03-03 16:41:16′);
select YEAR(‘2019-03-03 16:41:16′);
select MONTH(‘2019-03-03 16:41:16′);
select DAY(‘2019-03-03 16:41:16′);
select TIME(‘2019-03-03 16:41:16′);
select CURTIME();
select CURDATE();
select CURRENT_DATE;
select CURRENT_TIME;
select CURRENT_TIMESTAMP;
いろいろな方法がありますが、ここでは簡単に1、2を挙げます.
六、日付の算術演算
関連する関数が多く、使い方も簡単なので、見るとMySQL参考マニュアルを見ることをお勧めします.mysql> SELECT DATE_ADD(‘2019-01-01′, INTERVAL 1 DAY);
-> ‘2019-01-02′
mysql> SELECT DATE_ADD(‘1999-01-01′, INTERVAL 1 HOUR);
-> ‘2019-01-01 01:00:00′
mysql> SELECT DATE_ADD(‘2019-01-30′, INTERVAL 1 MONTH);
-> ‘2019-02-28′
七、日付の大きさの比較
日を持って数字になって、文字列を持って日付になって、ほほほ、とても簡単です.and update_time > ‘2019-03-02 16:48:41′ and update_time <= ‘2019-03-03 16:51:58′