mysqlで外部キー制約を設定するにはどうすればよいですか?
mysql で外部キー制約を設定する方法: FOREIGN KEY キーワード、構文「ALTER TABLE テーブル名 ADD CONSTRAINT 外部キー名 FOREIGN KEY (列名) REFERENCES メイン テーブル名 (列名) );"。
(推奨チュートリアル: mysql ビデオ チュートリアル )
(1) 外部キーの使用:
外部キーには主に 2 つの機能があります:
1 つは、データベース自体 外部キーを通じてデータの整合性と一貫性を確保する
1 つは、ER 図の可読性を高めることです
外部キーを確立すると、開発中にデータベースに多くの問題が発生すると考える人もいます。データベース 開発者は、外部キーの検出に失敗するため、削除または挿入操作に失敗することがあります。開発者は、これが非常に面倒だと考えています。実際、この正式な外部キーにより、データの整合性と一貫性を確保する必要があります。これは良いことです。
例:
製品に関するすべての情報を記録するために使用される基本データ テーブルがあります。他のテーブルにはすべて製品 ID が格納されます。クエリを実行するときは、テーブルを結合して製品名をクエリする必要があります。資料 1 の製品テーブルには製品 ID フィールドがあり、資料 2 の製品テーブルにも製品 ID フィールド
があります。外部キーを使用しない場合、ドキュメント 1 と 2 の両方で製品 ID = 3 の製品が使用されている場合、製品テーブル内の ID = 3 の対応するレコードを削除すると、表示したときに製品を見つけることができなくなります。文書 1 および 2。名前。 テーブルの数が少ない場合、プログラムの実装時にスクリプトを記述することでデータの整合性と一貫性を確保できると考える人もいます。つまり、製品を削除する場合は、製品 ID 3 の製品
が文書 1 と 2 で使用されているかどうかを確認します。ただし、スクリプトの作成が完了すると、システムはドキュメント 3 を追加します。これにより、製品 ID も保存され、フィールドが検索されます。外部キーを使用しない場合でも、製品名を見つけることができません。製品 ID フィールドを使用する ドキュメントを追加するたびに、製品が使用されているかどうかを検出するようにスクリプトを変更して戻って変更することはできません。同時に、外部キーを導入すると速度とパフォーマンスが低下します。
(2) 外部キーの追加形式:ALTER TABLE yourtablename
ADD [CONSTRAINT 外部キー名] FOREIGN KEY [id] (index_col_name , ...)
REFERENCES tbl_name (index_col_name, ...)
[ON DELETE {CASCADE | SET NULL | NO ACTION | RESTRICT}]
[ON UPDATE {CASCADE | SET NULL | NO ACTION | RESTRICT}]
[ON UPDATE {CASCADE | SET NULL | NO ACTION | RESTRICT}]
RESTRICT}]
説明:
削除時/更新時、削除および更新操作の定義に使用されます。次に、更新および削除操作のさまざまな制約タイプを示します:
CASCADE:
外部キー内の外部キーテーブル フィールド値が更新されるか、フィールド値が存在する列が削除されます。
RESTRICT:
RESTRICT はアクションなし、つまり操作は実行されないことにも相当します。つまり、親テーブルです。外部キーに関連付けられた列の更新とレコードの削除が拒否されました。
set null:
親の外部キーに関連付けられたフィールドが更新または削除されると、子テーブルの外部キー列は null に設定されます。 挿入の場合、子テーブルの外部キー列に入力される値は、親テーブルの外部キーに関連付けられた列の既存の値のみです。それ以外の場合は、エラーが発生します。
外部キー定義は次の条件に従います: (前提条件)
1)
すべてのテーブル InnoDB タイプである必要があり、一時テーブルにすることはできません。InnoDB タイプのテーブルのみがサポートされるためです。 MySQL の外部キー。
2)
外部キーとして確立されるすべてのフィールドにはインデックスが付けられている必要があります。
3)
InnoDB 以外のテーブルの場合、FOREIGN KEY 句は無視されます。
注:
外部キーを作成する場合、外部キー名を定義するときに引用符を追加することはできません。
例: 制約 'fk_1' または制約 "fk_1" は間違っています( 3) 外部キーの表示:
SHOW CREATE TABLE ***;新しく作成されたテーブルとそのストレージ エンジンのコードを表示できます。また、外部キーの設定も確認できます。
外部キーの削除key:
alter table drop external key 'foreign key name'.
Note:
外部キーを定義する場合にのみ、外部キーの削除を容易にするために制約外部キー名を使用します。
定義されていない場合は、次の操作を行うことができます:
最初に入力します: alter tabledrop external key --> エラーが表示されます。この時点で、エラー メッセージには外部キーのシステム デフォルトの外部キー名が表示されます。 . --->外部キーを削除するために使用します。
#(4) 例
### シリーズ 1:
4.1
テーブルの親の作成 (ID Int Not Null、
主キー (id)
) Type = InnoDB;- Type = InnoDB は Engine = と同等です。 innodb
CREATE TABLE child(id INT,parent_id INT,
INDEX par_ind (parent_id),
FOREIGN KEY (parent_id) REFERENCESparent(id)
ON DELETE CASCADE
) TYPE=INNODB;
親にデータを挿入した後、子にデータを挿入します。挿入するとき、子のparent_idの値は親のデータのみにすることができます。そうでない場合、挿入は成功しません。
親レコードを削除するとき、子の対応するレコードも削除されます;->理由: 削除カスケード
親レコードを更新する場合、親レコードは更新されません;->定義されていないため、デフォルトは制限.
4.2
子が次の場合:
mysql>
create table child(id int not null 主キー auto_increment,parent_id int,
index par_ind (parent_id),
constraint fk_1 外部キー (parent_id) 参照
parent(id) on update cascade on deletestrict)
type=innodb;
上記を使用します:
1).
親レコードに対応する子のレコードも更新されます;-> 理由: 更新カスケード
2).
は、親テーブルに影響を与える子テーブル操作にはできません。親であることのみが可能です。子テーブルに影響を与えるテーブル。
3).
外部キーの削除:
テーブルの子を変更して外部キー fk_1 を削除;
外部キーを追加:
テーブルの子を変更して制約を追加 fk_1 外部キー ( parent_id) 参照
parent(id) 更新時は削除セット null;
(5) 複数の外部キーが存在します:
product_order テーブルには、他の 2 つのテーブルへの外部キーがあります。
外部キーは、製品テーブル内の 2 列のインデックスを指します。 Customer テーブルで引用されている別の 1 行インデックス:
Create table Product (Category Int Not Null, ID Int Not Null,
Price Decimal,
Primary Key (Category, ID)) Type = Innodb #;
CREATE TABLE customer (id INT NOT NULL,
主キー (id)) TYPE=INNODB;
CREATE TABLE product_order (no INT NOT NULL AUTO_INCREMENT,
product_category INT NOT NULL,
product_id INT NOT NULL、
customer_id INT NOT NULL ,
主キー(いいえ),
-- 双外键
INDEX (product_category、product_id),
FOREIGN KEY (product_category, product_id)
REFERENCES product(category, id)
削除制限時の更新カスケード、
-单外键
index(customer_id)、
foreign key(customer_id)
customer(id))タイプ= innodb;
(6) 注釈:
1.更新/削除に関しては、制限付きの方法が採用されています。外部制限の場合は、 ON UPDATE CASCADE ON DELETE RESTRICT の方法を採用するのが最善です。
以上がmysqlで外部キー制約を設定するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undress AI Tool
脱衣画像を無料で

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

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

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

