検索
ホームページデータベースmysql チュートリアルMYSQL中如何设置列默认值的介绍_MySQL

bitsCN.com

MYSQL中如何设置列默认值的介绍

 

MySQL目前不支持列的Default为函数的形式,如达到你某列的默认值为当前更新日期与时间的功能,你可以使用TIMESTAMP列类型,下面就详细说明TIMESTAMP列类型。

 

  TIMESTAMP列类型

 

  TIMESTAMP值可以从1970的某时的开始一直到2037年,精度为一秒,其值作为数字显示。

 

  TIMESTAMP值显示尺寸的格式如下表所示:

  +---------------+----------------+  | 列类型    | 显示格式    |  | TIMESTAMP(14) | YYYYMMDDHHMMSS |   | TIMESTAMP(12) | YYMMDDHHMMSS  |  | TIMESTAMP(10) | YYMMDDHHMM   |  | TIMESTAMP(8) | YYYYMMDD    |  | TIMESTAMP(6) | YYMMDD     |  | TIMESTAMP(4) | YYMM      |  | TIMESTAMP(2) | YY       |  +---------------+----------------+

 

 

  “完整”TIMESTAMP格式是14位,但TIMESTAMP列也可以用更短的显示尺寸创造,最常见的显示尺寸是6、8、12、和14。你可以在创建表时指定一个任意的显示尺寸,但是定义列长为0或比14大均会被强制定义为列长14。列长在从1~13范围的奇数值尺寸均被强制为下一个更大的偶数。

 

  所有的TIMESTAMP列都有同样的存储大小,使用被指定的时期时间值的完整精度(14位)存储合法的值不考虑显示尺寸。不合法的日期,将会被强制为0存储。

  

  这有几个含意: 

 

  1、虽然你建表时定义了列TIMESTAMP(8),但在你进行数据插入与更新时TIMESTAMP列实际上保存了14位的数据(包括年月日时分秒),只不过在你进行查询时MySQL返回给你的是8位的年月日数据。如果你使用ALTER TABLE拓宽一个狭窄的TIMESTAMP列,以前被“隐蔽”的信息将被显示。 

 

  2、同样,缩小一个TIMESTAMP列不会导致信息失去,除了感觉上值在显示时,较少的信息被显示出。 

 

  3、尽管TIMESTAMP值被存储为完整精度,直接操作存储值的唯一函数是UNIX_TIMESTAMP();由于MySQL返回TIMESTAMP列的列值是进过格式化后的检索的值,这意味着你可能不能使用某些函数来操作TIMESTAMP列(例如HOUR()或SECOND()),除非TIMESTAMP值的相关部分被包含在格式化的值中。例如,一个TIMESTAMP列只有被定义为TIMESTAMP(10)以上时,TIMESTAMP列的HH部分才会被显示,因此在更短的TIMESTAMP值上使用HOUR()会产生一个不可预知的结果。

 

  4、不合法TIMESTAMP值被变换到适当类型的“零”值(00000000000000)。(DATETIME,DATE亦然)    

  

  你可以使用下列语句来验证:

  CREATE TABLE test ('id' INT (3) UNSIGNED AUTO_INCREMENT, 'date1' TIMESTAMP (8) PRIMARY KEY('id'));  INSERT INTO test SET id = 1;  SELECT * FROM test;  +----+----------------+  | id | date1     |  +----+----------------+  | 1 | 20021114    |  +----+----------------+  ALTER TABLE test CHANGE 'date1' 'date1' TIMESTAMP(14);  SELECT * FROM test;  +----+----------------+  | id | date1     |  +----+----------------+  | 1 | 20021114093723 |  +----+----------------+

 

 

  你可以使用TIMESTAMP列类型自动地用当前的日期和时间标记INSERT或UPDATE的操作。如果你有多个TIMESTAMP列,只有第一个自动更新。自动更新第一个TIMESTAMP列在下列任何条件下发生: 

  

  1、列值没有明确地在一个INSERT或LOAD DATA INFILE语句中指定。 

 

  2、列值没有明确地在一个UPDATE语句中指定且另外一些的列改变值。(注意一个UPDATE设置一个列为它已经有的值,这将不引起TIMESTAMP列被更新,因为如果你设置一个列为它当前的值,MySQL为了效率而忽略更改。) 

 

  3、你明确地设定TIMESTAMP列为NULL. |

 

  4、除第一个以外的TIMESTAMP列也可以设置到当前的日期和时间,只要将列设为NULL,或NOW()。

   CREATE TABLE test (     'id' INT (3) UNSIGNED AUTO_INCREMENT,     'date1' TIMESTAMP (14),     'date2' TIMESTAMP (14),     PRIMARY KEY('id')     );    INSERT INTO test (id, date1, date2) VALUES (1, NULL, NULL);  INSERT INTO test SET id= 2;  +----+----------------+----------------+  | id | date1     | date2     |  +----+----------------+----------------+  | 1 | 20021114093723 | 20021114093723 |  | 2 | 20021114093724 | 00000000000000 |  +----+----------------+----------------+

 

 

    第一条指令因设date1、date2为NULL,所以date1、date2值均为当前时间,第二条指令因没有设date1、date2列值,第一个TIMESTAMP列date1为更新为当前时间,而二个TIMESTAMP列date2因日期不合法而变为“00000000000000”

  UPDATE test SET id= 3 WHERE id=1;  +----+----------------+----------------+  | id | date1     | date2     |  +----+----------------+----------------+  | 3 | 20021114094009 | 20021114093723 |  | 2 | 20021114093724 | 00000000000000 |  +----+----------------+----------------+

 

 

    这条指令没有明确地设定date2的列值,所以第一个TIMESTAMP列date1将被更新为当前时间。

  UPDATE test SET id= 1,date1=date1,date2=NOW() WHERE id=3;  +----+----------------+----------------+  | id | date1     | date2     |  +----+----------------+----------------+  | 1 | 20021114094009 | 20021114094320 |  | 2 | 20021114093724 | 00000000000000 |  +----+----------------+----------------+

 

 

    这条指令因设定date1=date1,所以在更新数据时date1列值并不会发生改变,而因设定date2=NOW(),所以在更新数据时date2列值会被更新为当前时间。此指令等效为:

