Am'm setarea unei baze de date folosind phpMyAdmin. Am doua tabele ("foo" și "bar"), indexate pe chei primare. Eu sunt încercarea de a crea un tabel relațional (foo_bar
) între ele, folosind chei primare ca și chei externe.
Am creat aceste tabelele MyISAM, dar s-au schimbat toate trei la InnoDB, pentru că am citit că MyISAM nu't suport chei externe. Toate " id " câmpurile sunt INT(11)
.
Atunci când aleg foo_bar
tabel, faceți clic pe "relația vedere" link-ul, și să încerce să setați FK coloane pentru a fi date.foo.id " și " bază de date.bar.id`, se spune "un indice definit!" pe lângă fiecare coloană.
Ce sunt eu lipsesc?
Pentru simplificare, vreau să-l păstrați, folosind phpMyAdmin. Eu sunt în prezent, folosind XAMPP, care este destul de ușor să mă concentrez pe PHP/CSS/Javascript, și vine cu phpMyAdmin.
De asemenea, deși nu am't a fost în stare să înființeze explicit chei externe totuși, eu nu am un tabel relațional și poate efectua se alătură astfel:
SELECT *
FROM foo
INNER JOIN foo_bar
ON foo.id = foo_bar.foo_id
INNER JOIN bar
ON foo_bar.bar_id = bar.id;
Mă face să mă inconfortabil să nu aibă FKs definit în mod explicit în baza de date.
Dacă doriți să utilizați phpMyAdmin pentru a configura relații, trebuie să faci 2 lucruri. Mai întâi de toate, trebuie să definiți un index pe coloana cheie externă în referindu-se masa (deci foo_bar.foo_id, în cazul tău). Apoi, du-te la relația vedere (la trimitere masă) și selectați menționate coloana (deci, în cazul dumneavoastră foo.id-ul) și pe actualizare și șterge acțiuni.
Cred chei externe sunt utile dacă aveți mai multe tabele legate una de alta, în special, delete script-uri va deveni foarte scurt dacă setați corelarea opțiuni corect.
EDIT: Asigurați-vă că ambele tabele au InnoDB motor selectat.
phpMyAdmin vă permite să definiți chei externe folosind "relațiile" vedere. Dar când, MySQL suportă doar de externe constrângeri pe "INNO DB" tabele, primul pas este să vă asigurați că mesele pe care le utilizați sunt de acest tip.
Pentru a seta o cheie externă, astfel încât PID coloană într-un tabel numit COPIL referințe la ID-ul de coloană într-un tabel numit PĂRINTE, puteți face următoarele:
De a face un export pe masa COPILULUI, ar trebui să vedeți o restricție de cheie externă a fost creat pentru PID coloana.
Acesta este un rezumat al unui articol Wikipedia. Se identifică diferite tipuri de relații se poate stipula în PHPmyadmin. Am pus-o aici pentru că este relevant să @Nathan's comentariu privind stabilirea chei externe opțiuni pentru "modificare/ștergere" dar este prea mare pentru un comentariu - sper că vă ajută.
CASCADE
Ori de câte ori rânduri în master (referite) tabel se elimină (resp. actualizat), respectiv de rânduri ale copilului (corelarea) tabel cu o potrivire cheie externă coloana va fi șters (resp. actualizat), precum și. Acest lucru este numit cascade delete (resp. update[2]).
RESTRICȚIONAREA
O valoare nu pot fi actualizate sau șterse atunci când un rând există într-o cheie externă tabel care face referire la valoarea de referință de masă. În mod similar, un rând nu poate fi șters, atâta timp cât nu există o referință la acesta din o cheie externă masă.
NICI O ACȚIUNE
NICI o ACȚIUNE și de a RESTRICȚIONA sunt foarte mult la fel. Principala diferență între ACȚIUNE și RESTRICȚIONA este că, cu NICI o ACȚIUNE referențial integrity check se face după încercarea de a modifica tabelul. LIMITA se verifica înainte de a încerca pentru a executa instrucțiunea UPDATE sau DELETE. Ambele referențiale acțiuni act la fel dacă referențial integrity check eșuează: UPDATE sau DELETE va rezulta într-o eroare.
SET NULL
Cheia externă valori în corelarea rând sunt setat la NULL atunci când face referire rând este actualizate sau șterse. Acest lucru este posibil numai dacă respectivele coloane în tabelul de corelare sunt null. Din cauza semantica NULL, o referire rând cu valori nule în cheie externă coloane nu are nevoie de o referință rând.
SET DEFAULT
Similare cu SET NULL, străine de valori-cheie în corelarea rând sunt stabilite la coloana implicit, atunci când face referire rând este actualizate sau șterse.
În phpmyadmin, puteți atribui cheie Străină, pur și simplu prin GUI sale. Click pe masă și du-te la Structura tab. găsiți Relația Vizualiza doar mai jos de tabel (prezentat în imaginea de mai jos).
Puteți atribui forjare cheie din caseta listă în apropiere de cheia primară.(Vezi imaginea de mai jos). și de a salva
corespunzătoare interogare SQL generat automat și executat.
Pentru cei nou la baza de date .... și necesitatea de a MODIFICA un tabel existent. O mulțime de lucruri care par a fi destul de simplu, dar există întotdeauna ceva ... între a și B.
Înainte de orice altceva, să ia o privire la acest.
ALTER TABLE child_table_name ADAUGĂ CHEIE EXTERNĂ (P_ID) REFERINȚE parent_table_name (P_ID)
Cheie externă înseamnă un non prim atribut al unui tabel referes prim atribut al unui alt în phpMyAdmin primul set coloana pe care doriți să setați cheie străină ca un index
apoi, faceți clic pe LEGĂTURĂ VEDERE
acolo puteți găsi opțiuni pentru a seta cheie externă
InnoDB vă permite să adăugați o nouă restricție de cheie externă într-un tabel prin utilizarea ALTER TABLE:
ALTER TABLE tbl_name
ADD [CONSTRAINT [symbol]] FOREIGN KEY
[index_name] (index_col_name, ...)
REFERENCES tbl_name (index_col_name,...)
[ON DELETE reference_option]
[ON UPDATE reference_option]
Pe de altă parte, dacă MyISAM are avantaje față de InnoDB, în contextul tău, de ce ai vrea să creeze constrângeri cheie străină la toate. Te poți descurca pe modelul nivel de aplicație. Doar asigurați-vă că coloanele pe care doriți să o utilizați ca chei externe sunt indexate!
Don't uita că cele două coloane trebuie să aibă același tip de date.
de exemplu, dacă o coloană este de tip INT, iar celălalt este de tip tinyint te'll obține următoarea eroare:
Eroare la crearea cheie externă pe [PID coloana] (check tipuri de date)
Pasul 1: Trebuie sa adaugi linia: default-depozitare-engine = InnoDB sub [mysqld] secțiunea mysql config (meu.cnf sau a mea.ini în funcție de sistemul de OPERARE) și reporniți serviciu mysqld.
Pasul 2: Acum, când creați masă, veți vedea tipul de masa este: InnoDB
Pasul 3: A crea atât un Părinte și Copilul masă. Acum deschide Copilului tabelului și selectați coloana U ca să avem Cheia Externă: Selectați Index Cheie de Acțiune Etichetă, așa cum se arată mai jos.
Pasul 4: Acum deschide Relația Vedere în același masa copilului de la partea de jos aproape de Imprimare de Vedere așa cum se arată mai jos.
Pasul 5: Selectați coloana U ca să avem cheia Externă și Selectați Părinte coloana din meniul drop-down. dbName.Nume tabelă.ColumnName
Selectați Valorile corespunzătoare pentru a ȘTERGE și PE ACTUALIZARE
De la oficial MySQL documentare la https://dev.mysql.com/doc/refman/8.0/en/create-table-foreign-keys.html:
MySQL necesită indici de pe chei externe și de referință cheile, astfel încât cheie externă controale pot fi rapid și nu necesită o masă de scanare.
Acesta este thread vechi dar răspunde, pentru că dacă util pentru oricine.
Etapa 1. Db dvs. de Stocare Motor setat la InnoDB
Pasul 2. Crea Primar De Masă
aici "client" este primar de masă și customer_id
este cheie primară
Pasul 3. creați cheie externă masă și dă-index
aici avem customer_addresses
ca fiind legate de masă și magazinul se adreseaza clientilor, deci aici customer_id` o legătură cu "client" masa
putem selecta index direct atunci când creați tabelul de mai jos
Dacă ați uitat să dea index atunci când creați un tabel, atunci puteți da index de structura fila din tabelul de mai jos.
Pasul 4. Odată ce indicele dau la câmp, Du-te la structura de tab și faceți clic pe Relația Vedere după cum se arată în poza de mai jos
Pasul 5. Acum selectați PE ȘTERGERE și ACTUALIZARE a ceea ce vrei să faci, Selectați coloana din tabelul curent, selectați DB (ACELAȘI DB), selectați o legătură de masă și cheie primară din tabelul respectiv ca in figura de mai jos pic și Save a
Acum, verificați dacă relația se da cu succes, du-te la externe tabelul de date listă și faceți clic pe cheie străină valoare, vă va redirecționa către primar înregistrare de masă, atunci relația făcut cu succes.