MySQLにすべてのデータベースを表示するには、ShowDataBaseコマンドを使用する必要があります。 1.MySQLサーバーにログインした後、ShowDatabaseを実行できます。現在のユーザーがアクセスする許可があるすべてのデータベースをリストするコマンド。 2。information_schema、mysql、performance_schema、sysなどのシステムデータベースはデフォルトで存在しますが、許可が不十分なユーザーはそれを見ることができない場合があります。 3. selectschema_namefrominformation_schema.schemataを介してデータベースをクエリしてフィルタリングすることもできます。たとえば、システムデータベースを除外して、ユーザーが作成したデータベースのみを表示します。必ず使用してください

既存のテーブルにプライマリキーを追加するには、AddPrimaryKey句を使用してAlterTableステートメントを使用してください。 1.ターゲット列にヌル値も重複もなく、notnullと定義されていることを確認してください。 2.単一列のプライマリキー構文は、変更可能なテーブル名AddPrimaryKey(列名)です。 3.マルチカラムの組み合わせプライマリキー構文は、変更可能なテーブル名AddPrimaryKeyです(列1、列2)。 4.列がnullを許可する場合、最初に変更を実行してnotnullを設定する必要があります。 5.各テーブルには1つの主キーのみがあり、追加する前に古いプライマリキーを削除する必要があります。 6.自分で増やす必要がある場合は、Modifyを使用してAuto_incrementを設定できます。操作前にデータを確認してください

