Heim  >  Artikel  >  Datenbank  >  Was ist ein MySQL-Fremdschlüssel?

Was ist ein MySQL-Fremdschlüssel?

藏色散人
藏色散人Original
2023-04-11 10:45:473364Durchsuche

Der MySQL-Fremdschlüssel ist eine sehr nützliche Datenverarbeitungsfunktion, mit der Daten zwischen Tabellen schnell aktualisiert werden können. Einfach ausgedrückt kann er eine Zuordnung zwischen zwei Tabellen herstellen und eine Tabelle bedienen. Zu diesem Zeitpunkt ändern sich auch die Daten in einer anderen Tabelle.

Was ist ein MySQL-Fremdschlüssel?

Die Betriebsumgebung dieses Tutorials: Windows 10-System, MySQL8-Version, Dell G3-Computer.

Was ist ein MySQL-Fremdschlüssel?

Die Verwendung von MySQL-Fremdschlüsseln

Fremdschlüssel sind eine sehr, sehr einfach zu verwendende Sache, und sie sind auch eine Funktion, die viele relationale Datenbanken haben. Es kann eine Beziehung zwischen zwei Tabellen hergestellt werden, sodass sich beim Betrieb einer Tabelle auch die Daten in der anderen Tabelle gleichzeitig ändern.

Beispiel:
一个学生表里面有学生的所有信息,其中有一个字段是班级id,又有一个班级表,记录着所有的班级信息,按照逻辑来说,如果我们删除了班级
表里面的某个班级,学生表里面是这个班级id的信息就应该修改。

Das obige Beispiel kann normal ausgefüllt werden, wenn wir zuerst die Klasse löschen und dann das Klassen-ID-Feld ändern, das die Schülerinformationen dieser Klasse in der Schülertabelle darstellt zwei Teile. Wenn wir jedoch Fremdschlüssel verwenden, ist nur ein Schritt erforderlich. Solange einer der Fremdschlüssel zugeordnet ist, wird der andere automatisch aktualisiert. Es ist auch einfacher

Details vor der Verwendung
  1. Bei der Auswahl einer Speicher-Engine für die Datenbank müssen Sie eine Speicher-Engine auswählen, die sich an Fremdschlüssel anpasst, z. B. die Standard-Speicher-Engine von MySQL innodb
  2. Die Feldtypen des zugehörigen Fremdschlüssels Felder müssen konsistent sein: Wenn die Klassen-ID der Klassentabelle vom Typ int ist, sollte auch die Klassen-ID vom Typ int sein. Dies ist sehr wichtig. Erstellen Sie Fremdschlüsseleinschränkungen im neue Tabelle
  3. 	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  -- 默认存储引擎和编码的字符串

Fremdschlüssel in vorhandenen Tabellen hinzufügen und löschenWas ist ein MySQL-Fremdschlüssel?

Fremdschlüssel löschen ··· – Fremdschlüssel löschen (Fremdschlüsseleinschränkungen)
Tabelle ändern stu_study Fremdschlüssel löschen stu_study_classes;
    ·· ·


  1. Um einen Fremdschlüssel zu löschen, löschen Sie ihn anhand des Fremdschlüsselnamens in der Tabelle. Dadurch wissen wir auch indirekt, dass der Fremdschlüsselname nicht wiederholt werden kann.

    Fremdschlüssel hinzufügen
    Was ist ein MySQL-Fremdschlüssel?
    	-- 添加外键
      alter table stu_study add
      constraint stu_study_classes  -- 外键名 是一定不能够重复的,通常会用关联的两个表名进行命名
      foreign key(course_id)
      references classes(id)
      on delete cascade;

  2. Das Hinzufügen von Fremdschlüsseln zu einer vorhandenen Tabelle ist dem Hinzufügen von Fremdschlüsseln beim Erstellen einer Tabelle sehr ähnlich. Ein Detail besteht darin, dass er den Namen des Fremdschlüssels mit Einschränkung verwenden muss, um den Namen des Fremdschlüssels festzulegen Schlüssel.
  3. Wir werden feststellen, dass das Hinzufügen und Ändern von Fremdschlüsseln dem Hinzufügen und Ändern von Tabellenfeldern sehr ähnlich ist.

Was ist ein MySQL-Fremdschlüssel?
Operationen zugehöriger Aktionen

Untertabelle

Wir können das Wort „Tabelle“ und „Untertabelle“ einfach so verstehen, dass die Tabelle mit dem Fremdschlüsselsatz die Untertabelle ist.
Es gibt viele Arten verwandter Aktionen, wie z. B. Was ist ein MySQL-Fremdschlüssel? Diese drei werden alle festgelegt, wenn der Fremdschlüssel festgelegt wird, z Da

Was ist ein MySQL-Fremdschlüssel? die beim Löschen ausgeführte Aktion bedeutet, sind die Hauptunterschiede folgende:

  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

Was ist ein MySQL-Fremdschlüssel?
Was ist ein MySQL-Fremdschlüssel?

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

推荐学习:《MySQL视频教程

Das obige ist der detaillierte Inhalt vonWas ist ein MySQL-Fremdschlüssel?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn