[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Связи в MySQL
dvs
Добрый день!
Нужно ли в mysql у связующей таблицы прописывать связи, т.к. где то вычитал что связи ставятся для того чтобы избежать проверки в php на существование id-шников связывающих таблиц и если их нет, то mysql просто не выполнит INSERT/UPDATE? Или это излишне если проверка есть в php и просто проиндексировать поля? Как это влияет на производительность, вроде бы запрос SHOW FULL COLUMNS FROM `table` стал дольше выполнятся раза в 4.
В общем как лучше проверять в MySQL, в PHP или и там и там?
inpost
dvs
Связи не допустят ошибки или переполнения пустых данных на MySQL.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
dvs
Цитата (inpost @ 26.02.2016 - 11:16)
dvs
Связи не допустят ошибки или переполнения пустых данных на MySQL.

Спасибо, понятно. Значит это все таки хорошая штука и стоит пользоваться. smile.gif
depp
ты наверное имеешь в виду форейгн кеи. если да - то они определенно упрощают работу с данными и поддерживают целостность базы.
на скорость работы они по идее особо сильно влиять не должны. особенно если у вас правильно расставлены индексы.
dvs
Цитата (depp @ 26.02.2016 - 11:46)
ты наверное имеешь в виду форейгн кеи.

Именно smile.gif Спасибо
sergeiss
Цитата (dvs @ 26.02.2016 - 09:17)
В общем как лучше проверять в MySQL, в PHP или и там и там?

Когда возникают подобные вопросы, то просто представь, что у тебя есть доступ к этой БД из разных источников. Например из нескольких скриптов и плюс из чего-нибудь типа phpMyAdmin. И тогда вопрос о том, где лучше проверять, отпадет сам собой smile.gif Однозначно в БД. Тогда ни случайно, ни специально не будет нарушена целостность данных.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
dvs
Цитата (sergeiss @ 26.02.2016 - 13:48)
Цитата (dvs @ 26.02.2016 - 09:17)
В общем как лучше проверять в MySQL, в PHP или и там и там?

Когда возникают подобные вопросы, то просто представь, что у тебя есть доступ к этой БД из разных источников. Например из нескольких скриптов и плюс из чего-нибудь типа phpMyAdmin. И тогда вопрос о том, где лучше проверять, отпадет сам собой smile.gif Однозначно в БД. Тогда ни случайно, ни специально не будет нарушена целостность данных.

Спасибо, прояснил для себя. Дело в том что в PHP у меня уже есть проверка(для вывода ошибки), поэтому получается двойная проверка в случае правильного ввода данных[2 SELECT-а, 1) для проверки id из php, 2) самим mysql, если первая проверка прошла успешно] - это и смутило. Так понял лучше 2 раза проверить, чем потерять данные.
PS Из phpmyadmin попробовал вставить левые данные. Интересно было заругается или нет, не получилось(просто select из имеющихся id)smile.gif Здорово!
Kusss
Что-то я ничего не понимаю.
Создал 2 таблицы:
CREATE TABLE IF NOT EXISTS `order` (
`id` int(1) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
)
ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

CREATE TABLE IF NOT EXISTS `order_product` (
`id` int(1) NOT NULL AUTO_INCREMENT,
`order_id` int(1) NOT NULL,
`product` int(1) NOT NULL,
PRIMARY KEY (`id`),
)
ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

прописываю
ALTER TABLE  `order_product` ADD CONSTRAINT  `test` FOREIGN KEY (`order_id`) REFERENCES  `order` (`id`)
или так
ALTER TABLE `order_product` ADD FOREIGN KEY (`order_id`) REFERENCES `order` (`id`)
и ничего не работает.
Я что-то не так делаю ?
depp
тип таблиц надо innodb использовать. myisam не поддерживает внешние ключи.
Kusss
о_О .
Пока искал не видел упоминая о типе таблицы.

depp
А что будет, если я поменяю тип таблицам ? Которые у меня уже давно, и там много данных ph34r.gif
depp
ничего. полнотекстовый поиск перестанет работать, если где используешь.
Kusss
в тестовых таблицах поменял тип, и все заработало.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.