テーブルの上に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(順序で各データテーブルの主キーフィールドは、一意の値と一意に類似のテーブルであることを保証するために)