MySQLデータベースの学習(二十から五) - DDL(c)の制約 - 列レベルの制約をテーブル・レベルの制約構文

MySQLは、カラムが連続で更新される学ぶ:)

序文「・ᴗ・ `

  • このパートでは、あなたが制約で使用するデータベースのほぼすべてのタイプを学ぶのを助けます

制約(制約)

制約は、ルールのある
テーブルを作成するときに変更-変更が最善の制約である
か、データベースが制御できない危険性があることを確認してください
、もちろん、あなたがデータと新しい制約を生き残ったデータベースを感じることはありません(ルール)の競合もOKである
私たちがしているここに二つの方法の機能は、6つの制約によって呼び出される
構文またはスコープは、テーブルレベルおよび列レベルで言及したプロセス

六は、一般的な制約を記述する

コード 説明 英文 中国の
デフォルト デフォルト値を指定します。 デフォルト デフォルト値
NOT NULL 非空 ではありません 否定
UNIQUE 値のみ ユニーク 無比
小切手 コンテンツの価値をチェック 小切手 検査
PRIMARY KEY 主キー 主キー メインキー
外部キー 外部キー 外部キー 外部键位

MySQLはCHECKの事実をサポートしていませんが、我々は他のソリューションを持っていることに注意してください。
でも、SQL文が、アップ重畳Webアプリケーションサーバー(バックエンド)の行の上限を適用することなく、
バックエンド、私は列のバックエンドを見て記事の最後に行くことができます興味を持っています。

話し合うユニークな独特のタッチはNULLを許可し
ない2本のNULLデータラインがある場合はないということ?
いいえ!NULL == NULLができますので一つだけでは
、実際にUNIQUEに便利な、それを空にする必要を費やすしないする必要がプラスNOT NULL美徳2333です

外部キー外部キー

テーブルからのプロパティでも、現在のテーブル内の制御別のテーブルの値の影響を受けている必要があり
注意がここに私達は上の依存関係を持っていた
テーブル(表1)外部キー持ってREFERENCE(別のテーブルに依存している別のテーブルでは、表2)、
そしてテーブルが1つのまだあるので、2が許可されていないテーブルを削除する
表2表1は、歩いて参照の参照をそれを参照しますか?

私たちはとても足のライブラリを削除し、彼は外部キー関係をクリアしてから削除するか、他の削除ライブラリが与えられている必要があるときに:)

ここに画像を挿入説明

列レベルの制約とテーブルレベルの制約

別の方法は、列レベルの制約とテーブルレベルの制約に分割されている
ように書かれた教科書に
、テーブルレベルの制約とカラムレベルの制約
カラムレベルの制約と呼ばれるデータ列の確立(1)制約
(2)は、複数のデータ列制約と呼ばれるテーブル・レベルの制約確立
カラム後列定義、ステートメントが与えられる場合(3)カラムレベルの制約を宣言することができる
テーブルレベルの制約(4)は、列定義の後だけを宣言することができ

あなたが理解するケース

  
DROP TABLE IF EXISTS project;

CREATE TABLE project(
	项目编号      INT       PRIMARY KEY, #PRIMARY KEY 跟在列后面的约束就是列约束 作用于一列
	项目识别码    INT       NOT NULL ,
	项目名称      CHAR(20)  NOT NULL ,                              
	项目负责人    CHAR(20)  NOT NULL ,
	CONSTRAINT un_project UNIQUE (项目识别码,项目名称,项目负责人),
	CONSTRAINT ck_responsibility CHECK(项目负责人 = 'Ryan' OR 项目负责人 = 'SST')     
	#另起一行 用逗号隔开的就是表级约束 可以约束多个列 就好像控制一个表一样                      
);
                              
DESC project;

効果の後にDESC:
ここに画像を挿入説明
CONSTRAINT [约束名]後に使用される制約の名前を付けるために使用されている
(実際にはお勧めしませんが)あなたが理解しやすい書くことができることを意味します:

CREATE TABLE project(
	项目编号      INT       PRIMARY KEY, #PRIMARY KEY 跟在列后面的约束就是列约束 作用于一列
	项目识别码    INT       NOT NULL ,
	项目名称      CHAR(20)  NOT NULL ,                              
	项目负责人    CHAR(20)  NOT NULL ,
	UNIQUE (项目识别码,项目名称,项目负责人),
	CHECK(项目负责人 = 'Ryan' OR 项目负责人 = 'SST')     
	#另起一行 用逗号隔开的就是表级约束 可以约束多个列 就好像控制一个表一样                      
);

質問:冗長性は内部テーブルレベルの制約に追加された理由NOT NULLはそれほどではないのですか?
回答:
ノート[NOT] NULLとDEFAULT [値]列レベルの制約のみ可能
FOREIGN UNIQUEチェックと(良い食べ物ああ)の外部キー制約の使用上の基本的なテーブルレベルの制約を意味する
が、MySQLはカラムレベルの制約をサポートしていないため、某だから、テーブルレベルの制約は、(名前を付けることができますという利点があり、キーの名前を次のセクション2333に詳細にこのことについて話をするには)

MYSQLはしない CHECK財産SQLiteのオラクルのサポートをサポートし
、もののエラーなしが、効果なし

質問:サポートしていませんどのように行うかを確認しますか?
回答:一般的に代わりにENUMの使用可能なチェック
データ型のフロント覚えて列挙型を(列挙)私たちが達成することができるようになることがよく(C言語とああルック内部のいくつかの暴力列挙アルゴリズム)
列に関連する内部平均MySQLをスケールレベルは、実際には2333年のかなり無駄です。

実際には、列レベルの外部キー制約もあり
、問題は、MySQLとSQLiteのオラクルおよびその他のサポートによってサポートされていない
が、もつれはとにかく個人的には、コードの他の誰かが読むことができることを感じていない
性能に大きな違いがないようにする方法を習得するためにコードを書きました

Summary'◡`