UPDATE test SET id= 1,date1=date1,date2=NULL WHERE id=3;

 

 

  因MySQL返回的 TIMESTAMP 列为数字显示形式,你可以用DATE_FROMAT()函数来格式化 TIMESTAMP 列。

  SELECT id,DATE_FORMAT(date1,'%Y-%m-%d %H:%i:%s') As date1,      DATE_FORMAT(date2,'%Y-%m-%d %H:%i:%s') As date2 FROM test;  +----+---------------------+---------------------+  | id | date1        | date2        |  +----+---------------------+---------------------+  | 1 | 2002-11-14 09:40:09 | 2002-11-14 09:43:20 |  | 2 | 2002-11-14 09:37:24 | 0000-00-00 00:00:00 |  +----+---------------------+---------------------+    SELECT id,DATE_FORMAT(date1,'%Y-%m-%d') As date1,      DATE_FORMAT(date2,'%Y-%m-%d') As date2 FROM test;       +----+-------------+-------------+  | id | date1    | date2    |  +----+-------------+-------------+  | 1 | 2002-11-14 | 2002-11-14 |  | 2 | 2002-11-14 | 0000-00-00 |  +----+-------------+-------------+

 

 

  在某种程度上,你可以把一种日期类型的值赋给一个不同的日期类型的对象。然而,而尤其注意的是:值有可能发生一些改变或信息的损失: 

  

  1、如果你将一个DATE值赋给一个DATETIME或TIMESTAMP对象,结果值的时间部分被设置为'00:00:00',因为DATE值中不包含有时间信息。

 

  2、如果你将一个DATETIME或TIMESTAMP值赋给一个DATE对象,结果值的时间部分被删除,因为DATE类型不存储时间信息。 

 

  3、尽管DATETIME, DATE和TIMESTAMP值全都可以用同样的格式集来指定,但所有类型不都有同样的值范围。例如,TIMESTAMP值不能比1970早,也不能比2037晚,这意味着,一个日期例如'1968-01-01',当作为一个DATETIME或DATE值时它是合法的,但它不是一个正确TIMESTAMP值!并且如果将这样的一个对象赋值给TIMESTAMP列,它将被变换为0。 

  

  当指定日期值时,当心某些缺陷: 

  

  1、允许作为字符串指定值的宽松格式能被欺骗。例如,,因为“:”分隔符的使用,值'10:11:12'可能看起来像时间值,但是如果在一个日期中使用,上下文将作为年份被解释成'2010-11-12'。值'10:45:15'将被变换到'0000-00-00',因为'45'不是一个合法的月份。 

     

  2、以2位数字指定的年值是模糊的,因为世纪是未知的。MySQL使用下列规则解释2位年值: 在00-69范围的年值被变换到2000-2069。 在范围70-99的年值被变换到1970-1999。

 

bitsCN.com
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
MySQLのパフォーマンスを監視するために使用できるツールは何ですか?MySQLのパフォーマンスを監視するために使用できるツールは何ですか?Apr 23, 2025 am 12:21 AM

MySQLのパフォーマンスを効果的に監視する方法は? MySqladmin、ShowGlobalStatus、PerconAmonitoring and Management(PMM)、MySQL EnterpriseMonitorなどのツールを使用します。 1. mysqladminを使用して、接続の数を表示します。 2。showglobalstatusを使用して、クエリ番号を表示します。 3.PMMは、詳細なパフォーマンスデータとグラフィカルインターフェイスを提供します。 4.mysqlenterprisemonitorは、豊富な監視機能とアラームメカニズムを提供します。

