Oracle Databaseの-primaryキー/外部キーのリレーションシップと参照

概要は、私の個人的な主キー(主キー)、外部キー(外部キー)、キー候補(候補キー)、スーパーキー(スーパーキー)、参照説明します

コンセプト:

主キー:ユーザーがキー識別の候補タプルを選択し、主キーNOT NULL

外部キー:2つのテーブルの関係を記述するために、外部キーはNULLにすることができます

ウルトラボンド一意タプルを識別する属性のセット

候補キー:余分なスーパーキーのプロパティを含みません

例:

生徒と教師は、次の2つのテーブルを持っている場合:

学生(student_no、student_name、student_age、student_sex、student_credit、teacher_no)

教師(teacher_no、TEACHER_NAME先生、teacher_salary)

スーパーキー:学生数(student_no)、またはID番号(student_credit)、または(学生番号、名前)(student_no、student_name)、または(学生番号、ID番号)(student_no、student_credit)、などに応じて学生テーブル一意た一人の学生を決定するために、これらの組み合わせは、この表のスーパーキーとして使用することができます

候補キー:任意のキーの組み合わせを属性取り除くもはや超超キーがない場合、キーは、スーパー候補キーあり、最小の超キーです。学生数(student_no)、ID番号として学生テーブルの候補キー(student_credit)

主キー:主キーが候補キーは、通常、テーブルの主キーとして番号を選択します人間の意思決定することができます。今、選択したstudent_no、主キーとしてteacher_no Studentテーブル、教師テーブル

外部キー:teacher_no 2つの公開鍵テーブル、テーブルには主キーの先生で、生徒はそうteacher_noは、外部キーテーブルであり、テーブルには関係学生テーブル教師を記述するために使用します

 

--References使い方

Studentテーブルを作成:

(テーブルの学生を作成します。

student_no数(10)nullでありません、

student_nameのVARCHAR2(10)nullではありません、

nullでないstudent_age番号(4)、

nullでないstudent_sexのVARCHAR2(4)、

student_creditのVARCHAR2(18)nullでありません、

teacher_no数(10)nullでありません、

制約PK_Student主キー(student_no) - 主キーを設定します

);

 

教師テーブルを作成:

(表教師を作成します。

teacher_no数(10)nullでありません、

TEACHER_NAME先生のVARCHAR2(10)nullではありません、

teacher_salary数(10)NOT NULL、

制約PK_Teacher主キー(teacher_no) - 主キーを設定します

);

- 外部キー制約を作成します。

テーブルの学生が制約FK_Student_References_Teacher(teacher_no)参照先生(teacher_no)を追加変更します。

 

1.primaryキー

☆表に主キー、それはNULLにすることはできません値の一次キーを有し、各レコードが(同じ)を繰り返すことができない、そうでなければ次のエラーが発生した場合

A.主キーがnullに設定されている場合:ERROR 1048(23000):列「ID」をNULLにすることはできません

B.主キーリピート:ERROR 1062(23000):重複エントリー '1' キー 'PRIMARY' の

例子:テーブルT2を作成する(IDはint(4)NOT NULL主キー、--auto_increment、名char(20)nullでない、性別INT(4)NOT NULLデフォルト値を '0'、度二重(16,2))。

A. SQL文:(1、 'WWW'、1,99.8)T2値を挿入し、二つのパスが与えられたとき

B. SQLステートメント:(NULL、 'WWW'、1,99.8)のT2値を挿入します。

結果:SELECT * FROM t2から。

+ ---- + ---- + ------ + ---------- +
| ID | 名前| セックス| 度|
+ ---- + ---- + ------ + ---------- +
| 1 | WWW | 1 | 99.80 |
+ ---- + ---- + ------ + ---------- +

そうでなければ、NOの場合、主キーテーブル

语句:表T1(ID整数(4)、名char(20))を作成します。

C.insert t1の値(1、 'WWW')を行うことができるn回

D.insert t1の値(NULL、 'WWW')、実行されてもよいn回

結果:T1から*を選択します。

+ -------- + --------- +
| ID | 名前|
+ -------- + --------- +
| 1 | WWW |
| 1 | WWW |
| NULL | WWW |
+ -------- + -------- +

2.foreignキー

条件は3つの外部キーを持っています

①2つのテーブルはInnoDBテーブルでなければならない、MyISAMテーブルは、外部キーテーブルをサポートしていません。
     あなたは、外部キーのインデックスを作成するときのMySQL 4.1.2バージョンが自動的に作成された後に外部キー列は、インデックス②確立する必要がありますが、以前のバージョンの場合我々は、明示的に確立する必要がある。
     ③テーブルの二つの列は、外部キー関係類似のデータ型であるようなint型のTINYINTとして交換カラムの、すなわちタイプ、およびINTとチャーではないかもしれないしなければなりません。

我々は、テーブルを構築:テーブルT1を作成する(IDはint(4)、名char(20))= InnoDBのタイプ、インデックスおよびT1(名前)のインデックスt1_indexを作成します。

次に、テーブルを構築:テーブルT3(ID整数(4)、名char(20)、外部キー(名称)を参照さt1(名)= InnoDBのタイプ)を作成します。

那么T3値(1、 'AAA')を挿入します。就会报错:ERROR 1452(23000):子行を追加または更新できません:外部キー制約は、FOREIGN KEY t3_ibfk_1`( `anwei`.`t3`、制約を`失敗( `NAME`)REFERENCES` t1`( ​​`NAME`))

しかし、完全なインサートのT1値(1、「AAA」);それの後、すなわち値(1、「AAA」)は、与えられず、他の値は、順番に与えられます。

説明:名前が許容ヌル値で、ヌル値はそのように限定されません。
---------------------

フィールドを作成し、フィールド名が最初に、フィールドのデータ型に続いて、このフィールドは背後に制約されている、それは一般的に、符号なし、nullではありませんが、AUTO_INCREMENT、デフォルト、というように。

そして、一つ一つは5で、対象の概念を説明します

一意のキー:テーブル内の1つ以上の列を識別することができるので、両方のカラムレベルの制約と考えることができ、それは、テーブルレベルの制約と見なすことができます。すべての要素を限定することを意図するもので列が繰り返されていない列要素がnullであることができます。
主キー:テーブル内のすべての要素が繰り返されることはありません列を抑制するために、一つだけを持つことができ、かつnullにすることはできません。
二つ以上の接触の違い:主=ユニーク+ nullでない引数が望ましい。すぐに目的のレコードを検索するために、主キー列でプライマリシステムは、ルックアップテーブル内のレコードする場合は、指標であるマークされますこのカラム; ID int型符号なしNOT NULL AUTO_INCREMENT:ので、ここで一次変性列は一般的によく事前に定義され、それは、次のような列のインデックスに使用されます。一意のキーは、たとえば、要素のリストは、必ずしもすぐに取得するために使用されていない、繰り返されていない制限するために使用されています。私たちは、テーブル「ID」フィールド内の各レコードは繰り返されないか、各レコードの「電話番号」フィールドが繰り返されないことを確実にしたいですあなたは、インデックス検索とそのような列は関係ない時に、ユニークで制約することができます。
外部キー:別のテーブル内の一意のキーに対する外部キーポイントのテーブル(もちろん、主キーとすることができ、一般的に主キー、すべての後に、主キーではないヌル値でなければなりません)。テーブルであり、カラムは外国、前記各要素を識別し、要素は、一意の識別子の別のテーブルの列にマッピングすることができます。
インデックス/キー:両方は、一般的に平等に扱わ同一視します。その機能は:あなたは、主キーフィールドとして識別されている場合は、のように、すぐに行うにはどのようにクエリの結果を得るために、インデックスを使用できますか?主キーは、唯一、あなたは大幅ルックアップ列要素のスピードを加速、フィールドにJiasuoリードに位置するように、インデックス/キーを使用することができ、テーブルを設定することができます。
---------------------

 

日付時刻を遮断するTRUNC関数

使用法:TRUNC(フィールド名、精度)

具体的な例:

2016年10月28日午前15時11分58秒:Table1テーブルに、SYSDATEというフィールド、回線ID = 123、日付があります

:次のように年を傍受するための時間は、SQL文がある1、

ID = 123 TABLE1から(SYSDATE、 'YYYY')TRUNC選択; --yyyyも年置き換えられ

ディスプレイ:2016年1月1日

2、時間は、月のSQL文をインターセプトします:

ID = 123 TABLE1から(SYSDATE、 'MM')TRUNCを選択し;

ディスプレイ:2016年10月1日

図3に示すように、これまでの傍受時間、SQL文:

ID = 123 TABLE1から(SYSDATEは、D-D '')TRUNCを選択し;

ディスプレイ:2016年10月28日

4、時間が時間に摂取した場合、SQL文:

TABLE1から(SYSDATE、 'HH')TRUNC選択する場所ID = 123。

ディスプレイ:2016年10月28日午前15時○○分○○秒

5、時間が分に摂取した場合、SQL文:

ID = 123 TABLE1から(SYSDATE、 'MI')TRUNCを選択し;

ディスプレイ:2016年10月28日午後03時11分00秒

6、時間が一時的に秒を操作する方法がわからないように注意します

7、直接ではなくTRUNC(SYSDATE、 'YYYY-MM-DD')によって、 "過度の精度指定文字" を要求します

 

 