このセクションでは、我々は列のプロパティを変更し、自分のニーズのタイムテーブルに従ってより作成することができると信じている制約を説明するために、データの種類のストレスの条件の組み合わせに基づいて、

列レベルの制約テーブルレベルの制約

実際には、昆布名は、とにかく、2つだけが制約構文を追加はしていない
最初の列レベルの制約が呼び出された
外部キー制約の全てに加えて、サポートしてMySQLのキーワード重ね合わせることができ
、テーブルレベルの制約と外のSQLiteのオラクルのサポートキー制約の事故はその意味を失いました

第二は、テーブルレベルの制約と呼ばれ
UNQIUEが制約を管理するためのいくつかの列を複数選択することができ、外部キー制約をサポートするために、

しかし、
他の列レベルの缶を持つラインに外部キーを使用する状況下では、一般的な列のテーブル・レベルの構文の少数
もちろんのことはあまりUNIQUE属性テーブルレベルも

次のセクションはまだ完了していない知識の制約について学ぶために継続する必要があります:)
次の停止:MySQLデータベース学習(二十から六) - DDL(IV)制約-追加、削除詳細主キー、外部キー制約は、制約の制約の変更
追加を、

  • さて私は、データベースシステムを学びたいですか?
    MySQLのコラム

  • pythonの火災ので、あなたは、単純なアプリケーションものののpython-深さの調査でプレーしたいですか?私は、列がああ更新し続けて見ることができます:
    Pythonアプリケーション

  • すべての大人を行う前に子供があることを選択してください!興味のあるバックエンド?今、それを受け入れる:)
    ハンズオンあなたのバックエンド(サーバー)との学習を

  • 、兄のサポート!孟新しい礼儀をいただきありがとうございます:)
    ここに画像を挿入説明

公開された39元の記事 ウォン称賛31 ビュー10000 +

おすすめ

転載: blog.csdn.net/weixin_43178828/article/details/104200847