Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.58/105: Рейтинг темы: голосов - 105, средняя оценка - 4.58
Исследователь
 Аватар для Jallik Lich
196 / 175 / 13
Регистрация: 30.10.2011
Сообщений: 605
Записей в блоге: 7

Необходимо-ли создавать связи между таблицами в MySQL

30.11.2011, 14:31. Показов 21003. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, господа...
Я уже задавал подобный вопрос, но так и не получил на него ответ.
Вопрос такой: Связи между таблицами в MySQL создаются только програмно, или можно (необходимо) создавать связи в самой MySQL?
И второй вопрос: При создании таблицы, указывать нужно только первичный ключ (PRIMARY_KEY) или еще как-то указываются вторичные (внешние) ключи?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.11.2011, 14:31
Ответы с готовыми решениями:

Связи между таблицами в Mysql
Всем привет! При создании схемы БД, наткнулся на такой вопрос: Например у нас есть таблица пользователей и таблица новостей. Пускай у...

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

Связи между таблицами в phpmyadmin
При создании таблицы catimg указывал FOREIGN KEY(category) REFERENCES catalog(category), но связь не отображается. Почему? И вообще как...

18
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
30.11.2011, 14:42
Цитата Сообщение от Jallik Lich
Вопрос такой: Связи между таблицами в MySQL создаются только програмно, или можно (необходимо) создавать связи в самой MySQL?
Что значит "в самой"? Связи (а сейчас принят термин constraint или ограничение) в любом случае создаются в "самой" БД

Цитата Сообщение от Jallik Lich
И второй вопрос: При создании таблицы, указывать нужно только первичный ключ (PRIMARY_KEY) или еще как-то указываются вторичные (внешние) ключи?
PK - это всего лишь уникальный Id строки в пределах таблицы, он никаких "связей" не задает.
"Связи" задает именно constraint Foreign Key

PS
К слову сказать, а причем здесь PHP?
1
127 / 127 / 25
Регистрация: 20.11.2009
Сообщений: 498
30.11.2011, 14:47
Связи проставляются в зависимых таблицах. Связывают через вторичные ключи. Нельзя удалить запись из главной таблицы если есть связные записи в зависимой. тип таблиц InnoDB
1
Исследователь
 Аватар для Jallik Lich
196 / 175 / 13
Регистрация: 30.10.2011
Сообщений: 605
Записей в блоге: 7
30.11.2011, 15:03  [ТС]
Хорошо... Спасибо...
Теперь для закрепления можно маленький примерчик...
Таблица users (id, login, pass)
Таблица users_info (user_id, bio)

Можете написать SQL запросы для создания этих таблиц и связей между ними...


Цитата Сообщение от Grossmeister Посмотреть сообщение
а причем здесь PHP?
Когда я пользуюсь базай данных, в ней у меня несколько таблиц, в которых внешние ключи одной указывают на внутренние ключи другой... Все манипуляции с данными (для примера на PHP) я провожу в скрипте, где примерно такие запросы:
PHP
1
2
$db_rez = mysql_fetch_array(mysql_query("SELECT id, name, pass FROM users WHERE id='1'"));
$db_rez2 = mysql_fetch_array(mysql_query("SELECT bio FROM users_info WHERE id='{$db_rez['id']}'"));
0
127 / 127 / 25
Регистрация: 20.11.2009
Сообщений: 498
30.11.2011, 16:39
Цитата Сообщение от Jallik Lich Посмотреть сообщение
Когда я пользуюсь базай данных, в ней у меня несколько таблиц, в которых внешние ключи одной указывают на внутренние ключи другой... Все манипуляции с данными (для примера на PHP) я провожу в скрипте, где примерно такие запросы:
Это в любом случае придется делать
0
Исследователь
 Аватар для Jallik Lich
