ホームページ  >  記事  >  データベース  >  mysql外部キーとは何ですか

mysql外部キーとは何ですか

藏色散人
藏色散人オリジナル
2023-04-11 10:45:473411ブラウズ

mysql 外部キーは、テーブル間のデータを迅速に更新できる非常に便利なデータ処理関数です; 簡単に言えば、2 つのテーブル間の関連付けを確立し、操作を実行できます 一方のテーブルが更新されると、もう一方のテーブルのデータも更新されますも同時に変化していきます。

mysql外部キーとは何ですか

このチュートリアルの動作環境: Windows 10 システム、mysql8 バージョン、Dell G3 コンピューター。

mysql 外部キーとは何ですか?

##MySQL 外部キーの使用

外部キーkey は非常に使いやすいもので、多くのリレーショナル データベースに備わっている機能でもありますが、簡単に言うと、1 つのテーブルを操作するときにできる 2 つのテーブル間の関連付けを行うことができます。別のテーブルのデータも同時に変更されます。

例:
一个学生表里面有学生的所有信息,其中有一个字段是班级id,又有一个班级表,记录着所有的班级信息,按照逻辑来说,如果我们删除了班级
表里面的某个班级,学生表里面是这个班级id的信息就应该修改。
上記の例は、プログラムを使用すると正常に完了します。まずクラスを削除してから、学生テーブルに追加します。 . このクラスの生徒情報のクラス ID フィールドが変更され、2 つの部分に分割されます。しかし、外部キーを使用する場合、必要な手順は 1 つだけです。外部キーの 1 つが関連付けられている限り、もう 1 つは自動的に更新されます。明らかに、この方がプログラムに即しています。また、簡単です

使用前の詳細
データベースのストレージ エンジンを選択するときは、次のような外部キーに適応するストレージ エンジンを選択する必要があります。 mysql エンジンのデフォルトのストレージとして innodb
  1. 関連する外部キー フィールドのフィールド タイプは一貫している必要があります。たとえば、student テーブルの class_id のタイプは int であり、クラス テーブルの class_id のタイプは一致している必要があります。これは非常に重要です。
新しいテーブルに外部キー制約を作成します
	create table stu_study (
	  sid int primary key auto_increment,-- 定义Sid  
      sname varchar(15) not null,
      course_id int default null,  -- 定义课程id 课程id是外键所以要与关联的主表的字段类型保持一致
      constraint stu_study_class -- 一个表里可能有多个表之间关联,所以外键需要起一个名字
      foreign key (class_id) -- 关联的外键名
      references classes(id)  -- 关联的主表和主表的字段
      on delete cascade  -- 当删除的时候触发
    )engine=InnoDB default charset utf8  -- 默认存储引擎和编码的字符串

mysql外部キーとは何ですか

既存のテーブルの外部キーの追加と削除
外部キーの削除
    ···
  1. – 外部キー (外部キー制約) の削除
    alter table stu_study drop external key stu_study_classes;
    ···


    外部キーの削除は、テーブル内の外部キー名に基づいて削除することによって行われます。これにより、間接的に、外部キーがキー名を繰り返すことはできません。 mysql外部キーとは何ですか
    外部キーの追加
  2. 	-- 添加外键
      alter table stu_study add
      constraint stu_study_classes  -- 外键名 是一定不能够重复的,通常会用关联的两个表名进行命名
      foreign key(course_id)
      references classes(id)
      on delete cascade;

既存のテーブルに外部キーを追加することは、テーブルの作成時に外部キーを追加することとよく似ています。つまり、制約外部キー名を使用して外部キーの名前を設定する必要がありますmysql外部キーとは何ですか 外部キーの追加と変更は、テーブル フィールドの追加と変更と非常によく似ていることがわかります。追加、ドロップなどです。

関連するアクションの操作#サブ テーブル

# メイン テーブル
mysql外部キーとは何ですか # テーブルとサブテーブルという言葉は単に と理解できます。外部キーが設定されたテーブルがサブテーブルです。
関連するアクションには、
cascademysql外部キーとは何ですか
set Null# など、さまざまな種類があります。 ##、
no action、すべて 3 外部キーを設定するときに、関連付けられたアクションを設定します。たとえば、 は、削除時に実行されるアクションを表します。主な違いは次のとおりです。次のように: ###

  1. cascade 删除主表的某个字段的时候,子表含有这个字段的数据会被清空,这个还是属于相对危险的一个操作的
  2. +set null 删除主表的某个字段的时候,子表含有这个字段的这个哪一行的这个字段会用null来显示,但是有个细节就是设置外键的这个字段字段类型就不能设置为not null类型的,否则会报错
  3. no action 这个字段会比较有意思,也就是说当主表要删除某个行的时候,如果外键关联有含有这个主表的外键的字段数据的话,就不会删除成功,系统会直接报错
关联更新操作

之前是主要讲了关联删除,是因为外键在使用的时候关联删除操作是使用的比较频繁的,关联更新的频率是相对来说低一点儿的
关联更新的三个关联操作和删除时一样的,分别是cascade,set null,no action意思是也是一样的,主表某个字段更新了,子表也会更新那个字段!!,主表更新的某条数据,子表的使用的那个数据会变成空,和子表在使用的情况下,主表就不能够更新数据

	alter table stu_study drop foreign key stu_study_classes;  -- 删除外键
	-- 添加外键
	alter table stu_study add 
    constraint stu_study_classes 
    foreign key (course_id) 
    references classes(id) 
    on delete set null -- 一次性设置外键的两种动作
    on update cascade

mysql外部キーとは何ですか
mysql外部キーとは何ですか

总结
  • 数据库的外键是非常非常好用的一个技术,可以让我们快速的进行表之间的数据的更新
  • 外键可以简单的理解成会自动的替我们做一个数据变动的处理

推荐学习:《MySQL视频教程

以上がmysql外部キーとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。