ключи мускула

Safary

Новичок
ключи мускула

Сразу хочу извиниться за такую тему, но...
Если честно задолбался, пол дня пытаюсь разобраться для чего все эти ключи нужны в MySQL.
Везде ищу, нигде не написано для чего они нужны.
Единственное что нашел - внешний ключ нужен для организации связей таблицы...
А хотелось бы знать и для чего индекс нужен и уникальное(это я понимаю, для того чтоб база знала, какой ключ уникален, но какая разница базе, если я своим скриптом запрашиваю данные например из ID, я то знаю что он уникален...), для чего полный текст, полное описание о внешнем ключе и т.д.

Плиз, дайте ссылку, где всё подробно и понятно описано, я очень много пересмотрел всего и перечитал, но нигде не нашел для чего эти ключи нужны, только синтаксис нашел и всё подобное...

Серьёзно. Может кому-то дурацкой моя проблема покажется, но я действительно хочу разобраться, а инфы достойной не нашел за пол дня даже...

-~{}~ 26.03.09 02:02:

и кстати, как вы поняли для чего ключи нужны? Ну вы ж когда-то этого тоже не знали. Где информацию взяли? Че-то в учебниках вообще не вижу, где бы обьяснялось...

-~{}~ 26.03.09 03:25:

что, никто не поможет?
Даже пытаюсь создать ключ, но не получается...
FOREIGN KEY (pid) REFERENCES sections (id) ON DELETE CASCADE
на синтаксис ругается, кстати синтаксис нашел в интернете...

-~{}~ 26.03.09 03:48:

Блин, замучался полностью. Ну подскажите.
Сейчас после огромной кучи экспериментов получилось создать...
PHP:
CREATE TABLE `ttt` (
`id` INT( 10 ) NOT NULL ,
`pid` INT( 10 ) NOT NULL ,
`name` VARCHAR( 255 ) NOT NULL ,
PRIMARY KEY ( `id` ) ,
FOREIGN KEY (pid) REFERENCES sections (id) ON UPDATE CASCADE
);
Вот так... Но когда изменяю ID, то не меняется ничего в ребенке, который имеет такой-же PID.
Почему?? Блин, документации нигде нет нормальной по SQL ещё... Ужас просто

-~{}~ 26.03.09 03:49:

только ругается пхп не по делу часто =( че-то я не понимаю всётаки...
 

AmdY

Пью пиво
Команда форума
любая запись в таблице - это просто набор данных, индекс - ато адрес этих данных, индексом может быть как реальный столбец(номер телефона), так и сурогатный (обычно id), главное чтобы он был уникальным, причём данные в индексах упорядочены в зависимости от типа, поэтому лучше чтобы ключи были целыми числами. индекс может состоять из нескольких столбцов, при выборке в mysql важно, чтобы порядок следования этих полей в условиях(where) совпадала с тем, что в индексе. внешние ключи помогают связать записи при этом указывается что с этими данными должно происходить при изменении в связаной таблице. вот в твоём запросе говорится, что при удалении записи в таблице sections нужно удалять записи в связанной таблице, где pid = section.id. переведи ошибку и посмотри, какие у тебя pid
 

Safary

Новичок
так у меня же, не удаление, а изменение, я изменял ID, но PID не изменялся...
А индексом и Уникальным и Первичным может быть столбец? По идее ID - уникальный, первичный... А вот насчет индекса не очень понял. К примеру запись в таблице:
id - 7, pid - 2, link - /programs/photoshop/, name - photoshop

link - это индекс же?
 

AmdY

Пью пиво
Команда форума
ах, да, обычный индекс может быть не уникальным.

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

Духовность™

Продвинутый новичок
и кстати, как вы поняли для чего ключи нужны?
когда у меня запросы к базе выполнялись 1 секунду :D

Где информацию взяли?
я спросил про тормоза базы и меня ткнули в СЮДА - тут всё написано:
Индексы применяются для быстрого поиска строк с указанным значением одного столбца. Без индекса чтение таблицы осуществляется по всей таблице начиная с первой записи, пока не будут найдены соответствующие строки. Чем больше таблица, тем больше накладные расходы. Если же таблица содержит индекс по рассматриваемым столбцам, то MySQL может быстро определить позицию для поиска в середине файла данных без просмотра всех данных. Для таблицы, содержащей 1000 строк, это будет как минимум в 100 раз быстрее по сравнению с последовательным перебором всех записей.
когда до тебя дойдет, до чего нужны индексы, тогда бери свои таблицы, назначай индексы и тестируй свои запросы с помощью EXPLAIN
 

Фанат

oncle terrible
Команда форума
кстати, кто тот хороший человек, который рассказал ребенку про внешние ключи?
 

Фанат

oncle terrible
Команда форума
Safary
зачем тебе внешний ключ, если ты с обычными не разобрался?
 

findnext

Новичок
и кстати, как вы поняли для чего ключи нужны?
http://db.grussell.org/

-~{}~ 26.03.09 14:35:

мануал по MYSQL даёт только описание команд, поэтому точного объяснения в мануале не найдёшь, нужно знать теорию. По этой ссылке очень хорошо описывается принцип работы баз данных. То какая эта база данных (sybase, postgre, access, mysql) значения не имеет. Принцип работ у всех одинаковый

-~{}~ 26.03.09 14:40:

про ключи написано вот здесь,
http://db.grussell.org/section006.html
 
Сверху