MySQLはSQL Serverとどのように違いますか?MySQLはSQL Serverとどのように違いますか?Apr 23, 2025 am 12:20 AM

MySQLとSQLServerの違いは次のとおりです。1)MySQLはオープンソースであり、Webおよび埋め込みシステムに適しています。2)SQLServerはMicrosoftの商用製品であり、エンタープライズレベルのアプリケーションに適しています。ストレージエンジン、パフォーマンスの最適化、アプリケーションシナリオの2つには大きな違いがあります。選択するときは、プロジェクトのサイズと将来のスケーラビリティを考慮する必要があります。

どのシナリオでMySQLよりもSQL Serverを選択できますか?どのシナリオでMySQLよりもSQL Serverを選択できますか?Apr 23, 2025 am 12:20 AM

高可用性、高度なセキュリティ、優れた統合を必要とするエンタープライズレベルのアプリケーションシナリオでは、MySQLの代わりにSQLServerを選択する必要があります。 1)SQLServerは、高可用性や高度なセキュリティなどのエンタープライズレベルの機能を提供します。 2)VisualStudioやPowerbiなどのMicrosoftエコシステムと密接に統合されています。 3)SQLSERVERは、パフォーマンスの最適化に優れた機能を果たし、メモリが最適化されたテーブルと列ストレージインデックスをサポートします。

MySQLは文字セットと照合をどのように処理しますか?MySQLは文字セットと照合をどのように処理しますか?Apr 23, 2025 am 12:19 AM

mysqlManagesCharacterSetSetSetsAndCollat​​ions ByUSINGUTF-8ASTHEDEDEFAULT、CONFIGURATIONATDATABASE、TABLE、ANDCOLUMNLEVELS、ANDREQUIRINGCAREACTERSETANDCOLLATIONSFORADABASE.2

mysqlのトリガーとは何ですか?mysqlのトリガーとは何ですか?Apr 23, 2025 am 12:11 AM

MySQLトリガーは、特定のデータ操作が実行されたときに一連の操作を実行するために使用されるテーブルに関連付けられた自動的に実行されたストアドプロシージャです。 1)定義と機能のトリガー:データ検証、ロギングなどに使用。2)動作原則:それは前後に分割され、行レベルのトリガーをサポートします。 3)使用例:給与の変更を記録したり、在庫を更新したりするために使用できます。 4)デバッグスキル:ShowTriggersとShowCreatetriggerコマンドを使用します。 5)パフォーマンスの最適化:複雑な操作を避け、インデックスを使用し、トランザクションを管理します。

MySQLでユーザーアカウントをどのように作成および管理しますか?MySQLでユーザーアカウントをどのように作成および管理しますか?Apr 22, 2025 pm 06:05 PM

MySQLでユーザーアカウントを作成および管理する手順は次のとおりです。1。ユーザーの作成:createUser'newuser '@' localhost'identifidedby'password 'を使用します。 2。許可を割り当てる:grantselect、insert、updateonmydatabase.to'newuser'@'localhost 'を使用します。 3.許可エラーを修正:Revokeallprivilegesonmydatabase.from'newuser'@'localhost 'を使用します。次に、許可を再割り当てします。 4。最適化権限:Showgraを使用します

MySQLはOracleとどのように違いますか?MySQLはOracleとどのように違いますか?Apr 22, 2025 pm 05:57 PM

MySQLは、迅速な開発や中小規模のアプリケーションに適していますが、Oracleは大規模な企業や高可用性のニーズに適しています。 1)MySQLはオープンソースで使いやすく、Webアプリケーションや中小企業に適しています。 2)Oracleは強力で、大企業や政府機関に適しています。 3)MySQLはさまざまなストレージエンジンをサポートし、Oracleは豊富なエンタープライズレベルの機能を提供します。

他のリレーショナルデータベースと比較してMySQLを使用することの欠点は何ですか?他のリレーショナルデータベースと比較してMySQLを使用することの欠点は何ですか?Apr 22, 2025 pm 05:49 PM

他のリレーショナルデータベースと比較したMySQLの欠点には次のものがあります。1。パフォーマンスの問題:大規模なデータを処理する際にボトルネックに遭遇する可能性があり、PostgreSQLは複雑なクエリとビッグデータ処理でより良いパフォーマンスを発揮します。 2。スケーラビリティ:水平スケーリング能力は、Google SpannerやAmazon Auroraほど良くありません。 3。機能的な制限:高度な機能におけるPostgreSQLやOracleほど良くないため、一部の関数では、より多くのカスタムコードとメンテナンスが必要です。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)