MySQLサービスが実行されているかどうかを確認して、sudosystemctlstatusmysqlを使用して確認および開始します。 2.リモート接続を許可してサービスを再起動するために、バインドアドレスが0.0.0.0に設定されていることを確認してください。 3. 3306ポートが開いているかどうかを確認し、ポートを許可するファイアウォールルールを確認して構成します。 4。「アクセス」エラーの場合、ユーザー名、パスワード、ホスト名を確認し、mysqlにログインしてmysql.userテーブルをクエリしてアクセス許可を確認する必要があります。必要に応じて、 'your_user'@'%'を使用するなど、ユーザーを作成または更新して承認します。 5. caching_sha2_passwordにより認証が失われた場合

MySQLDUMPを使用することは、MySQLデータベースをバックアップする最も一般的で効果的な方法です。テーブル構造とデータを含むSQLスクリプトを生成できます。 1.基本的な構文は、mysqldump-u [ユーザー名] -p [データベース名]> backup_file.sqlです。実行後、パスワードを入力してバックアップファイルを生成します。 2。-DATABASESオプションを使用して複数のデータベースをバックアップします:mysqldump-uroot-p--databasedb1db2> multive_dbs_backup.sql。 3.すべてのデータベースをバックアップしてください-all-database:mysqldump-uroot-p

b-TreeindexeSareBestformostphpapplications、astheisupportequalityandrangequeries、sorting、andareidealforumnsuseduseduseduseduseduseduseduseds; ororderbyclauses;

tooptimizemysqlperformance foracrmsystem、focusonindexingstrategies、schemadesignbalance、and queryeffisity.1)usepererindexingingbyanalyzingingfhereclausecolumns、jockeys、andordexeffield、およびconsonderingindexingsonsonwhereclausecolumns、and consinderingindexesonsonwhereclausecolumns、addexesonsonwhereclausecolumns、

UnionRemovesDulisionallkeepsallowsincludingDuplicates;

Group_concat()関数のセパレーターキーワードを使用して、セパレーターをカスタマイズできます。 1.セパレーターを使用して、セパレーターなどのカスタムセパレーターを指定します。 'セパレーターは、セミコロンとプラススペースに変更できます。 2.一般的な例には、パイプ文字 '|'、スペース ''、ラインブレイク文字 '\ n'、またはカスタム文字列 ' - >'をセパレーターとして使用することが含まれます。 3.セパレーターは文字列リテラルまたは式である必要があり、結果の長さはgroup_concat_max_len変数によって制限されていることに注意してください。 4。セパレーターはオプションです
