Heim >Datenbank >MySQL-Tutorial >So verwenden Sie Primärschlüssel und Fremdschlüssel in MySQL-Anweisungen
Wenn in einer Datenbanktabelle eine Reihe von Feldern vorhanden ist, die einen Datensatz eindeutig bestimmen können, können diese als Primärschlüsselfelder von entworfen werden der Tisch.
Beispiel: Wenn Sie die Informationstabelle einer Person erstellen möchten (Felder: Name, Alter, Herkunftsort, Arbeitseinheit...), dann ist die ID-Nummer die einzige, die Sie identifizieren kann, also die ID-Nummer Primärschlüssel.
Primärschlüsselfeldname Primärschlüssel
Grundsätzlich wird ein Feld als Primärschlüssel verwendet, und es wird empfohlen, ein Feld ohne geschäftliche Bedeutung als zu verwenden der Primärschlüssel, wie zum Beispiel: ID usw.
Der Typ und die Länge des Primärschlüsselfelds werden durch die Art und Weise bestimmt, wie der Primärschlüsselwert generiert wird:
1.4.1)
Auto-Inkrementierung: Mit Hilfe des datenbankeigenen Primärschlüsselgenerierungsmechanismus
Numerische Länge Wird durch die Datenmenge bestimmt
Erstellung: Primärschlüsselfeldname Primärschlüssel nicht null auto_increment
Eigenschaften:
Vorteile: Hohe Entwicklungseffizienz, da automatisch möglich Es ist nummeriert und zum einfachen Auffinden gespeichert. Es nimmt wenig Platz ein und kann Entwicklern Zeit sparen.
Nachteile: Geringe Betriebseffizienz und Inflexibilität. Aufgrund des automatischen Wachstums ist es schwierig, Daten mit einer bestimmten ID manuell einzufügen oder zu importieren. Wenn die Datenmenge zu groß ist, dauert es länger, bis die Datenbank automatisch vergrößert wird Der Primärschlüssel führt dazu, dass Datenbankabfragevorgänge langsamer werden. Bei einer Operation zum Zusammenführen von Tabellen besteht die Wahrscheinlichkeit, dass der Primärschlüssel dupliziert wird.
1.4.2)
assighed: Der Programmierer generiert manuell den Primärschlüsselwert, den einzigen Nicht-Null-Algorithmus.
hi/low: Die Länge des numerischen Typs wird durch die Datenmenge bestimmt.
UUID: Die Zeichenfolge Die Länge beträgt 32 Bit.
public class UUIDUtil {//java中自带UUID的算法 public static String getUUID(){ return UUID.randomUUID().toString().replaceAll("-", ""); } }
Eigenschaften:
Vorteile: Die Generierung des Primärschlüsselwerts ist sehr flexibel und kann unter allen Umständen Eindeutigkeit gewährleisten, und die Datenmigration ist bequem. Nachteile: Es nimmt viel Platz ein, ist schwer zu merken und verringert die Leistung.
1.4.4)
Gemeinsamer Primärschlüssel: Wird durch die Art und Länge mehrerer Felder bestimmt
2. Fremdschlüssel:
2.2) Erstellung von Fremdschlüsseln (Einschränkungen) (nicht empfohlen, im Allgemeinen keine Fremdschlüsseleinschränkungen, nur Fremdschlüsselkonventionen):
2.3) Das Vorkommen von Fremdschlüsseln:
Beziehungstypen, die in Assoziationsbeziehungen existieren:
1 zu 1: Ein Datensatz in einer Tabelle (A) kann nur einem Datensatz in einer anderen Tabelle (B) entsprechen, und der andere Datensatz in der anderen Tabelle (B) einem Datensatz kann nur einem Datensatz in einer Tabelle (A) entsprechen.
z. B.: Software Engineering 2777 Klassen- und Gruppenleiter, Staatsbürgerschaft und Personalausweis. (Produkttabelle und Beschreibungstabelle des Produkts)
1 zu viele: Ein Datensatz in einer Tabelle (A) kann mehreren Datensätzen in einer anderen Tabelle (B) entsprechen. Ein Datensatz kann nur einem Datensatz in einer Tabelle (A) entsprechen. .
-Viele-Beziehung. Es kann mehrere Waren, Studenten und Klassen unter einer Produktkategorie geben
Viele-zu-viele: (Es gibt zwei Tabellen, ein Datenelement in Tabelle A entspricht B Mehrere Einträge in der Tabelle, gleichzeitig entspricht ein Eintrag in Tabelle B mehreren Einträgen in Tabelle A)
z. B.: Kundentabelle und Abteilungstabelle.
Verwandte Abfragen (Daten in mehreren Tabellen gleichzeitig mit Fremdschlüsseln abfragen)
Arten verwandter Abfragen:
Innerer Join: Fragen Sie alle Daten ab, die die Bedingungen erfüllen, und erfordern Sie, dass die Ergebnisse entsprechende Datensätze in beiden Tabellen haben.
Linker äußerer Verbindung: Alle qualifizierten Daten in der linken Tabelle abfragen, auch wenn in der rechten Tabelle kein entsprechender Datensatz vorhanden ist.
Rechter äußerer Join: Alle qualifizierten Daten in der rechten Tabelle abfragen, auch wenn in der linken Tabelle kein entsprechender Datensatz vorhanden ist. 2.3.1) In eins-zu-viele:
Beispiel: A (1) ---------- b (n)
Father WatchTBL_STUDENT TBL_CLASS
ID NAME CLASS_ID ID Name 1001 zs 111 111 class1
1002 ls 111 222 class2
1003 ww 222
1004 zl
//查询所有姓张的学生的id,name和所在班级name select s.id,s.name,c.name as className from tbl_student s join tbl_class c on s.class_id=c.id//假如外键不可以为空 where s.name like 'z%'
2.3.2)在一对一中:
tbl_person tbl_card
id name id name
1001 zs 1001 card1
特点:
a)共享主键:(不推荐)
添加数据:先添加先产生的表,再后产生的表记录
删除数据:先删除后产生的表记录,再删除先产生的表记录
查询数据:无需进行连接查询:
//查询zhangsan的驾照信息 1001 select * from tbl_card where id='1001'
2.3.3)多对多:
tbl_student tbl_course
id name id name
1001 zs 111 java
1002 ls 222 mysql
tbl_student_course_relation
student_id course_id
1001 111
1001 222
1002 111
1002 222
特点:
添加数据时,先添加父表记录(tbl_student,tbl_course),再添加子表(tbl_student_course_relation)记录;
删除数据时,先删除子表记录(tbl_student_course_relation),再删除父表记录(tbl_student,tbl_course)
查询数据时,可能会进行关联查询:
//查询所有姓张的学生的id,name,和所选课程的name select s.id,s.name,c.name as courseName from tbl_student s join tbl_student_course_relation scr on s.id=scr.student_id join tbl_course c on scr.course_id=c.id where s.name like 'z%'
Das obige ist der detaillierte Inhalt vonSo verwenden Sie Primärschlüssel und Fremdschlüssel in MySQL-Anweisungen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!