概要は、私の個人的な主キー(主キー)、外部キー(外部キー)、キー候補(候補キー)、スーパーキー(スーパーキー)、参照説明します

コンセプト:

主キー:ユーザーがキー識別の候補タプルを選択し、主キーNOT NULL

外部キー:2つのテーブルの関係を記述するために、外部キーはNULLにすることができます

ウルトラボンド一意タプルを識別する属性のセット

候補キー:余分なスーパーキーのプロパティを含みません

例:

生徒と教師は、次の2つのテーブルを持っている場合:

学生(student_no、student_name、student_age、student_sex、student_credit、teacher_no)

教師(teacher_no、TEACHER_NAME先生、teacher_salary)

スーパーキー:学生数(student_no)、またはID番号(student_credit)、または(学生番号、名前)(student_no、student_name)、または(学生番号、ID番号)(student_no、student_credit)、などに応じて学生テーブル一意た一人の学生を決定するために、これらの組み合わせは、この表のスーパーキーとして使用することができます

候補キー:任意のキーの組み合わせを属性取り除くもはや超超キーがない場合、キーは、スーパー候補キーあり、最小の超キーです。学生数(student_no)、ID番号として学生テーブルの候補キー(student_credit)

主キー:主キーが候補キーは、通常、テーブルの主キーとして番号を選択します人間の意思決定することができます。今、選択したstudent_no、主キーとしてteacher_no Studentテーブル、教師テーブル

外部キー:teacher_no 2つの公開鍵テーブル、テーブルには主キーの先生で、生徒はそうteacher_noは、外部キーテーブルであり、テーブルには関係学生テーブル教師を記述するために使用します

 

--References使い方

Studentテーブルを作成:

(テーブルの学生を作成します。

student_no数(10)nullでありません、

student_nameのVARCHAR2(10)nullではありません、

nullでないstudent_age番号(4)、

nullでないstudent_sexのVARCHAR2(4)、

student_creditのVARCHAR2(18)nullでありません、

teacher_no数(10)nullでありません、

制約PK_Student主キー(student_no) - 主キーを設定します

);

 

教師テーブルを作成:

(表教師を作成します。

teacher_no数(10)nullでありません、

TEACHER_NAME先生のVARCHAR2(10)nullではありません、

teacher_salary数(10)NOT NULL、

制約PK_Teacher主キー(teacher_no) - 主キーを設定します

);

- 外部キー制約を作成します。

テーブルの学生が制約FK_Student_References_Teacher(teacher_no)参照先生(teacher_no)を追加変更します。

 

1.primaryキー

☆表に主キー、それはNULLにすることはできません値の一次キーを有し、各レコードが(同じ)を繰り返すことができない、そうでなければ次のエラーが発生した場合

A.主キーがnullに設定されている場合:ERROR 1048(23000):列「ID」をNULLにすることはできません

B.主キーリピート:ERROR 1062(23000):重複エントリー '1' キー 'PRIMARY' の

例子:テーブルT2を作成する(IDはint(4)NOT NULL主キー、--auto_increment、名char(20)nullでない、性別INT(4)NOT NULLデフォルト値を '0'、度二重(16,2))。

A. SQL文:(1、 'WWW'、1,99.8)T2値を挿入し、二つのパスが与えられたとき

B. SQLステートメント:(NULL、 'WWW'、1,99.8)のT2値を挿入します。

結果:SELECT * FROM t2から。

+ ---- + ---- + ------ + ---------- +
| ID | 名前| セックス| 度|
+ ---- + ---- + ------ + ---------- +
| 1 | WWW | 1 | 99.80 |
+ ---- + ---- + ------ + ---------- +

そうでなければ、NOの場合、主キーテーブル

语句:表T1(ID整数(4)、名char(20))を作成します。

C.insert t1の値(1、 'WWW')を行うことができるn回

D.insert t1の値(NULL、 'WWW')、実行されてもよいn回

結果:T1から*を選択します。

+ -------- + --------- +
| ID | 名前|
+ -------- + --------- +
| 1 | WWW |
| 1 | WWW |
| NULL | WWW |
+ -------- + -------- +

2.foreignキー

条件は3つの外部キーを持っています

①2つのテーブルはInnoDBテーブルでなければならない、MyISAMテーブルは、外部キーテーブルをサポートしていません。
     あなたは、外部キーのインデックスを作成するときのMySQL 4.1.2バージョンが自動的に作成された後に外部キー列は、インデックス②確立する必要がありますが、以前のバージョンの場合我々は、明示的に確立する必要がある。
     ③テーブルの二つの列は、外部キー関係類似のデータ型であるようなint型のTINYINTとして交換カラムの、すなわちタイプ、およびINTとチャーではないかもしれないしなければなりません。

