V.データベース(テーブルの整合性制約)

テーブルの上にA.完全な制約

1.はじめに制約

                            

 2. NOT NULL(空でありません)

空のかどうか、ヌル、空、非文字列を表し

ていない - nullの空ではない

ヌル -空にすることができますが
mysqlの>テーブルT12(ID int型の作成ではないnull)を、
クエリOK、影響を受けた0行( 0.02 秒)

のMySQL > SELECT * FROM からT12。
空集合( 0.00 秒)

のMySQL > DESC T12。
+ ------- + --------- + ------ + ----- + --------- + ------- + 
| フィールド| タイプ| ヌル| キー| デフォルト| エクストラ| 
+ ------- + --------- + ------ + ----- + --------- + ------- + 
| ID | INT(11)| NO | | NULL | | 
+ ------- + --------- + ------ + ----- + --------- + ------- + セット(0.00 秒)

#1 。不能の向番号列插入空元素 
のMySQL>  T12値(NULL)に挿入します。
ERRORカラム:1048(23000)ID ことができないヌル

のMySQL > T12値(1挿入)。
クエリOK、影響を受けた1行(0.01秒)

2. DEFAULT + NOT NULL(デフォルトの非NULL値の+)

私たちは、カラムに拘束され、この列の重複コンテンツを持っていることが多い、私たちは頻繁に挿入する必要がある場合は、空ではありません、それはデフォルトのコンセプトだったので、これは、私たちの事業は、新たな負担をもたらす与えます。

データを挿入しないとき、アクティブセット、デフォルト値が自動的に追加された場合、デフォルト値は、カラムが作成されたデフォルトを指定することができます
MySQLは>テーブルT13(ID1はint型作成されないヌル、ID2はint型ないヌルデフォルト222 ); 
0行が影響を受け、OKをクエリ( 0.01 秒)

のMySQL > 降順T13;
 + ------- + ------- - + ------ + ----- + --------- + ------- + 
|フィールド、|タイプ|ヌル|キー|デフォルト|エキストラ| 
+ - + --------- + ------ + ----- + ----- + --------- + ------- 
| ID1 | int型(11)| NO | | NULL | | 
| ID2 | int型(11)| NO | | 222 | | 
+ ------- + --------- + ------ --------- + ------- + ----- + +  SET(0.01 秒)

#は唯一の値フィールドID1に追加し、ID2は、既定値のフィールドいっぱい使いでしょう 
MySQLを> T13挿入(ID1)の値 (111); 
照会しOK、影響を受けた1行(0.00 秒)

のMySQL > SELECT * からT13;
 + ----- + ----- + 
| ID1 | ID2 | 
+ ----- + ----- + 
| 111 | 222 | 
+ ----- + ----- + における SET(0.00 秒)

ID1フィールドは空白にすることはできません、それは、値ID2フィールドを充填するだけではない。 
MySQLの> INSERT INTO T13(ID2)値(223 ); 
ERROR 1364(HY000):フィールド、' ID1 'は doesnの' Tは、デフォルト値持っている

それぞれ、ID2パックされたデータをID1には、パディングデータID2は、デフォルト値を上書きすることができる 
のMySQL> T13(ID1、挿入 ID2)値(112223 
、OKをクエリ 1行が影響を受けた(0.00秒)

mysqlの > *選択からT13;
+ ----- + ----- + 
| ID1 | ID2 | 
+ ----- + ----- + 
| 111 | 222 | 
| 112 | 223 | 
+ ----- + ----- + セット(0.00秒)
効果はヌルなりませません

:strictモードを設定し 、ヌルではないフィールドのNULL値の挿入をサポートしていない 「値に自己成長分野のためにサポートされていない デフォルト値は持っているテキストフィールドをサポートしていません :mysqlの直接効果(再起動の失敗を)取る のmysql
> SETのsql_modeの=STRICT_TRANS_TABLESを、NO_AUTO_CREATE_USERは、NO_ENGINE_SUBSTITUTIONは"; :プロファイルは、(永久故障)追加 のSQL-mode ="STRICT_TRANS_TABLES、NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTIONを"

3. UNIQUE(一意性制約は、列または列の組み合わせを指定繰り返すことができません)

UNIQUE制約は、一意のデータベース・テーブル内の各レコードを識別する。

UNIQUEおよびPRIMARY KEY制約は、列または一意性の保証を提供するために、列のセットです。PRIMARY KEY制約は自動的にUNIQUEに定義されています
各テーブルには複数のUNIQUE制約を持つことができますが、各テーブルには一つだけPRIMARY KEY制約を持つことができます

方法一:
表department1作成(
ID int型、
名前VARCHARを( 20 )ユニークな、
コメントVARCHAR( 100 
); 


方法二:
表department2(登録
IDのINT、
名前VARCHAR( 20 )、
コメントのvarchar( 100 )、
固有の(名前)
); 


MySQLの >(1、department1値に挿入' IT '' 技术' )。
クエリOK、影響を受けた1行(0.00 秒)
のMySQL > department1値(1、挿入' IT ''技术" ); 
ERROR 1062(23000):重複エントリ' IT '  のためのキー" 名前
UNIQUE + NOT NULL结合

MySQLの>(ID int型テーブルt1を作成していないユニークなNULL); クエリOK、0行が(影響を受け 0.02秒) のMySQL > DESC T1。 + ------- + --------- + ------ + ----- + --------- + ------- + | フィールド| タイプ| ヌル| キー| デフォルト| エクストラ| + ------- + --------- + ------ + ----- + --------- + ------- + | ID | INT(11)| NO | PRI | NULL | | + ------- + --------- + ------ + ----- + --------- + ------- +セット(0.00秒)
UNIQUE組み合わせたユニークな(与えられているだけ繰り返し追加を追加するために、フィールドのデータテーブルで表される)
表-サービス(作成 ID int型主キーAUTO_INCREMENT、 名前VARCHARを(
20は)、 ホストVARCHAR(15)ヌル、 ポートはint型ないヌル、 UNIQUE (ホスト、ポート)米国ユニーク ); MySQLの>INTO-サービス値INSERT 。 - >(1、'nginxの''192.168.0.10'、80)、 - >(2、'HAProxy''192.168.0.20'、80を)、 - >(3、"mysqlの' ' 192.168.0.30 "、3306 - > ; クエリOK、影響を受けた3行(0.01 秒) 記録: 3つの 重複:0警告:0 のMySQL >サービス(名前、ホスト、ポート)の値(挿入' nginxの'' 192.168.0.10 '、80 ); ERROR 1062(23000):重複エントリー' 192.168.0.10-80 ' のためのキー' ホスト'

 4.  PRIMARY KEY(順序で各データテーブルの主キーフィールドは、一意の値と一意に類似のテーブルであることを保証するために)

 

おすすめ

転載: www.cnblogs.com/Sup-to/p/11229436.html