196 / 175 / 13
Регистрация: 30.10.2011
Сообщений: 605
Записей в блоге: 7
30.11.2011, 16:41  [ТС]
Цитата Сообщение от вандал Посмотреть сообщение
Это в любом случае придется делать
У моем коде ошибка! Везде говорится, что подобные запросы необходимо объеденять!
0
127 / 127 / 25
Регистрация: 20.11.2009
Сообщений: 498
30.11.2011, 16:47
Удобнее
PHP
1
2
3
4
5
$query = mysql_query('SELECT u.id, u.name, u.pass, ui.bio 
                     FROM users u 
                     LEFT JOIN users_info ui ON(u.id = ui.user_id) 
                     WHERE u.id = '1'');
mysql_fetch_assoc($query);
Добавлено через 3 минуты
Цитата Сообщение от Jallik Lich Посмотреть сообщение
$db_rez2 = mysql_fetch_array(mysql_query("SELECT bio FROM users_info WHERE id='{$db_rez['id']}'"));
так писать нельзя
пиши сначала mysql_query
после mysql_fetch_array
вместе нельзя
1
Исследователь
 Аватар для Jallik Lich
196 / 175 / 13
Регистрация: 30.10.2011
Сообщений: 605
Записей в блоге: 7
30.11.2011, 16:51  [ТС]
Цитата Сообщение от вандал Посмотреть сообщение
так писать нельзя
В рабочих проэктах я так не пишу... Это для демонстрации...


Цитата Сообщение от вандал Посмотреть сообщение
пиши сначала mysql_query
после mysql_fetch_array
вместе нельзя
Можна... Работает корректно и без ошибок
0
127 / 127 / 25
Регистрация: 20.11.2009
Сообщений: 498
30.11.2011, 16:58
SQL
1
2
ALTER TABLE `users_info`
  ADD CONSTRAINT `users_info` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`);
запрос на связывания таблиц помоему так пишется, точно не скажу потому что обычно соединяю через phpmyadmin
user_id обязательно должен быть index
таблицы InnoDB
0
Исследователь
 Аватар для Jallik Lich
196 / 175 / 13
Регистрация: 30.10.2011
Сообщений: 605
Записей в блоге: 7
30.11.2011, 17:00  [ТС]
Цитата Сообщение от вандал Посмотреть сообщение
обычно соединяю через phpmyadmin
А можешь скрин кинуть... Или ссылочку на статью... Или вкратце описать, что нажимать
0
127 / 127 / 25
Регистрация: 20.11.2009
Сообщений: 498
30.11.2011, 17:09
user_id там где выбираешь PRIMARY там есть INDEX. также во вкладке структура(в самой таблице) напротив поля есть значок таблицы с молнией. если нажать на значок то поле станет INDEX.
далее ниже полей есть ссылка "связи". нажимаешь на нее и там выбираешь во внешних связях поле таблицы, с которым связать. На статью ссылку не знаю
2
Исследователь
 Аватар для Jallik Lich
196 / 175 / 13
Регистрация: 30.10.2011
Сообщений: 605
Записей в блоге: 7
30.11.2011, 17:15  [ТС]
Спасибо... Вроде-бы получилось...
Вообщем, суть понял... Дальше подскажет Google
0
 Аватар для Vovan-VE
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
30.11.2011, 19:24
Цитата Сообщение от Jallik Lich Посмотреть сообщение
Можна... Работает корректно и без ошибок
В этом способе нет ни проверки ошибок, ни освобождения результата.
0
Исследователь
 Аватар для Jallik Lich
196 / 175 / 13
Регистрация: 30.10.2011
Сообщений: 605
Записей в блоге: 7
30.11.2011, 19:25  [ТС]
Цитата Сообщение от Vovan-VE Посмотреть сообщение
В этом способе нет ни проверки ошибок, ни освобождения результата.
Вот поэтому
Цитата Сообщение от Jallik Lich Посмотреть сообщение
В рабочих проэктах я так не пишу... Это для демонстрации...
0
6 / 3 / 0
Регистрация: 09.01.2012
Сообщений: 296
16.04.2012, 09:56
http://php-myadmin.ru/learning/
1
2 / 2 / 1
Регистрация: 29.08.2011
Сообщений: 150
16.04.2012, 17:36
Выбрав любую таблицу ниже есть вот такая строчка Relation view вот там и можно указать связи!
0
6 / 3 / 0
Регистрация: 09.01.2012
Сообщений: 296
19.04.2012, 22:05
Один добрый человек посоветовал, решил воспользоваться им и не пожалел чего и Вам желаю:
dbForge Studio for MySQL
http://www.devart.com/ru/dbforge/mysql/studio/

Без проблем создал, связал!
0
11 / 11 / 1
Регистрация: 26.04.2012
Сообщений: 104
15.08.2012, 17:40
"MySQL называют системой управления реляционными базами данных, потому что в её таблицах содержатся не только данные, но и отношения между ним".

Из книги Робина Никсона "Создаём динамические веб-сайты с помощью PHP, MySQL и JavaScript".
0
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
16.08.2012, 09:47
Цитата Сообщение от ilikeMagic
"MySQL называют системой управления реляционными базами данных, потому что в её таблицах содержатся не только данные, но и отношения между ним".

Из книги Робина Никсона "Создаём динамические веб-сайты с помощью PHP, MySQL и JavaScript".
Скорее всего плохой перевод. В самих таблицах отношения не содержатся, только данные. Для реализации отношений существуют отдельные объекты, называемые constraint
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.08.2012, 09:47
Помогаю со студенческими работами здесь

Связи между таблицами не отображаются
У меня в phpmyadmin в designer есть таблицы, но связи между ними не отображаются. В чем проблема подскажите

Связи между таблицами в MyPhpAdmin
Здравствуйте. Создала таблицы: Страны, Страны-туры, Туры. Связала таблицы Страны и Страны-туры по Id,а вот связать Страны-туры и...

Как создать связи между таблицами и вывести их RedBean
Доброго времени суток, форумчане. Прошу Вас оказать помощь, объясните мне, на примере: Имеется БД с таблицами tickets и clients, в...

Передача автогенерируемого ключа между таблицами MySQL
Есть 3 таблици. В одной (data) поле id уникально и генерируется автоматически автоинкрементом при внесении новых записей. Во второй таблице...

Установка связи между таблицами MySQL с помощью PHP
Как ето зделать в PHP


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru