basics mysql foreign key constraint with examples
Този урок обяснява основите на MySQL FOREIGN KEY Constraint, като синтаксиса му, как да го добавяте, декларирате, пускате и променяте с примери:
С много прости термини, ЧУЖДИЯТ КЛЮЧ се използва за свързване на две или повече таблици в MySQL.
Таблиците на MySQL трябва да бъдат свързани, за да се правят заявки и да се актуализират различни видове данни в различни моменти от време. Следователно е наложително да има точка на свързване между 2 таблици.
В този урок ще обсъдим различни употреби на чужди ключове и как могат да бъдат декларирани и променени и какви ограничения има върху общата структура на таблицата.
Какво ще научите:
ВЪНШЕН КЛЮЧ на MySQL
Синтаксис:
CONSTRAINT {constraintName} FOREIGN KEY (referringColumnName) REFERENCES {referredTable}({referredColumn}) ON UPDATE {reference-option} ON DELETE {reference-option}
По-горе е синтаксисът, използван при задаване на ВЪНШЕН КЛЮЧ спрямо таблица при създаване на таблица или с Оператор ALTER TABLE.
Нека разберем различните компоненти на синтаксиса:
- constrantName: Това е символното име, което искаме да дефинираме за посоченото ограничение FK. Ако това се пропусне, тогава двигателят MySQL автоматично присвоява име на ограничението FK.
- referringColumnName: Това е колоната, която ще препраща към стойностите в друга таблица, както е посочено от колоната в посочената таблица.
- Препоръчана таблица / родителска таблица: Това се отнася до името на таблицата, от която ще бъдат посочени стойностите.
- Препоръчана колона: Името на колоната в посочената таблица.
- Референтен вариант: Това са действията, които се появяват в картината, когато се извършва действие за актуализиране или изтриване на таблицата, която съдържа ограничението за външния ключ. И UPDATE, и DELETE могат да имат еднакви или различни референтни опции.
По-късно в този урок ще научим за различни действия за референтна цялост.
Нека да видим пример за справка за ЧУЖДЕСТРАНЕН КЛЮЧ, използвайки примера на служител / отдел. Ще създадем таблица Department с колони - departmentId (int & PRIMARY KEY) и departmentName (varchar).
CREATE TABLE department(departmentId INT PRIMARY KEY NOT NULL, departmentName VARCHAR(100));
Създайте таблица Служител с колони, както е показано по-долу:
Колона | Тип |
---|---|
документ за самоличност | INT (първичен ключ) |
име | ВАРЧАР |
dept_id | INT (външен ключ), посочен от таблицата на отдела |
адрес | ВАРЧАР |
възраст | INT |
доб | ДАТА |
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);
Както можете да видите, в горната таблица на служителите декларирахме колона deptId от тип Int и дефинирахме ЧУЖДЕСТРЕН КЛЮЧ от таблицата на отделите в колона departmentId.
Това по същество означава, че колоната deptId в таблицата на служителя може да съдържа само стойности, които са в таблицата на отдела.
Нека се опитаме да вмъкнем данни в тези таблици и да видим как работи ОНЛАЙН НА ВЪНШНИТЕ КЛЮЧОВЕ.
- Създайте първо запис в таблицата на отдела и добавете запис в таблицата на служителя, позовавайки се на идентификатора на записа, който е добавен към таблицата на отдела.
INSERT INTO department VALUES (1, 'ENGINEERING') --------- INSERT INTO EMPLOYEE VALUES (1, 'AMIT KUMAR', 'MUMBAI', 32, '1988-02-12',1);
Ще видите, че и двете изявления ще бъдат изпълнени без грешки.
- Сега направете справка със стойност за departmentId, която не съществува.
Например, в заявката за заявка по-долу създаваме служител с несъществуващ departmentId -10
INSERT INTO EMPLOYEE VALUES (1, 'DARREN JOHNSON', 'CHICAGO', 32, '1988-02-12',10);
- В този сценарий ще получим грешка като по-долу:
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)
Така че, като цяло, когато са дефинирани препратки към ВЪНШНИ КЛЮЧОВЕ, е важно да се гарантира, че таблицата, на която се прави препратка, трябва да има данни, преди да бъде препратена.
Референтни действия за почтеност
Нека първо се опитаме да разберем какво точно представлява референтната цялост.
Референтната цялост помага да се поддържат данните в чисто и последователно състояние, където има таблици, свързани помежду си с ВЪЗЛОЖЕНИЕ НА ЧУЖДИЯ КЛЮЧ.
Просто казано, Referencial Integrity се отнася до действието, което очакваме от механизма на базата данни да предприеме, когато се случи АКТУАЛИЗИРАНЕ или ИЗТРИВАНЕ в реферираната таблица, която съдържа ЧУЖДИЯ КЛЮЧ.
Например, в нашия пример за служител / отдел, да предположим, че променяме идентификатора на отдел за определен ред в DB. Тогава всички референтни редове в таблицата на служителя ще бъдат засегнати. Можем да дефинираме различни видове сценарии за референтна цялост, които могат да бъдат приложени по време на такива случаи.
Забележка: Референтната цялост се дефинира по време на настройката / декларирането на FOREIGN KEY като част от командите / секциите ON DELETE и ON UPDATE.
Вижте примерна заявка тук (за примера на служител / отдел):
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});
Поставете някои данни в тези таблици, както по-долу:
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)
Има 4 справочни действия, които се поддържат от MySQL. Нека се опитаме да разберем всеки един от тях.
обединяване сортиране c ++ рекурсивно
# 1) КАСКАДА
Това е едно от най-често използваните действия за референтна почтеност. Задаването на DELETE и UPDATE на CASCADE би приложило промените, направени към реферираната таблица в референтната таблица, т.е.в примера Служител / Отдел. Да предположим, че някой изтрива ред в таблицата на отдела, който трябва да каже отдел_име = СЧЕТОВОДСТВО, тогава всички редове в таблицата на служителите, които имат отдел_идентификационен като този на счетоводната таблица, също ще бъдат изтрити.
Нека разберем това с пример:
SELECT * FROM employee;
документ за самоличност | име | адрес | възраст | доб | deptId |
---|---|---|---|---|---|
1 | АМИТ КУМАР | МУМБАЙ | 32 | 1988-02-12 | 1 |
две | РАЙЪН ХИЛМАН | Сиатъл | 43 | 1977-03-15 | 1 |
3 | КАВИТА СИНГ | ДЕЛИ | 42 | 1978-02-18 | 4 |
4 | ДЕЙВИД БЕКХАМ | ЛОНДОН | 40 | 1980-07-13 | 3 |
5 | ПРИТИ КУМАРИ | ДЕЛИ | 35 | 1985-12-11 | две |
6 | ФРАНКОВО ПЛЕШЕНЕ | НЮ ЙОРК | 35 | 1985-08-25 | 5 |
Изтриване на запис от таблицата на отдела, където departmentName = „СЧЕТОВОДСТВО“
DELETE from DEPARTMENT WHERE departmentName='ACCOUNTING';
Сега, тъй като това е CASCADE референтно действие, бихме очаквали да бъдат изтрити и всички редове, които имат отдел ID = 2 (което е за отдел „СЧЕТОВОДСТВО“). Нека направим отново заявка SELECT на таблицата на служителя.
SELECT * FROM employee;
документ за самоличност | име | адрес | възраст | доб | deptId |
---|---|---|---|---|---|
1 | АМИТ КУМАР | МУМБАЙ | 32 | 1988-02-12 | 1 |
две | РАЙЪН ХИЛМАН | Сиатъл | 43 | 1977-03-15 | 1 |
3 | КАВИТА СИНГ | ДЕЛИ | 42 | 1978-02-18 | 4 |
4 | ДЕЙВИД БЕКХАМ | ЛОНДОН | 40 | 1980-07-13 | 3 |
6 | ФРАНКОВО ПЛЕШЕНЕ | НЮ ЙОРК | 35 | 1985-08-25 | 5 |
Както можете да видите по-горе, поради референтната цялост на CASCADE, редовете в таблицата на служителите, които се отнасят към изтритата колона като ЧУЖДЕСТРЕН КЛЮЧ, ще изтрият тези редове.
# 2) ОГРАНИЧЕНИЕ / БЕЗ ДЕЙСТВИЕ
Режимът RESTRICT или NO ACTION няма да разреши никакви операции по АКТУАЛИЗИРАНЕ или ИЗТРИВАНЕ в таблицата, имащи колони, които са посочени като ЧУЖДЕСТРЕН КЛЮЧ в някои таблици.
Режимът NO ACTION може да се приложи, като просто се пропуснат клаузите ON UPDATE и ON DELETE от декларацията на таблицата.
Нека опитаме същия пример и в този случай просто пропуснете действието ON UPDATE и ON DELETE Referencial integritet.
Сега, когато се опитваме да изтрием всеки запис в реферираната таблица, ще получим грешка, тъй като сме задали референтното действие на RESTRICT
DELETE FROM department WHERE departmentName='ACCOUNTING';
Ще видите грешка нещо като по-долу, ако се опитате да изпълните горната команда DELETE.
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) ЗАДАВАНЕ НА НУЛА
С SET NULL, всяко АКТУАЛИЗИРАНЕ или ИЗТРИВАНЕ в реферираната таблица би довело до актуализиране на стойност NULL спрямо стойността на колоната, която е маркирана като ЧУЖДЕСТРЕН КЛЮЧ в референтната таблица.
С това действие на референтна цялост, дефиницията на таблицата на служителя ще стане както по-долу:
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);
Изтрийте ред в посочената таблица, както е показано по-долу:
DELETE FROM department WHERE departmentName='ACCOUNTING';
Сега, в този случай, посочената стойност в таблицата на служителя ще бъде зададена на NULL. Направете SELECT заявка в таблицата на служителя, за да видите резултатите.
SELECT * FROM employee;
документ за самоличност | име | адрес | възраст | доб | deptId |
---|---|---|---|---|---|
1 | АМИТ КУМАР | МУМБАЙ | 32 | 1988-02-12 | 1 |
две | РАЙЪН ХИЛМАН | Сиатъл | 43 | 1977-03-15 | 1 |
3 | КАВИТА СИНГ | ДЕЛИ | 42 | 1978-02-18 | 4 |
4 | ДЕЙВИД БЕКХАМ | ЛОНДОН | 40 | 1980-07-13 | 3 |
5 | ПРИТИ КУМАРИ | ДЕЛИ | 35 | 1985-12-11 | НУЛА |
6 | ФРАНКОВО ПЛЕШЕНЕ | НЮ ЙОРК | 35 | 1985-08-25 | 5 |
# 4) ЗАДАВАНЕ ПО подразбиране
Режим SET DEFAULT, когато е посочен, би довел до заместване на стойността по подразбиране за колоната (както е посочено по време на декларацията на колоната), в случай на изтриване в таблицата, на която се прави препратка.
Забележка - Според Документация на MySQL , опцията SET DEFAULT се поддържа от MySQL Parser, но не и от DB двигатели като InnoDB. Това може да се поддържа в бъдеще.
За да поддържате подобно поведение обаче, можете да помислите да използвате SET NULL и да дефинирате задействане на таблицата, което може да зададе стойност по подразбиране.
Добавете ОГРАНИЧЕНИЕ НА ЧУЖДЕСТРАНЕН КЛЮЧ с помощта на изявлението ALTER TABLE
Много пъти може да се случи, че може да поискаме да добавим ограничение FOREIGN KEY към съществуваща таблица, която го няма.
Да предположим, че в примера на служител и отдел създадохме таблица на служител без ограничение FOREIGN KEY и по-късно искаме да въведем ограничението. Това може да се постигне с помощта на командата ALTER TABLE.
Нека се опитаме да разберем това с пример.
Да предположим, че имаме таблица на служител с дефиницията по-долу за команда CREATE.
CREATE TABLE employee(id INT PRIMARY KEY NOT NULL, name VARCHAR(100), address VARCHAR(100), age INT, dob DATE, deptId INT);
Тук имаме колона deptId, но няма ограничение FOREIGN KEY. В този случай, дори без да имаме таблица на отдел, можем да посочим всякакви стойности, докато вмъкваме записи.
Сега, да предположим, че имаме отделна таблица на отдел и ние искаме да свържем отдел ИД там като ЧУЖДЕСТРЕН КЛЮЧ към таблицата на служителите.
ALTER TABLE employee ADD CONSTRAINT depIdFk FOREIGN KEY (deptId) REFERENCES department(departmentId) ON UPDATE CASCADE ON DELETE CASCADE;
Ами ако тази таблица има съществуващи данни? Можем ли да ALTER таблица и да добавим ограничение FOREIGN KEY?
Отговорът е да - можем с условието, че съществуващите стойности в колоната, към които ще се прави препратка от друга таблица, трябва да имат тези стойности, съществуващи в самата родителска таблица.
Създайте таблица на служител без ограничение FOREIGN KEY, добавете някои данни и опитайте да добавите ограничение FOREIGN KEY с помощта на команда ALTER.
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);
Създайте таблица на отдел и добавете ВЪНШЕН КЛЮЧ срещу полето ‘deptId’ в таблицата на служителите, както е показано по-долу:
CREATE TABLE department(departmentId INT PRIMARY KEY NOT NULL DEFAULT 1000, departmentName VARCHAR(100));
В този момент, ако се опитаме да добавим ограничение FOREIGN KEY,
ALTER TABLE employee ADD CONSTRAINT depIdFk FOREIGN KEY (deptId) REFERENCES department(departmentId) ON UPDATE CASCADE ON DELETE CASCADE;
Тогава ще получим грешка, тъй като таблицата на служителя съдържа някои данни, но ограничението на референтната цялост не може да бъде изпълнено, тъй като таблицата на отдела все още няма данни.
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)
За да имаме ограничението FOREIGN KEY, първо ще трябва да добавим данни към таблицата на отдела. Нека вмъкнем необходимите записи в таблицата на отдела.
INSERT INTO department VALUES (1, 'ENGINEERING'),(10,'ACCOUNTING');
Добавете отново ограничението FOREIGN KEY, като изпълните същия оператор ALTER TABLE. Ще забележите, че този път командата е успешна и таблицата на служителя е актуализирана успешно, за да е deptId като FOREIGN KEY от таблицата на отделите.
Отпадане на ОГРАНИЧЕНИЕ ЗА ВЪНШЕН КЛЮЧ
Подобно на добавянето на ограничение FOREIGN KEY, също така е възможно да отпаднете / изтриете съществуващо ограничение FOREIGN KEY от таблица.
Това може да се постигне с помощта на командата ALTER TABLE.
Синтаксис:
ALTER TABLE {childTable} DROP FOREIGN KEY {foreign key constraint name};
Тук ‘childTable’ е името на таблицата, която има дефинирано ограничение FOREIGN KEY, докато ‘име на ограничение за външен ключ’ е името / символа, който е бил използван за дефиниране на FOREIGN KEY.
Нека да видим пример с помощта на таблицата Служител / Отдел. За да премахнете ограничение на име ‘depIdFk’ от таблицата на служителя, използвайте командата по-долу:
ALTER TABLE employee DROP FOREIGN KEY depIdFk;
често задавани въпроси
В # 1) Как мога да сменя чужди ключове в MySQL?
Отговор: FOREGIN KEY може да бъде добавен / премахнат с помощта на командата ALTER TABLE.
За да промените или добавите нов FOREIGN KEY, можете да използвате командата ALTER и да дефинирате FOREIGN KEY и референтна колона на таблица, към която ще се прави препратка от дъщерната таблица.
В # 2) Как да зададете множество чужди ключове в MySQL?
Отговор: Таблица в MySQL може да има множество ИНСТРУМЕНТНИ КЛЮЧОВЕ, които могат да зависят от една и съща родителска таблица или различни родителски таблици.
Нека използваме таблицата Служител / Отдел и добавете ВЪНШЕН КЛЮЧ за име на отдел, както и ИД на отдел в таблицата Служител.
Вижте операторите CREATE на двете таблици, както по-долу
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);
В # 3) Как да деактивирам ограниченията на външния ключ в MySQL?
Отговор: Ограниченията за ЧУЖДЕСТРАНЕН КЛЮЧ обикновено се изискват, когато някой се опитва да отсече съществуваща таблица, към която се прави препратка. За да направите това, можете да използвате командата по-долу:
SET FOREIGN_KEY_CHECKS=0;
Това би задало променлива на сесията и временно ще деактивира FOREIGN_KEY_CHECKS. След тази настройка можете да продължите и да извършите изтриване / отрязване, което иначе би било невъзможно.
Но моля, уверете се, че това е администраторска привилегия и трябва да се използва разумно.
В # 4) Как да намеря препратките за външен ключ за таблица в MySQL?
Отговор: За да изброите всички налични ограничения на FOREIGN KEY, можете да използвате таблицата „INNODB_FOREIGN_COLS“ в „INFORMATION_SCHEMA“.
Просто изпълнете командата по-долу, за да получите всички FOREIGN KEY декларации, съществуващи за даден екземпляр на MySQL сървър.
документ за самоличност | FOR_COL_NAME | REF_COL_NAME | POS |
---|---|---|---|
my_sql_foreign_key / depIdFk | deptId | отдел | 1 |
В # 5) Трябва ли референтната колона като ЧУЖДЕСТРАНЕН КЛЮЧ да бъде първичен ключ в реферираната таблица?
Отговор: По дефиниция на ВЪНШЕН КЛЮЧ, ще се изисква колоната, която е посочена като ЧУЖДЕСТРЕН КЛЮЧ, да бъде ОСНОВНИЯТ КЛЮЧ от таблицата, където е посочен.
Въпреки това, с по-новите версии на MySQL и с механизма за бази данни InnoDB, можете също да се позовете на колона с FOREIGN KEY, която има UNIQUE ограничение и може да не е задължително PRIMARY KEY.
В # 6) СТРАХОТЕН КЛЮЧ създава ли ИНДЕКС в MySQL?
Отговор: Както за първичен ключ, така и за уникално ограничение, MySQL автоматично създава ИНДЕКС за такива колони.
Тъй като вече знаем, че препратките FOREIGN KEY могат да се прилагат само към една колона, която е първичен ключ, или колони, които имат уникални стойности, следователно всички колони, които са посочени като FOREIGN KEY, имат създаден индекс срещу тях.
За да видите индекса на таблица, използвайте командата по-долу:
SHOW INDEX from {dbName.tableName};
Така че, за нашия пример за служител / отдел, бяхме добавили deptId в служител като ЧУЖДЕСТРЕН КЛЮЧ от таблицата на отдела.
Нека да видим създадените индекси в таблици за служители и отдели.
USE my_sql_foreign_key; SHOW INDEX from employee;
Таблица | Non_unique | Име на ключ | Seq_in_index | Име на колона | Събиране | Кардиналност | Подчаст | Опакован | Нула | Тип_индекс |
---|---|---|---|---|---|---|---|---|---|---|
служител | 0 | ОСНОВНИ | 1 | документ за самоличност | ДА СЕ | 0 | НУЛА | НУЛА | BTREE | |
служител | 1 | depIdFk | 1 | deptId | ДА СЕ | 0 | НУЛА | НУЛА | ДА | BTREE |
Можете да видите 2 индекса - единият е основният ключ за таблицата на служителите, а другият е за ВЪНШЕН КЛЮЧ, който е посочен от таблицата на отдела.
SHOW INDEX from department;
Таблица | Non_unique | Име на ключ | Seq_in_index | Име на колона | Събиране | Кардиналност | Подчаст | Опакован | Нула | Тип_индекс |
---|---|---|---|---|---|---|---|---|---|---|
отдел | 0 | ОСНОВНИ | 1 | отдел | ДА СЕ | 0 | НУЛА | НУЛА | BTREE |
Тук можете да видите, че за таблицата на отдела имаме само 1 индекс за първичен ключ (който е посочен като ЧУЖДЕСТРЕН КЛЮЧ в таблицата на служителите).
В # 7) Може ли ВЪНШНИЯТ КЛЮЧ да бъде НУЛ в MySQL?
Отговор: Да, напълно е добре да има NULL за колоната, която има ФУИН КЛЮЧ зависимост от друга таблица. Това също намеква за факта, че NULL не е реална стойност, поради което не е съпоставено / сравнено със стойности в родителската таблица.
Заключение
В този урок научихме за различни концепции, свързани с използването на ЧУЖДЕСТРАННИ КЛЮЧОВЕ в MySQL бази данни.
FOREIGN KEY облекчава актуализациите и изтрива с подходящи ограничения, но понякога наличието на много такива връзки може да направи целия процес на вмъкване и / или изтриване доста тромав.
Научихме как да създаваме ЧУЖДЕСТРАННИ КЛЮЧОВЕ и как можем да актуализираме и пуснем съществуващ ЧУЖЕСТВЕН КЛЮЧ от дъщерната таблица. Също така научихме за различни действия за референтна цялост и как можем да постигнем различно поведение, използвайки различните налични опции като КАСКАДА, БЕЗ ДЕЙСТВИЕ, ЗАДАВАНЕ НА НУЛА и др
Препоръчително четене
- MySQL Урок за създаване на таблици с примери
- MySQL Insert Into Table - Вмъкване на изявление Синтаксис и примери
- MySQL Урок за създаване на изглед с примери за кодове
- Функции на MySQL CONCAT и GROUP_CONCAT с примери
- Урок за транзакции на MySQL с примери за програмиране
- MySQL UNION - изчерпателен урок с примери за съюз
- Как да изтеглите MySQL за Windows и Mac
- Разлика между SQL Vs MySQL Vs SQL Server (с примери)