Не сте регистриран! Регистрирайте се БЕЗПЛАТНО, за да използвате услугите на сайта!

   Рубрики
 
 
 
 

 Форуми
» SEO и оптимизация
» Всичко за PHP и Perl
» Всичко за C, C++ и .NET
» Всичко за Java и JSP
» Всичко за SQL и MySQL
» Всичко за XHTML и CSS
» Презентация на сайтове
 Използване на Foreign Keys в MySQL
  1. Използване на Foreign Keys в MySQL
Mutatos
     
Автор  Mutatos (15.01.2006 15:28)  съобщение до автора
Погледнат  6718 пъти  добави към любими
Оценка  добави коментар
Гласове  5  изпрати на приятел
Коментари  (0)  абонирай се за MySQL
    Страница 1 / 1

 



В този урок ще се спрем на използването на Foreign Keys с MySQL. Благодарение на тях имате възможност да запазите консистентна информацията във вашата база за данни, без да трябва да пишете екстра скриптове, които да се грижат за това. Какво точно правят тези Foreign Keys, ще разгледаме по-долу, чрез няколко примера.


На всички ни е ясно, че за да имаме успех при създаването на една добра система е необходимо добро структуриране на информацията в базата ни за данни. В този урок няма да се спираме подробно в разпределението на информацията в различни таблици, а как се прави връзка между тях.

Като пример ще разгледаме две таблици user и user_data. В едната таблица ще запаметяваме ID-то на потребителя, потребителското име и неговата парола. Във втората таблица ще запаметява всякаква информация свързана с този потребител. Хубаво е информацията на един потребител да е разделена в две таблици, тъй като първата таблица ще е много по-често използвана от втората и затова е хубаво да не е толкова обемиста. Казвам по-често използвана, защото към нея ще се правят винаги запитвания, за да се провери, дали потребителските данни на един потребител са верни. Но това няма значение! Все пак взимам тези две таблици за да покажа на кратко използването на Foreign Keys.


Ето и структурата на първата таблица:

CODE
1
2
3
4
5
6
7
CREATE TABLE `user` (
 
`user_id` mediumint(8) unsigned NOT NULL auto_increment,
 
`username` varchar(15) NOT NULL default '',
 
`password` varchar(15) NOT NULL default '',
 
PRIMARY KEY  (`user_id`),
 
UNIQUE KEY `username` (`username`,`password`)
)
ENGINE=InnoDB DEFAULT CHARSET=utf8;


Тук няма нищо особенно, освен като съвет от мен: Полетата, които ще служат като ключове за други таблици, им слагайте имена свързани с таблицата от която произлизат. Тук в нашия случай това поле е user_id.


Ето и структурата на втората таблица:

CODE
1
2
3
4
5
6
7
8
9
10
CREATE TABLE `user_data` (
 
`user_id` mediumint(8) unsigned NOT NULL default '0',
 
`name` varchar(200) NOT NULL default '',
 
`address` varchar(255) NOT NULL default '',
 
`telefon` varchar(100) NOT NULL default '',
 
`fax` varchar(100) NOT NULL default '',
 
`gsm` varchar(100) NOT NULL default '',
 
`email` varchar(100) NOT NULL default '',
 
UNIQUE KEY `user_id` (`user_id`)
)
ENGINE=InnoDB DEFAULT CHARSET=utf8;

Особенното в двете таблици е това, че и двете са от тип InnoDB. Това е едно от най-важните предпоставки за използването на Foreign Keys в MySQL. Друг тип освен този не поддържа тази екстра!


До тук обаче не сме направили нищо, което не може да направим и с други типове таблици. За да свържем двете таблици в релация, трябва да направим следната манипулация на структурата на втората:

CODE
1
2
ALTER TABLE `user_data`
 
ADD CONSTRAINT `user_data_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`user_id`) ON DELETE CASCADE;

Тук оказваме, че при изтриване на даден ред от първата таблица, то автоматично да бъде изтрит ред от втората таблица свързан с ID-то от първата! Освен ON DELETE може да използвате и след версия 4.0.7 ON UPDATE, което също може да ви свърше прекрасна работа!

Едно нещо е много важно и то: За да може да въведете ред във втората таблица, то задължително трябва да има вече ред в първата таблица със съответно ID. В противен случай ще получите следната грешка от MySQL:

#1216 - Cannot add or update a child row: a foreign key constraint fails

Надявам се да съм ви бил полезен! Приятно програмиране!



   


Ключови думи: MySQL таблица заявка SQL програмиране запитване код index индекс Foreign Key InnoDB MyISAM REFERENCES CASCADE база данни


Още уроци от тази рубрика


 
  • Подобни теми от myLinks
 

 За автора: Mutatos  
Николай Николов се занимава с програмиране на PHP/MySQL повече от 6 години. Заедно с разработката на уеб приложения на PHP, се занимава с Java, XML и Webservices.
   
 1 посетител чете този урок (0 потребители и 1 гост)  
Активни потребители: ---
   
  

Еmail  
 

 

 
  • Интересно от Софтуер
 



IT-PLACE.NET © 2004 - 2008