Как связать таблицы в phpmyadmin
CREATE TABLE cities ( id int(11) NOT NULL auto_increment, city_name varchar(50) NOT NULL default », latitude varchar(15) NOT NULL default », longitude varchar(15) NOT NULL default », population int(11) NOT NULL default ‘0’, country_code char(2) NOT NULL default », PRIMARY KEY (id) ) TYPE=MyISAM AUTO_INCREMENT=1 ;
CREATE TABLE countries ( country_code char(2) NOT NULL default », country_name varchar(100) NOT NULL default » ) TYPE=MyISAM;
Изменение табличных данных с помощью phpMyAdmin.
INSERT INTO `countries` (`country_code` , `country_name` ) VALUES (‘ca’, ‘Canada’);
INSERT INTO `cities` ( `id` , `city_name` , `latitude` , `longitude` , `population`, `country_code` ) VALUES (», ‘Sherbrooke’, ’45 23 59.00′, ‘-71 46 11.00’, 125000, ‘ca’);
INSERT INTO `countries` ( `country_code` , `country_name` ) VALUES (‘zh’, ‘China’); INSERT INTO `cities` ( `id` , `city_name` , `latitude` , `longitude` , `population` , `country_code` ) VALUES (», ‘Shanghai’, ’31 13 58.00′, ‘121 26 59.99’, 11000000, ‘zh’);
UPDATE `cities` SET `population` = ‘130000’ WHERE `id` = ‘1’ LIMIT 1 ;
UPDATE `cities` SET `city_name` = ‘Sherbrooke, Quebec’, `population` = ‘130001’ WHERE `id` = ‘1’ LIMIT 1 ;
SELECT * FROM `cities` LIMIT 0,30;
SELECT `city_name` , `population`
FROM `cities`
WHERE 1
ORDER BY `population` DESC LIMIT 0,30;
SELECT `city_name` , `population`
FROM `cities`
WHERE country_code = ‘zh’
ORDER BY `population` DESC;
SELECT country_code, AVG(population)
FROM cities
GROUP BY country_code
SELECT country_code, count(city_name) FROM cities
GROUP BY country_code;
Создание связей между таблицами с помощью phpmyadmin
Далее научимся создавать связи между таблицами в базе данных MySQL с помощью phpmyadmin. Если по какой-то причине вы не желаете использовать phpmyadmin, смотрите приведенные ниже SQL-запросы.
Почему же связи удобно держать в самой базе данных? Ведь эту задачу обычно решает так и само приложение? Все дело в ограничениях и действиях при изменении, которые можно наложить на связи.
Например, можно запретить удалять категорию, если с ней связана хотя б одна заметка. Или удалить все заметки, если удалена категория. Или установить NULL в связующее поле. В любом случае, с помощью связей повышается отказоустойчивость и надежность приложения.
Для начала, движок таблиц должен быть InnoDB . Только он поддерживает внешние ключи ( foreign key ). Если у вас таблицы MyISAM , почитайте как их конвертировать в InnoDB .
Для того, чтобы связать таблицы по полям, необходимо сначала добавить в индекс связываемые поля:
В phpmyadmin выбираем таблицу Country , выбираем режим структуры, выделяем поле Id_Continent, для которого будем делать внешнюю связь и кликаем Индекс.
Обратите внимание на разницу между «Индекс» и «Уникальный». Уникальный индекс можно использовать, например, до поля id, то есть там, где значения не повторяются.
Это же действие можно сделать с помощью SQL-запроса:
Аналогично добавляем индекс для поля Id_Language таблицы Country .
Аналогично можно добавить индекс (только в моем случае теперь уже уникальный или первичный) для таблицы, на которую ссылаемся, для поля id. Поскольку поле id у меня идентификатор, для него делаем первичный ключ. Уникальный ключ мог бы понадобится для других уникальных полей. Но так как мы его уже создали, принимаем информацию к сведению и идём дальше
С помощью SQL-запроса:
Теперь осталось только связать таблицы. Для этого кликаем внизу на пункт Связи:
Теперь для доступных полей (а доступны только проиндексированные поля) выбираем связь с внешними таблицами и действия при изменении записей в таблицах:
Relations¶
phpMyAdmin allows relationships (similar to foreign keys) using MySQL-native (InnoDB) methods when available and falling back on special phpMyAdmin-only features when needed. There are two ways of editing these relations, with the relation view and the drag-and-drop designer – both of which are explained on this page.
You need to have configured the phpMyAdmin configuration storage for using phpMyAdmin only relations.
Technical info¶
Currently the only MySQL table type that natively supports relationships is InnoDB. When using an InnoDB table, phpMyAdmin will create real InnoDB relations which will be enforced by MySQL no matter which application accesses the database. In the case of any other table type, phpMyAdmin enforces the relations internally and those relations are not applied to any other application.
Relation view¶
In order to get it working, you first have to properly create the [[pmadb|pmadb]]. Once that is setup, select a table’s “Structure” page. Below the table definition, a link called “Relation view” is shown. If you click that link, a page will be shown that offers you to create a link to another table for any (most) fields. Only PRIMARY KEYS are shown there, so if the field you are referring to is not shown, you most likely are doing something wrong. The drop-down at the bottom is the field which will be used as the name for a record.
Relation view example¶
Let’s say you have categories and links and one category can contain several links. Your table structure would be something like this:
- category.category_id (must be unique)
- category.name
- link.link_id
- link.category_id
- link.uri .
Open the relation view (below the table structure) page for the link table and for category_id field, you select category.category_id as master record.
If you now browse the link table, the category_id field will be a clickable hyperlink to the proper category record. But all you see is just the category_id , not the name of the category.
To fix this, open the relation view of the category table and in the drop down at the bottom, select “name”. If you now browse the link table again and hover the mouse over the category_id hyperlink, the value from the related category will be shown as tooltip.
Designer¶
The Designer feature is a graphical way of creating, editing, and displaying phpMyAdmin relations. These relations are compatible with those created in phpMyAdmin’s relation view.
To use this feature, you need a properly configured phpMyAdmin configuration storage and must have the $cfg[‘Servers’][$i][‘table_coords’] configured.
To use the designer, select a database’s structure page, then look for the Designer tab.
To export the view into PDF, you have to create PDF pages first. The Designer creates the layout, how the tables shall be displayed. To finally export the view, you have to create this with a PDF page and select your layout, which you have created with the designer.
Создание связей между таблицами с помощью phpmyadmin
В этой заметке мы научимся создавать связи между таблицами в базе данных MySQL с помощью phpmyadmin. Если по какой-то причине вы не желаете использовать phpmyadmin, смотрите приведенные ниже SQL-запросы.
Почему же связи удобно держать в самой базе данных? Ведь эту задачу обычно решает так и само приложение? Все дело в ограничениях и действиях при изменении, которые можно наложить на связи.
Например, можно запретить удалять категорию, если с ней связана хотя б одна заметка. Или удалить все заметки, если удалена категория. Или установить NULL в связующее поле. В любом случае, с помощью связей повышается отказоустойчивость и надежность приложения.
Для начала, движок таблиц должен быть InnoDB . Только он поддерживает внешние ключи ( foreign key ). Если у вас таблицы MyISAM , почитайте как их конвертировать в InnoDB .
Для того, чтобы связать таблицы по полям, необходимо сначала добавить в индекс связываемые поля:
В phpmyadmin выбираем таблицу, выбираем режим структуры, выделяем поле, для которого будем делать внешнюю связь и кликаем Индекс.
Обратите внимание на разницу между "Индекс" и "Уникальный". Уникальный индекс можно использовать, например, до поля id, то есть там, где значения не повторяются.
Это же действие можно сделать с помощью SQL-запроса:
Аналогично добавляем индекс (только в моем случае теперь уже уникальный или первичный) для таблицы, на которую ссылаемся, для поля id. Поскольку поле id у меня идентификатор, для него делаем первичный ключ. Уникальный ключ мог бы понадобится для других уникальных полей.
С помощью SQL-запроса:
Теперь осталось только связать таблицы. Для этого кликаем внизу на пункт Связи:
Теперь для доступных полей (а доступны только проиндексированные поля) выбираем связь с внешними таблицами и действия при изменении записей в таблицах:
Через SQL-запрос: