Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: внешние ключи
 
 автор: Dima1999   (20.08.2005 в 17:25)   письмо автору
 
 

И у меня еще один вопрос:

Скажите, как в MySQL задаются внешние ключи?
Я так понял, что PRIMARY KEY (smth) задает первичный ключ, а в скобках пишется имя ряда.
KEY - ? Объясните пожалуйста поподробней, что пишется в скобках, а что перед/после

Заранее извиняюсь за вопрос - просто не у кого спросить

   
 
 автор: Boss   (20.08.2005 в 22:02)   письмо автору
 
   для: Dima1999   (20.08.2005 в 17:25)
 

При создании таблицы можно указывать какой стольбец будет использоваться с первичным ключом.
Записи с таблице с первичным ключом уникальны, т.е. они никогда не повторяються.
а задаются они так(например числовой тип):

create table nametable
( id int not null auto_increment PRIMARY KEY);

Сдесь id имя столбца, int - указывает что записи в таблице буду челыми числами, not null - указывает что строки должны ОБЯЗАТЕЛЬНО имет значение, auti_increment - спец. функция мускула, котораяя автоматом генерирует значение значение уникального идентифкатора,значения будут на единицу больше того предыдущего числа(кстати ее мона применять только к числовым стольбцам) и PRIMARY KEY - указывает что столбец является первичным ключом таблицы, записи должны быть уникальны(т.е. не повторятся).
Вроде бы все =)).

   
 
 автор: Dima1999   (23.08.2005 в 22:41)   письмо автору
 
   для: Boss   (20.08.2005 в 22:02)
 

Странно, но у меня нельзя задать нескольким столбцам параметр auto_increment - пишет ошибку "There can be only one auto column and it must be defined as a key". " первичных ключа MySQL не берет. Что же делать, если мне нужно, чтобы сразу 2 поля имели такой параметр?

   
 
 автор: cheops   (24.08.2005 в 01:19)   письмо автору
 
   для: Dima1999   (23.08.2005 в 22:41)
 

К сожалению здесь практически ничего нельзя сделать... а для каких целей нужен второй столбец с атрибутом auto_increment - ведь если есть один столбец, значение второго можно вычислить исходя из значения первого.

   
 
 автор: Dima1999   (24.08.2005 в 21:33)   письмо автору
 
   для: cheops   (24.08.2005 в 01:19)
 

Прошу прщения, тут я не то решил сделать. Два столбца с auto_increment - это я загнул, спасибо за все ответы.

   
 
 автор: cheops   (20.08.2005 в 22:57)   письмо автору
 
   для: Dima1999   (20.08.2005 в 17:25)
 

Внешние ключи задаются при помощи ключевого слова FOREIGN KEY, который можно применять в конце таблицы, как и PRIMARY KEY. Внешние ключи работают только с типом таблиц InnoDB и не работают с остальными типами таблиц, например, MyISAM. Разница имеется - многие участники сообщают о десятикратной разницы в скоростях работы таблиц, в пользу MyISAM (именно этот тип используется по умолчанию везде).
mysql> CREATE TABLE catalogs (
    ->   id_catalog int(11) NOT NULL auto_increment,
    ->   name tinytext NOT NULL,
    ->   PRIMARY KEY (id_catalog)
    ->  ) ENGINE=InnoDB DEFAULT CHARSET=cp1251;
mysql> CREATE TABLE products (
    ->   id_product int(11) NOT NULL auto_increment,
    ->   name tinytext NOT NULL,
    ->   price decimal(7,2) default '0.00',
    ->   count int(11) default '0',
    ->   mark float(4,1) NOT NULL default '0.0',
    ->   description text,
    ->   id_catalog int(11) NOT NULL default '0',
    ->   PRIMARY KEY  (id_product),
    ->   FOREIGN KEY (id_catalog) REFERENCES catalogs (id_catalog)
    ->       ON DELETE CASCADE
    ->       ON UPDATE CASCADE
    -> ) ENGINE=InnoDB DEFAULT CHARSET=cp1251;

Или вас интересуют не внешние ключи, а обычные индексы, такие как в теме по ссылке http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=419?

PS Темы, посвящённые СУБД MySQL лучше сразу помещать в специальном разделе, посвящённым данной СУБД http://www.softtime.ru/forum/index.php?id_forum=3

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования