basics mysql foreign key constraint with examples
Овај водич објашњава основе МиСКЛ ОГРАНИЧЕЊА СТРАНИХ КЉУЧА, попут синтаксе, како га додати, декларисати, испустити и променити са примерима:
Једноставно речено, СТРАНИ КЉУЧ се користи за повезивање две или више табела у МиСКЛ-у.
МиСКЛ табеле морају да буду повезане како би се у различитим временским периодима тражили и ажурирали различити типови података. Стога је неопходно имати тачку повезивања између 2 табеле.
У овом упутству ћемо размотрити различите употребе страних кључева и како се они могу декларисати и променити и која ограничења има на укупну структуру табеле.
Шта ћете научити:
МиСКЛ СТРАНИ КЉУЧ
Синтакса:
CONSTRAINT {constraintName} FOREIGN KEY (referringColumnName) REFERENCES {referredTable}({referredColumn}) ON UPDATE {reference-option} ON DELETE {reference-option}
Изнад је синтакса која се користи приликом специфицирања СТРАНОГ КЉУЧА за табелу током креирања табеле или са Изјава АЛТЕР ТАБЛЕ.
Хајде да разумемо различите компоненте синтаксе:
- цонстрантНаме: Ово је симболично име које желимо да дефинишемо за наведено ограничење ФК. Ако се ово прескочи, тада МиСКЛ мотор аутоматски додељује име ограничењу ФК.
- реферрингЦолумнНаме: Ово је колона која би се односила на вредности у другој табели како је наведено у колони у наведеној табели.
- Препоручена табела / надређена табела: Ово се односи на назив табеле из које би се вредности упућивале.
- Препоручена колона: Назив колоне у наведеној табели.
- Референтна опција: То су радње које се појаве на слици када се изврши акција ажурирања или брисања на табели која садржи ограничење страног кључа. И УПДАТЕ и ДЕЛЕТЕ могу имати исте или различите референтне опције.
О различитим радњама референтног интегритета сазнаћемо касније у овом водичу.
Погледајмо пример референце за СТРАНИ КЉУЧ користећи пример запосленог / одељења. Направићемо табелу Одељење са колонама - департментИд (инт & ПРИМАРИ КЕИ) и департментНаме (варцхар).
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 CASCADE ON DELETE CASCADE);
Као што видите, у горњој табели запослених, декларисали смо ступце типа Инт и дефинисали СТРАНИ КЉУЧ из табеле одељења на колони департментИд.
Шта ово у суштини значи да ступац дептИд у табели Емплоиее може садржати само вредности које се налазе у табели Департмент.
Покушајмо да убацимо податке у ове табеле и видимо како функционише СТРАНО КЉУЧНО ОГРАНИЧЕЊЕ.
- Прво направите запис у табели одељења и додајте запис у табелу запосленика који се односи на ИД записа који је додан у табелу одељења.
INSERT INTO department VALUES (1, 'ENGINEERING') --------- INSERT INTO EMPLOYEE VALUES (1, 'AMIT KUMAR', 'MUMBAI', 32, '1988-02-12',1);
Видећете да би се обе изјаве извршиле без грешака.
- Сада референцирајте вредност за департментИд која не постоји.
На пример, у доњој изјави упита креирамо запосленог са непостојећим департментИд -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)
Дакле, у ширем смислу, када се дефинишу референце СТРАНИХ КЉУЧА, важно је осигурати да табела на коју се упућује треба да има податке пре него што се упути.
Референтне акције интегритета
Покушајмо прво да схватимо шта је заправо референцијални интегритет.
Референцијални интегритет помаже у одржавању података у чистом и доследном стању где постоје табеле повезане међусобно са односом СТРАНИ КЉУЧ.
стварање низа објеката у јави
Једноставно речено, Референцијални интегритет односи се на радњу коју очекујемо од механизма базе података да се догоди када се у референцираној табели која садржи СТРАНИ КЉУЧ догоди УПДАТЕ или ДЕЛЕТЕ.
На пример, у нашем примеру запосленог / одељења, претпоставимо да променимо ИД одељења за одређени ред у ДБ-у. Тада би то утицало на све референтне редове у табели Емплоиее. Можемо дефинисати различите врсте сценарија референтног интегритета који би се могли применити током таквих случајева.
Белешка: Референцијални интегритет се дефинише током подешавања / декларације СТРАНОГ КЉУЧА као део наредби / одељака ОН ДЕЛЕТЕ и ОН УПДАТЕ.
Погледајте пример упита овде (за пример запосленог / одељења):
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 референтне акције које подржава МиСКЛ. Покушајмо да разумемо сваког од њих.
# 1) КАСКАДА
Ово је једна од најчешће коришћених референтних акција интегритета. Постављањем ДЕЛЕТЕ и УПДАТЕ на ЦАСЦАДЕ примениће се промене извршене на референцирану табелу на референтној табели, тј. У примеру запосленог / одељења. Претпоставимо да неко избрише ред у табели одељења, па мора да каже име_ одељења = РАЧУНОВАЊЕ, тада ће се избрисати и сви редови у табели запослених који имају одељење_ид као у табели рачуноводства.
Да разумемо ово на примеру:
SELECT * FROM employee;
ид | име | адреса | старост | доб | дептИд |
---|---|---|---|---|---|
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 |
Избришите запис из табеле одељења где је департментНаме = 'РАЧУНОВОДСТВО'
DELETE from DEPARTMENT WHERE departmentName='ACCOUNTING';
Сада, будући да се ради о ЦАСЦАДЕ референтној акцији, очекивали бисмо да би требало избрисати и све редове који имају департментИД = 2 (што је за одељење „РАЧУНОВОДСТВО“). Поново направимо СЕЛЕЦТ упит на табели Емплоиее.
SELECT * FROM employee;
ид | име | адреса | старост | доб | дептИд |
---|---|---|---|---|---|
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 |
Као што видите горе, због ЦАСЦАДЕ референтног интегритета, редови у табели Емплоиее који су брисану колону означавали као СТРАНИ КЉУЧ, избрисаће те редове.
# 2) ОГРАНИЧЕЊЕ / БЕЗ АКЦИЈЕ
Режим РЕСТРИЦТ или НО АЦТИОН неће дозволити ниједну УПДАТЕ или ДЕЛЕТЕ операцију на табели која има колоне које се у некој табели наводе као СТРАНИ КЉУЧ.
Режим НО АЦТИОН се може применити једноставним изостављањем клаузула ОН УПДАТЕ и ОН ДЕЛЕТЕ из декларације табеле.
Покушајмо са истим примером и у овом случају једноставно прескочите акцију ОН УПДАТЕ и ОН ДЕЛЕТЕ Референцијални интегритет.
Сада када покушамо да избришемо било који унос у референцираној табели, добили бисмо грешку јер смо референцијалну акцију поставили на РЕСТРИЦТ
DELETE FROM department WHERE departmentName='ACCOUNTING';
Видећете грешку сличну доњој ако покушате да извршите горњу наредбу ДЕЛЕТЕ.
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) СЕТ НУЛЛ
Са СЕТ НУЛЛ, било какво УПДАТЕ или ДЕЛЕТЕ у референцираној табели би проузроковало ажурирање вредности НУЛЛ у односу на вредност колоне која је у референци табели означена као СТРАНИ КЉУЧ.
Овом референцијалном акцијом интегритета дефиниција табеле Емплоиее постала би следећа:
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';
Сада би у овом случају референцирана вредност у табели Емплоиее била постављена на НУЛЛ. Направите СЕЛЕЦТ упит на табели Емплоиее да бисте видели резултате.
SELECT * FROM employee;
ид | име | адреса | старост | доб | дептИд |
---|---|---|---|---|---|
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) ПОСТАВИ ЗАДАТАК
СЕТ ДЕФАУЛТ режим када је наведен резултирао би заменом подразумеване вредности за ступац (како је наведено током декларације колоне), у случају било ког ДЕЛЕТЕС у табели на коју се позива.
Белешка - По МиСКЛ документација , опцију СЕТ ДЕФАУЛТ подржава МиСКЛ Парсер, али не и ДБ мотори попут ИнноДБ. Ово би могло бити подржано у будућности.
Међутим, да бисте подржали такво понашање, можете размотрити употребу СЕТ НУЛЛ и дефинисати окидач на табели који би могао поставити подразумевану вредност.
Додајте ОГРАНИЧЕЊЕ СТРАНОГ КЉУЧА помоћу изјаве АЛТЕР ТАБЛЕ
Много пута се може догодити да бисмо можда желели да додамо ограничење ФОРЕИГН КЕИ постојећој табели која га нема.
Претпоставимо да смо у примеру запосленог и одељења креирали табелу запослених без икаквог ограничења за СТРАНИ КЉУЧ и касније желимо да уведемо ограничење. То се може постићи помоћу команде АЛТЕР ТАБЛЕ.
Покушајмо ово да разумемо на примеру.
Претпоставимо да имамо табелу Емплоиее са доњом дефиницијом за наредбу ЦРЕАТЕ.
CREATE TABLE employee(id INT PRIMARY KEY NOT NULL, name VARCHAR(100), address VARCHAR(100), age INT, dob DATE, deptId INT);
Овде имамо колону дубоку, али нема ограничења за СТРАНИ КЉУЧ. У овом случају, чак и без табеле Одељења, можемо да одредимо било које вредности приликом уметања записа.
Сада, претпоставимо касније да имамо одвојену табелу одељења и да желимо да је тамо повежемо као СТРАНИ КЉУЧ са табелом запослених.
ALTER TABLE employee ADD CONSTRAINT depIdFk FOREIGN KEY (deptId) REFERENCES department(departmentId) ON UPDATE CASCADE ON DELETE CASCADE;
Шта ако ова табела има постојеће податке? Можемо ли АЛТЕР таблицу и додати ограничење ФОРЕИГН КЕИ?
Одговор је да - можемо под условом да постојеће вредности у колони на које се упућује из друге табеле треба да имају оне вредности које постоје у самој надређеној табели.
Направите табелу запосленика без ограничења ФОРЕИГН КЕИ, додајте неке податке и покушајте додати ограничење ФОРЕИГН КЕИ помоћу наредбе АЛТЕР.
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);
Направите табелу одељења и додајте СТРАНИ КЉУЧ у поље ‘дептИд’ у табели запослених као што је приказано доле:
CREATE TABLE department(departmentId INT PRIMARY KEY NOT NULL DEFAULT 1000, departmentName VARCHAR(100));
У овом тренутку, ако покушамо да додамо ограничење ФОРЕИГН КЕИ,
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)
Да бисмо имали ограничење ФОРЕИГН КЕИ, прво ћемо морати да додамо податке у табелу одељења. Убацимо потребне записе у табелу Одељења.
INSERT INTO department VALUES (1, 'ENGINEERING'),(10,'ACCOUNTING');
Поново додајте ограничење ФОРЕИГН КЕИ извршавањем истог израза АЛТЕР ТАБЛЕ. Приметићете да је овог пута наредба успешна и табела Емплоиее је успешно ажурирана тако да се из табеле одељења дефинише као СТРАНИ КЉУЧ.
Испуштање ОГРАНИЧЕЊА СТРАНОГ КЉУЧА
Слично додавању ограничења ФОРЕИГН КЕИ, такође је могуће испустити / избрисати постојеће ограничење ФОРЕИГН КЕИ из табеле.
То се може постићи помоћу команде АЛТЕР ТАБЛЕ.
Синтакса:
ALTER TABLE {childTable} DROP FOREIGN KEY {foreign key constraint name};
Овде је „цхилдТабле“ назив табеле која има дефинисано ограничење ФОРЕИГН КЕИ, док је „име ограничења страног кључа“ име / симбол који је коришћен за дефинисање ФОРЕИГН КЕИ.
Погледајмо пример помоћу табеле Запослени / Одељење. Да бисте избацили ограничење под називом ‘депИдФк’ из табеле Емплоиее, користите наредбу у наставку:
ALTER TABLE employee DROP FOREIGN KEY depIdFk;
Често постављана питања
П # 1) Како могу да променим стране кључеве у МиСКЛ?
Одговор: ФОРЕГИН КЕИ се може додати / уклонити помоћу команде АЛТЕР ТАБЛЕ.
Да бисте променили или додали нови ФОРЕИГН КЕИ, можете користити наредбу АЛТЕР и дефинирати ФОРЕИГН КЕИ и ступац таблице референцирања на који би се упућивало из подређене табеле.
П # 2) Како поставити више страних кључева у МиСКЛ?
Одговор: Табела у МиСКЛ-у може имати више СТРАНИХ КЉУЧОВА, што може зависити од исте родитељске табеле или различитих надређених табела.
Користимо табелу Запослени / Одељење и додајте СТРАНИ КЉУЧ за назив Одељења као и ОдељењеИд у табелу Запослени.
Погледајте наредбе ЦРЕАТЕ из обе табеле на следећи начин
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) Како онемогућити ограничења страног кључа у МиСКЛ-у?
Одговор: ОГРАНИЧЕЊА СТРАНИХ КЉУЧА обично су потребна када неко покушава да скрати постојећу табелу на коју се упућује. Да бисте то урадили, можете користити наредбу испод:
SET FOREIGN_KEY_CHECKS=0;
Ово би поставило променљиву сесије и привремено онемогућило ФОРЕИГН_КЕИ_ЦХЕЦКС. Након ове поставке, можете наставити и извршити брисање / скраћивање, што иначе не би било могуће.
Али, уверите се да је ово администраторска привилегија и да је треба користити разумно.
П # 4) Како да пронађем референце страног кључа за табелу у МиСКЛ-у?
Одговор: Да бисте пописали сва присутна ограничења ФОРЕИГН КЕИ, можете да користите табелу „ИННОДБ_ФОРЕИГН_ЦОЛС“ у „ИНФОРМАТИОН_СЦХЕМА“.
Једноставно покрените доњу наредбу да бисте добили све ФОРЕИГН КЕИ декларације које постоје за дату инстанцу МиСКЛ сервера.
ИД | ФОР_ЦОЛ_НАМЕ | РЕФ_ЦОЛ_НАМЕ | ПОС |
---|---|---|---|
ми_скл_фореигн_кеи / депИдФк | дептИд | одељењеИд | 1 |
П # 5) Да ли би наведена колона као СТРАНИ КЉУЧ требало да буде примарни кључ у референцираној табели?
Одговор: По дефиницији СТРАНОГ КЉУЧА, било би потребно да колона која се наводи као СТРАНИ КЉУЧ буде ПРИМАРНИ КЉУЧ из табеле у којој се на њу упућује.
Међутим, са новијим верзијама МиСКЛ-а и са ИнноДБ машином базе података, могли бисте да упутите и колону која има ФОРЕИГН КЕИ која има УНИКУЕ ограничење и можда није нужно ПРИМАРНИ КЉУЧ.
П # 6) Да ли ФОРЕИГН КЕИ прави ИНДЕКС у МиСКЛ-у?
Одговор: И за примарни кључ и за јединствено ограничење, МиСКЛ аутоматски креира ИНДЕКС за такве колоне.
Будући да већ знамо да се референце ФОРЕИГН КЕИ могу применити само на било који ступац који су Примарни кључеви или ступце који имају Јединствене вредности, стога сви ступци који се називају ФОРЕИГН КЕИ имају индекс креиран према њима.
Да бисте прегледали индекс на табели, користите наредбу у наставку:
SHOW INDEX from {dbName.tableName};
Дакле, за пример запосленог / одељења додали смо дептИд ин Емплоиее као СТРАНИ КЉУЧ из табеле одељења.
Погледајмо креиране индексе у табелама запослених и одељења.
USE my_sql_foreign_key; SHOW INDEX from employee;
Сто | Нон_уникуе | Кеи_наме | Сек_ин_индек | Име_колоне | Цоллатион | Кардиналност | Суб_парт | Спаковано | Нула | Индек_типе |
---|---|---|---|---|---|---|---|---|---|---|
запослени | 0 | ПРИМАРНА | 1 | ид | ДО | 0 | НУЛА | НУЛА | БТРЕЕ | |
запослени | 1 | депИдФк | 1 | дептИд | ДО | 0 | НУЛА | НУЛА | ДА | БТРЕЕ |
Можете да видите 2 индекса - један је примарни кључ за табелу запослених, а други је за СТРАНИ КЉУЧ, који је наведен из табеле одељења.
SHOW INDEX from department;
Сто | Нон_уникуе | Кеи_наме | Сек_ин_индек | Име_колоне | Цоллатион | Кардиналност | Суб_парт | Спаковано | Нула | Индек_типе |
---|---|---|---|---|---|---|---|---|---|---|
одељење | 0 | ПРИМАРНА | 1 | одељењеИд | ДО | 0 | НУЛА | НУЛА | БТРЕЕ |
Овде можете видети да за табелу одељења имамо само 1 индекс за примарни кључ (који се у табели запослених назива СТРАНИ КЉУЧ).
П # 7) Може ли СТРАНИ КЉУЧ НУЛЛ у МиСКЛ-у?
Одговор: Да, сасвим је у реду имати НУЛЛ за колону која има СТРАНИ КЉУЧ зависност од друге табеле. Ово такође алудира на чињеницу да НУЛЛ није стварна вредност, стога се не поклапа / упоређује са вредностима у надређеној табели.
Закључак
У овом упутству смо сазнали о различитим концептима повезаним са употребом СТРАНИХ КЉУЧЕВА у МиСКЛ базама података.
СТРАНИ КЉУЧ олакшава ажурирања и брише уз одговарајућа ограничења, али понекад пуно таквих односа може учинити читав процес уметања и / или брисања прилично гломазним.
Научили смо како да креирамо СТРАНЕ КЉУЧЕВЕ и како можемо да ажурирамо и испустимо постојећи СТРАНИ КЉУЧ из подређене табеле. Такође смо научили о различитим радњама референтног интегритета и како можемо постићи различито понашање користећи различите доступне опције као што су КАСКАДА, БЕЗ АКЦИЈЕ, ПОСТАВЉАЊЕ НУЛЕ итд.
Препоручено читање
- МиСКЛ Водич за креирање табела са примерима
- МиСКЛ Убаци у табелу - Убаци синтаксу и примере изјаве
- МиСКЛ Водич за креирање погледа са примерима кода
- Функције МиСКЛ ЦОНЦАТ и ГРОУП_ЦОНЦАТ са примерима
- МиСКЛ водич за трансакције са примерима програмирања
- МиСКЛ УНИОН - свеобухватан водич са примерима синдиката
- Како преузети МиСКЛ за Виндовс и Мац
- Разлика између СКЛ Вс МиСКЛ Вс СКЛ Сервер (са примерима)