我々は、テーブルを構築:テーブルT1を作成する(IDはint(4)、名char(20))= InnoDBのタイプ、インデックスおよびT1(名前)のインデックスt1_indexを作成します。

次に、テーブルを構築:テーブルT3(ID整数(4)、名char(20)、外部キー(名称)を参照さt1(名)= InnoDBのタイプ)を作成します。

那么T3値(1、 'AAA')を挿入します。就会报错:ERROR 1452(23000):子行を追加または更新できません:外部キー制約は、FOREIGN KEY t3_ibfk_1`( `anwei`.`t3`、制約を`失敗( `NAME`)REFERENCES` t1`( ​​`NAME`))

しかし、完全なインサートのT1値(1、「AAA」);それの後、すなわち値(1、「AAA」)は、与えられず、他の値は、順番に与えられます。

説明:名前が許容ヌル値で、ヌル値はそのように限定されません。
---------------------

フィールドを作成し、フィールド名が最初に、フィールドのデータ型に続いて、このフィールドは背後に制約されている、それは一般的に、符号なし、nullではありませんが、AUTO_INCREMENT、デフォルト、というように。

そして、一つ一つは5で、対象の概念を説明します

一意のキー:テーブル内の1つ以上の列を識別することができるので、両方のカラムレベルの制約と考えることができ、それは、テーブルレベルの制約と見なすことができます。すべての要素を限定することを意図するもので列が繰り返されていない列要素がnullであることができます。
主キー:テーブル内のすべての要素が繰り返されることはありません列を抑制するために、一つだけを持つことができ、かつnullにすることはできません。
二つ以上の接触の違い:主=ユニーク+ nullでない引数が望ましい。すぐに目的のレコードを検索するために、主キー列でプライマリシステムは、ルックアップテーブル内のレコードする場合は、指標であるマークされますこのカラム; ID int型符号なしNOT NULL AUTO_INCREMENT:ので、ここで一次変性列は一般的によく事前に定義され、それは、次のような列のインデックスに使用されます。一意のキーは、たとえば、要素のリストは、必ずしもすぐに取得するために使用されていない、繰り返されていない制限するために使用されています。私たちは、テーブル「ID」フィールド内の各レコードは繰り返されないか、各レコードの「電話番号」フィールドが繰り返されないことを確実にしたいですあなたは、インデックス検索とそのような列は関係ない時に、ユニークで制約することができます。
外部キー:別のテーブル内の一意のキーに対する外部キーポイントのテーブル(もちろん、主キーとすることができ、一般的に主キー、すべての後に、主キーではないヌル値でなければなりません)。テーブルであり、カラムは外国、前記各要素を識別し、要素は、一意の識別子の別のテーブルの列にマッピングすることができます。
インデックス/キー:両方は、一般的に平等に扱わ同一視します。その機能は:あなたは、主キーフィールドとして識別されている場合は、のように、すぐに行うにはどのようにクエリの結果を得るために、インデックスを使用できますか?主キーは、唯一、あなたは大幅ルックアップ列要素のスピードを加速、フィールドにJiasuoリードに位置するように、インデックス/キーを使用することができ、テーブルを設定することができます。
---------------------

 

日付時刻を遮断するTRUNC関数

使用法:TRUNC(フィールド名、精度)

具体的な例:

2016年10月28日午前15時11分58秒:Table1テーブルに、SYSDATEというフィールド、回線ID = 123、日付があります

:次のように年を傍受するための時間は、SQL文がある1、

ID = 123 TABLE1から(SYSDATE、 'YYYY')TRUNC選択; --yyyyも年置き換えられ

ディスプレイ:2016年1月1日

2、時間は、月のSQL文をインターセプトします:

ID = 123 TABLE1から(SYSDATE、 'MM')TRUNCを選択し;

ディスプレイ:2016年10月1日

図3に示すように、これまでの傍受時間、SQL文:

ID = 123 TABLE1から(SYSDATEは、D-D '')TRUNCを選択し;

ディスプレイ:2016年10月28日

4、時間が時間に摂取した場合、SQL文:

TABLE1から(SYSDATE、 'HH')TRUNC選択する場所ID = 123。

ディスプレイ:2016年10月28日午前15時○○分○○秒

5、時間が分に摂取した場合、SQL文:

ID = 123 TABLE1から(SYSDATE、 'MI')TRUNCを選択し;

ディスプレイ:2016年10月28日午後03時11分00秒

6、時間が一時的に秒を操作する方法がわからないように注意します

7、直接ではなくTRUNC(SYSDATE、 'YYYY-MM-DD')によって、 "過度の精度指定文字" を要求します

 

おすすめ

転載: www.cnblogs.com/klb561/p/11080431.html