basics mysql foreign key constraint with examples
Denne vejledning forklarer det grundlæggende i MySQL FOREIGN KEY Constraint såsom dens syntaks, hvordan man tilføjer, erklærer, slipper og ændrer det med eksempler:
I meget enkle vendinger bruges UDENLANDSK KEY til at linke to eller flere tabeller i MySQL.
MySQL-tabeller skal forbindes for at kunne forespørge og opdatere forskellige typer data på forskellige tidspunkter. Derfor er det bydende nødvendigt at have et forbindelsespunkt mellem to tabeller.
I denne vejledning diskuterer vi forskellige anvendelser af udenlandske nøgler, og hvordan kan det erklæres og ændres, og hvilke begrænsninger det har for den overordnede tabelstruktur.
Hvad du lærer:
MySQL UDENLANDSK KEY
Syntaks:
CONSTRAINT {constraintName} FOREIGN KEY (referringColumnName) REFERENCES {referredTable}({referredColumn}) ON UPDATE {reference-option} ON DELETE {reference-option}
Ovenfor er syntaksen, der bruges ved angivelse af UDENLANDSK Nøgle mod en tabel under oprettelse af en tabel eller med ALTER TABLE-erklæring.
Lad os forstå de forskellige komponenter i syntaksen:
- constrantName: Dette er det symbolske navn, vi vil definere for den FK-begrænsning, der specificeres. Hvis dette springes over, tildeler MySQL-motoren automatisk et navn til FK-begrænsningen.
- referringColumnName: Dette er den kolonne, der refererer til værdierne i en anden tabel som specificeret af kolonnen i den henviste tabel.
- Henvist tabel / overordnet tabel: Dette refererer til navnet på den tabel, hvorfra værdierne vil blive henvist.
- Henvist kolonne: Kolonnenavnet i den henviste tabel.
- Reference mulighed: Dette er de handlinger, der kommer ind i billedet, når en opdatering eller sletning udføres på bordet, der indeholder den udenlandske nøglebegrænsning. Både UPDATE og DELETE kan have de samme eller forskellige referenceindstillinger.
Vi ville lære om forskellige referencemæssige integritetshandlinger senere i denne vejledning.
Lad os se et eksempel på en UDENLANDSK KEY-reference ved hjælp af eksemplet medarbejder / afdeling. Vi opretter en tabelafdeling med kolonner - departmentId (int & PRIMARY KEY) og departmentName (varchar).
CREATE TABLE department(departmentId INT PRIMARY KEY NOT NULL, departmentName VARCHAR(100));
Opret en tabel Medarbejder med kolonner som nedenfor:
Kolonne | Type |
---|---|
id | INT (primær nøgle) |
navn | VARCHAR |
dept_id | INT (fremmed nøgle) henvist fra afdelingstabellen |
adresse | VARCHAR |
alder | INT |
dob | DATO |
CREATE TABLE employee(id INT PRIMARY KEY NOT NULL, name VARCHAR(100), address VARCHAR(100), age INT, dob DATE, deptId INT, CONSTRAINT depIdFk FOREIGN KEY (deptId) REFERENCES department(departmentId) ON UPDATE CASCADE ON DELETE CASCADE);
Som du kan se, har vi i ovennævnte medarbejdertabel erklæret deptId-kolonne af typen Int og defineret UDENLANDSK KEY fra afdelingstabellen på kolonne departmentId.
Hvad dette i det væsentlige betyder, at kolonne deptId i tabellen Medarbejder kun kan indeholde værdier, der er i afdelingstabellen.
Lad os prøve at indsætte data i disse tabeller og se, hvordan UDENLANDSK KONSTRAINT fungerer.
- Opret først en post i afdelingstabellen, og tilføj en post i tabellen medarbejder, der henviser til id'et for den post, der blev føjet til afdelingstabellen.
INSERT INTO department VALUES (1, 'ENGINEERING') --------- INSERT INTO EMPLOYEE VALUES (1, 'AMIT KUMAR', 'MUMBAI', 32, '1988-02-12',1);
Du vil se, at begge udsagn bliver udført uden fejl.
- Henvis nu til en værdi for departmentId, som ikke findes.
For eksempel, i nedenstående forespørgselserklæring opretter vi en medarbejder med en ikke-eksisterende departmentId -10
INSERT INTO EMPLOYEE VALUES (1, 'DARREN JOHNSON', 'CHICAGO', 32, '1988-02-12',10);
- I dette scenarie får vi en fejl som nedenfor:
Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (`my_sql_foreign_key`.`employee`, CONSTRAINT `depIdFk` FOREIGN KEY (`deptId`) REFERENCES `department` (`departmentId`) ON DELETE CASCADE ON UPDATE CASCADE)
Så bredt, når UDENLANDSKE NØGLE-referencer er defineret, er det vigtigt at sikre, at den tabel, der henvises til, skal have data, før den henvises.
Henvisningsintegritetshandlinger
Lad os først prøve at forstå, hvad der egentlig er Referential Integrity.
Referential Integrity hjælper med at opretholde data i en ren og konsistent tilstand, hvor der er tabeller relateret til hinanden med et UDENLANDSK NØGLE-forhold.
Simpelthen angivet, refererer referentiel integritet til den handling, som vi forventer af databasemotoren, når en OPDATERING eller SLETNING sker i den refererede tabel, der indeholder UDENLANDSK KEY.
For eksempel, i vores eksempel på medarbejder / afdeling antager vi at ændre afdelings-id for en bestemt række i DB. Derefter vil alle referencerækker i medarbejdertabellen blive påvirket. Vi kan definere forskellige typer af referentiel integritetsscenarier, der kan anvendes i sådanne tilfælde.
Bemærk: Henvisningsintegritet defineres under opsætning / erklæring for UDENLANDSK KEY som en del af kommandoerne / sektionerne ON DELETE og ON UPDATE.
Se en prøveforespørgsel her (for eksemplet medarbejder / afdeling):
CREATE TABLE department(departmentId INT PRIMARY KEY NOT NULL, departmentName VARCHAR(100)); CREATE TABLE employee(id INT PRIMARY KEY NOT NULL, name VARCHAR(100), address VARCHAR(100), age INT, dob DATE, deptId INT, CONSTRAINT depIdFk FOREIGN KEY (deptId) REFERENCES department(departmentId) ON UPDATE {ref-integrity-action} ON DELETE {ref integrity action});
Indsæt nogle data i disse tabeller som nedenfor:
INSERT INTO department VALUES (1, 'ENGINEERING'), (2,'ACCOUNTING'), (3, 'MARKETING'), (4, 'HR'), (5, 'LEGAL'); INSERT INTO EMPLOYEE VALUES (1, 'AMIT KUMAR', 'MUMBAI', 32,'1988-02-12',1), (2, 'RYAN HILMAN', 'SEATTLE',43, '1977-03-15',1), (3, 'KAVITA SINGH', 'DELHI', 42, '1978-02-18',4), (4, 'DAVID BECKHAM', 'LONDON', 40, '1980-07-13',3), (5, 'PRITI KUMARI', 'DELHI', 35, '1985-12-11',2), (6, 'FRANK BALDING', 'NEW YORK', 35, '1985-08-25',5)
Der er 4 referencehandlinger, der understøttes af MySQL. Lad os prøve at forstå hver enkelt af dem.
# 1) CASCADE
Dette er en af de mest anvendte Referential Integrity Actions. Indstilling af DELETE og UPDATE til CASCADE vil anvende de ændringer, der er foretaget i den henviste tabel på referencetabellen, dvs. i eksemplet medarbejder / afdeling. Antag, at nogen sletter en række i afdelingstabellen, der skal sige department_name = ACCOUNTING, så slettes også alle rækker i medarbejdertabellen med department_id som i Accounting-tabellen.
Lad os forstå dette med et eksempel:
SELECT * FROM employee;
id | navn | adresse | alder | dob | deptId |
---|---|---|---|---|---|
1 | AMIT KUMAR | MUMBAI | 32 | 1988-02-12 | 1 |
to | RYAN HILMAN | SEATTLE | 43 | 1977-03-15 | 1 |
3 | KAVITA SINGH | DELHI | 42 | 1978-02-18 | 4 |
4 | DAVID BECKHAM | LONDON | 40 | 1980-07-13 | 3 |
5 | PRITI KUMARI | DELHI | 35 | 1985-12-11 | to |
6 | FRANK BALDING | NEW YORK | 35 | 1985-08-25 | 5 |
Slet post fra afdelingstabellen, hvor departmentName = 'ACCOUNTING'
DELETE from DEPARTMENT WHERE departmentName='ACCOUNTING';
Nu, da det er en CASCADE-henvisning, forventer vi, at alle rækkerne, der har departmentID = 2 (som er til 'ACCOUNTING' -afdelingen), også skal slettes. Lad os lave en SELECT-forespørgsel på tabellen Medarbejder igen.
SELECT * FROM employee;
id | navn | adresse | alder | dob | deptId |
---|---|---|---|---|---|
1 | AMIT KUMAR | MUMBAI | 32 | 1988-02-12 | 1 |
to | RYAN HILMAN | SEATTLE | 43 | 1977-03-15 | 1 |
3 | KAVITA SINGH | DELHI | 42 | 1978-02-18 | 4 |
4 | DAVID BECKHAM | LONDON | 40 | 1980-07-13 | 3 |
6 | FRANK BALDING | NEW YORK | 35 | 1985-08-25 | 5 |
Som du kan se ovenfor på grund af CASCADE-referenceintegritet, vil rækkerne i tabellen Medarbejder, der henviste til den slettede kolonne som UDENLANDSK KEY, have disse rækker slettet.
# 2) BEGRÆNSNING / INGEN HANDLING
RESTRICT- eller NO ACTION-tilstand tillader ingen UPDATE- eller SLET-handlinger på tabellen med kolonner, der refereres til UDENLANDSK KEY i en eller anden tabel.
NO ACTION-tilstanden kan anvendes ved blot at udelade ON UPDATE og ON DELETE-klausulerne fra tabelerklæringen.
testoversigtsskabelon i Excel
Lad os prøve det samme eksempel, og i dette tilfælde skal du blot springe over OP-OPDATERING og PÅ SLET Referentialintegritetshandling.
Når vi nu forsøger at slette en post i den refererede tabel, får vi en fejl, da vi har indstillet henvisningshandlingen til RESTRICT
DELETE FROM department WHERE departmentName='ACCOUNTING';
Du vil se en fejl, der ligner nedenfor, hvis du prøver at udføre ovenstående SLET-kommando.
Error Code: 1451. Cannot delete or update a parent row: a foreign key constraint fails (`my_sql_foreign_key`.`employee`, CONSTRAINT `depIdFk` FOREIGN KEY (`deptId`) REFERENCES `department` (`departmentId`))
# 3) INDSTILL NUL
Med SET NULL vil enhver UPDATE eller DELETE i den refererede tabel få en NULL-værdi til at blive opdateret i forhold til kolonneværdien, der er markeret som en UDENLANDSK KEY i referencetabellen.
Med denne refererende integritetshandling vil definitionen af medarbejdertabellen blive som nedenfor:
CREATE TABLE employee(id INT PRIMARY KEY NOT NULL, name VARCHAR(100), address VARCHAR(100), age INT, dob DATE, deptId INT, CONSTRAINT depIdFk FOREIGN KEY (deptId) REFERENCES department(departmentId) ON DELETE SET NULL);
Slet en række i den refererede tabel som vist nedenfor:
DELETE FROM department WHERE departmentName='ACCOUNTING';
I dette tilfælde vil den henviste værdi i tabellen Medarbejder nu blive sat til NULL. Foretag en SELECT-forespørgsel på tabellen Medarbejder for at se resultaterne.
SELECT * FROM employee;
id | navn | adresse | alder | dob | deptId |
---|---|---|---|---|---|
1 | AMIT KUMAR | MUMBAI | 32 | 1988-02-12 | 1 |
to | RYAN HILMAN | SEATTLE | 43 | 1977-03-15 | 1 |
3 | KAVITA SINGH | DELHI | 42 | 1978-02-18 | 4 |
4 | DAVID BECKHAM | LONDON | 40 | 1980-07-13 | 3 |
5 | PRITI KUMARI | DELHI | 35 | 1985-12-11 | NUL |
6 | FRANK BALDING | NEW YORK | 35 | 1985-08-25 | 5 |
# 4) INDSTILL STANDARD
SET DEFAULT-tilstand, når den er specificeret, vil resultere i at erstatte standardværdien for kolonnen (som angivet under kolonnedeklarationen), i tilfælde af eventuelle SLETTER i tabellen, der henvises til.
Bemærk - Som pr MySQL-dokumentation , indstillingen SET DEFAULT understøttes af MySQL Parser, men ikke DB-motorer som InnoDB. Dette understøttes muligvis i fremtiden.
For at understøtte en sådan adfærd kan du dog overveje at bruge SET NULL og definere en trigger på bordet, der kan indstille en standardværdi.
Tilføj UDENLANDSK Nøglebegrænsning ved hjælp af ALTER TABLE-erklæring
Mange gange kan det ske, at vi måske vil tilføje en UDENLANDSK KEY-begrænsning til en eksisterende tabel, der ikke har den.
Antag i eksemplet medarbejder og afdeling oprettede vi en medarbejdertabel uden nogen UDENLANDSK KEY-begrænsning, og senere vil vi introducere begrænsningen. Dette kan opnås ved hjælp af ALTER TABLE-kommandoen.
Lad os prøve at forstå dette med et eksempel.
Antag, at vi har en medarbejdertabel med nedenstående definition for CREATE-kommando.
CREATE TABLE employee(id INT PRIMARY KEY NOT NULL, name VARCHAR(100), address VARCHAR(100), age INT, dob DATE, deptId INT);
Her har vi en kolonneafvigelse, men ingen UDENLANDSK KEY-begrænsning. I dette tilfælde, selv uden at have en afdelingstabel, kan vi specificere eventuelle værdier, mens vi indsætter poster.
Lad os senere antage, at vi har en separat afdelingstabel, og vi vil linke afdelingId der som UDENLANDSK KEY til medarbejdertabellen.
ALTER TABLE employee ADD CONSTRAINT depIdFk FOREIGN KEY (deptId) REFERENCES department(departmentId) ON UPDATE CASCADE ON DELETE CASCADE;
Hvad hvis denne tabel har eksisterende data? Kan vi ALTER tabel og tilføje UDENLANDSK KEY-begrænsning?
Svaret er ja - vi kan med den betingelse, at de eksisterende værdier i kolonnen, der skal henvises til fra en anden tabel, skal have de værdier, der findes i selve modertabellen.
Opret en medarbejdertabel uden UDENLANDSK KEY-begrænsning, tilføj nogle data, og prøv at tilføje en UDENLANDSK KEY-begrænsning ved hjælp af ALTER-kommandoen.
CREATE TABLE employee(id INT PRIMARY KEY NOT NULL, name VARCHAR(100), address VARCHAR(100), age INT, dob DATE, deptId INT);
INSERT INTO EMPLOYEE VALUES (1, 'DARREN JOHNSON', 'CHICAGO', 32, '1988-02-12',1); INSERT INTO EMPLOYEE VALUES (2, 'ANITA SHERWIN', 'COLUMBIA', 32, '1988-02-12',10);
Opret en afdelingstabel og tilføj UDENLANDSK KEY mod feltet 'deptId' i tabellen Medarbejder som vist nedenfor:
CREATE TABLE department(departmentId INT PRIMARY KEY NOT NULL DEFAULT 1000, departmentName VARCHAR(100));
På dette tidspunkt, hvis vi prøver at tilføje UDENLANDSK KEY-begrænsning,
ALTER TABLE employee ADD CONSTRAINT depIdFk FOREIGN KEY (deptId) REFERENCES department(departmentId) ON UPDATE CASCADE ON DELETE CASCADE;
Derefter får vi en fejl, da medarbejdertabellen indeholder nogle data, men begrænsningen for henvisningsintegritet kan ikke overholdes, da afdelingstabellen endnu ikke har nogen data.
Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (`my_sql_foreign_key`.`#sql-63_87`, CONSTRAINT `depIdFk` FOREIGN KEY (`deptId`) REFERENCES `department` (`departmentId`) ON DELETE CASCADE ON UPDATE CASCADE)
For at have den UDENLANDSKE KEY-begrænsning skal vi først tilføje data til afdelingstabellen. Lad os indsætte de krævede poster i afdelingstabellen.
INSERT INTO department VALUES (1, 'ENGINEERING'),(10,'ACCOUNTING');
Tilføj den UDENLANDSKE KEY-begrænsning igen ved at udføre den samme ALTER TABLE-sætning. Du vil bemærke, at denne gang er kommandoen vellykket, og medarbejdertabellen er opdateret, så den er afskrevet som UDENLANDSK NØGEL fra afdelingstabellen.
Slipper en UDENLANDSK Nøglebegrænsning
På samme måde som at tilføje en UDENLANDSK KEY-begrænsning er det også muligt at droppe / slette en eksisterende UDENLANDSK KEY-begrænsning fra en tabel.
Dette kan opnås ved hjælp af ALTER TABLE-kommandoen.
Syntaks:
ALTER TABLE {childTable} DROP FOREIGN KEY {foreign key constraint name};
Her er 'childTable' navnet på den tabel, der har defineret UDENLANDSK KEY-begrænsning, mens 'fremmednøglens begrænsningsnavn' er navnet / symbolet, der blev brugt til at definere UDENLANDSK KEY.
Lad os se et eksempel ved hjælp af tabellen Medarbejder / afdeling. For at slippe en begrænsning med navnet 'depIdFk' fra medarbejdertabellen skal du bruge kommandoen nedenfor:
ALTER TABLE employee DROP FOREIGN KEY depIdFk;
Ofte stillede spørgsmål
Q # 1) Hvordan kan jeg ændre udenlandske nøgler i MySQL?
Svar: FOREGIN KEY kan tilføjes / fjernes ved hjælp af kommandoen ALTER TABLE.
For at ændre eller tilføje en ny UDENLANDSK KEY, kan du bruge ALTER-kommandoen og definere UDENLANDSK KEY og referencetabelkolonnen, som der henvises til fra underordnet tabel.
Q # 2) Hvordan indstilles flere udenlandske nøgler i MySQL?
Svar: En tabel i MySQL kan have flere UDENLANDSKE NØGLER, som kan afhænge af den samme overordnede tabel eller forskellige overordnede tabeller.
Lad os bruge tabellen Medarbejder / afdeling og tilføje UDENLANDSK KEY for afdelingens navn såvel som DepartmentId i tabellen Medarbejder.
Se CREATE-udsagnene for begge tabeller som nedenfor
CREATE TABLE department(departmentId INT PRIMARY KEY NOT NULL DEFAULT 1000, departmentName VARCHAR(100) UNIQUE NOT NULL); ----xxxxx------xxxxx------xxxxx-------xxxxx------xxxxx CREATE TABLE employee(id INT PRIMARY KEY NOT NULL, name VARCHAR(100), address VARCHAR(100), age INT, dob DATE, deptId INT, depName VARCHAR(100), CONSTRAINT depIdFk FOREIGN KEY (deptId) REFERENCES department(departmentId) ON UPDATE CASCADE ON DELETE CASCADE, CONSTRAINT depNameFk FOREIGN KEY (depName) REFERENCES department(departmentName) ON UPDATE CASCADE ON DELETE CASCADE);
Spørgsmål nr. 3) Hvordan deaktiveres udenlandske nøglebegrænsninger i MySQL?
Svar: UDENLANDSKE KEY-begrænsninger kræves normalt, når nogen prøver at afkorte en eksisterende tabel, der refereres til. For at gøre det kan du bruge nedenstående kommando:
SET FOREIGN_KEY_CHECKS=0;
Dette ville indstille en sessionsvariabel og midlertidigt deaktivere FOREIGN_KEY_CHECKS. Efter denne indstilling kan du gå videre og udføre sletninger / afkortning, hvilket ellers ikke ville være muligt.
Men vær venlig at sørge for, at dette er et administratorrettighed og skal bruges med omtanke.
Spørgsmål nr. 4) Hvordan finder jeg referencer til udenlandske nøgler til en tabel i MySQL?
Svar: For at liste alle de UDENLANDSKE KEY-begrænsninger, der er til stede, kan du bruge tabellen 'INNODB_FOREIGN_COLS' i 'INFORMATION_SCHEMA'.
Kør blot kommandoen nedenfor for at få alle UDENLANDSKE KEY-erklæringer, der findes for en given MySQL-serverinstans.
ID | FOR_COL_NAME | REF_COL_NAME | POS |
---|---|---|---|
my_sql_foreign_key / depIdFk | deptId | afdelingId | 1 |
Spørgsmål nr. 5) Bør den refererede kolonne som UDENLANDSK KEY være en primær nøgle i den refererede tabel?
Svar: Efter definition af UDENLANDSK KEY kræves det, at den kolonne, der henvises til som UDENLANDSK KEY, skal være den PRIMÆRE KEY fra tabellen, hvor den refereres til.
Men med de nyere versioner af MySQL og med InnoDB-databasemotoren kan du også henvise til en kolonne, der har UDENLANDSK KEY, der har en UNIK begrænsning og muligvis ikke nødvendigvis PRIMÆR KEY.
Q # 6) Opretter UDENLANDSK KEY INDEX i MySQL?
Svar: For både primær nøgle og unik begrænsning opretter MySQL automatisk en INDEX for sådanne kolonner.
Da vi allerede ved, at UDENLANDSKE KEY-referencer kun kan anvendes på begge kolonner, der er primære nøgler eller kolonner, der har unikke værdier, har alle kolonner, der henvises til UDENLANDSK KEY, derfor et indeks oprettet mod dem.
Brug nedenstående kommando for at se indekset på en tabel:
SHOW INDEX from {dbName.tableName};
Så for vores medarbejder / afdeling-eksempel havde vi tilføjet deptId i medarbejder som en UDENLANDSK NØGLE fra afdelingstabellen.
Lad os se de oprettede indekser i tabeller medarbejder og afdeling.
USE my_sql_foreign_key; SHOW INDEX from employee;
Bord | Ikke-unik | Nøglenavn | Seq_in_index | Kolonne_navn | Sortering | Kardinalitet | Underdel | Pakket | Nul | Indeks_type |
---|---|---|---|---|---|---|---|---|---|---|
medarbejder | 0 | PRIMÆR | 1 | id | TIL | 0 | NUL | NUL | BTREE | |
medarbejder | 1 | depIdFk | 1 | deptId | TIL | 0 | NUL | NUL | JA | BTREE |
Du kan se 2 indekser - en er den primære nøgle til medarbejdertabellen, og en anden er til UDENLANDSK KEY depId, som der henvises til i afdelingstabellen.
SHOW INDEX from department;
Bord | Ikke-unik | Nøglenavn | Seq_in_index | Kolonne_navn | Sortering | Kardinalitet | Underdel | Pakket | Nul | Indeks_type |
---|---|---|---|---|---|---|---|---|---|---|
afdeling | 0 | PRIMÆR | 1 | afdelingId | TIL | 0 | NUL | NUL | BTREE |
Her kan du se, at for afdelingstabellen har vi kun 1 indeks for primær nøgle (der refereres til som UDENLANDSK KEY i medarbejdertabellen).
Q # 7) Kan UDENLANDSK KEY være NULL i MySQL?
Svar: Ja, det er helt ok at have NULL til den kolonne, der har en UDENLANDSK KEY-afhængighed på et andet bord. Dette henviser også til det faktum, at NULL ikke er en reel værdi, hvorfor den ikke matches / sammenlignes med værdier i overordnet tabel.
Konklusion
I denne vejledning lærte vi om forskellige begreber relateret til brug af UDENLANDSKE TASTER i MySQL-databaser.
UDENLANDSK KEY letter opdateringer og sletninger med passende begrænsninger, men nogle gange har mange sådanne relationer måske gjort hele processen med indsættelse og / eller sletning ret besværlig.
Vi lærte, hvordan man opretter UDENLANDSKE NØGLER, og hvordan vi kan opdatere og slippe en eksisterende UDENLANDSK Nøgle fra underordnet bord. Vi lærte også om forskellige referencemæssige integritetshandlinger, og hvordan vi kan opnå forskellig adfærd ved hjælp af de forskellige tilgængelige muligheder som CASCADE, NO ACTION, SET NULL osv.
Anbefalet læsning
- MySQL Opret tabelvejledning med eksempler
- MySQL indsæt i tabel - Indsæt erklæringens syntaks og eksempler
- MySQL Opret visningsvejledning med kodeeksempler
- MySQL CONCAT og GROUP_CONCAT-funktioner med eksempler
- MySQL-transaktionsvejledning med programmeringseksempler
- MySQL UNION - Omfattende vejledning med EU-eksempler
- Sådan downloades MySQL til Windows og Mac
- Forskellen mellem SQL Vs MySQL Vs SQL Server (med eksempler)