DbForge Studio for MySQL
Нет смысла изучать какую-то одну из этих программ. Если вы изучите команды языка SQL, то сможете работать в любой среде. Поэтому мы будем учиться писать команды и запросы в консоли. Но для удобства иногда будем использовать MySQL Workbench.
Немного поговорим о консоли. Она входит в поставку. Она умеет практически все, что нужно для создания и администрирования БД.
Особенности работы в консоли:
Окончание команды обозначается точкой с запятой. Команды могут писаться через энтер, как только прошла точка с запятой, так значит команда пошла на выполнение. Команду можно закончить и по другому: \g – выводит как таблицу. или \G – выводит в виде списка.
Если ошиблись, то отменять команду: \с или clear
Все команды можно увидеть набрав команду help.
Команды могут быть буквенными либо в сокращенном виде.
\t \T – автоматом пишется в файле или отключает запись в файл.
Source (\.) – прогон команд из файла.
Комментарии пишут следующим образом:
-- одну строку закомментировать
/* */ - блок комментарий.
# - тоже однострочный комментарий.
Посмотрим в консоли команды:
SELECT user, password FROM mysql.user;
SELECT now();
SHOW DATABASES;
Примеры:
CREATE DATABASES module3;
CREATE DATABASES module 3; //ошибка
CREATE DATABASES `module 3`; //нет ошибки
CREATE DATABASES IF NOT EXISTS module3; //если не существует, то создать
DROP DATABASES `module 3`;
CREATE DATABASES IF NOT EXISTS module3; //если не существует, то удалить
USE module3; //использовать базу данных
Создание таблиц.
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)] [table_options] [select_statement]
CREATE TABLE устанавливает новую таблицу, ее столбцы и ограничения целостности в существующей базе данных. Пользователь, который создает таблицу, становится владельцем таблицы и получает полные привилегии для этого, включая возможность предоставления (GRANT) привилегий другим пользователям, триггерам, и сохраненным процедурам.
CREATE TABLE поддерживает несколько опций для определения столбцов:
- Локальные столбцы, определяющие имя и тип данных для данных, введенных в столбец.
- Вычисляемые столбцы, базирующиеся на расширении. Значение столбца вычисляется каждый раз при доступе к таблице. Столбцы, к которым обращается выражение, должны существовать раньше, чем столбец может быть определен.
- Основанные на доменах столбцы, наследуемые все характеристики домена, но определение столбца может включать новое значение по умолчанию, атрибут NOT NULL, дополнительные ограничения CHECK или переопределять порядок сортировки, которые отменяют определение домена.
- Описание типа данных для столбца типа CHAR, VARCHAR или BLOB-техт может включать предложение CHARACTER SET определяя специфическую кодировку для одиночного столбца. Иначе столбец использует определенную по умолчанию для базы данных кодировку. Если кодировка базы данных изменена, все столбцы впоследствии определенные имеют новую кодировку, но существующие столбцы не изменяются.
Предложение COLLATE позволяет указать специфический порядок сортировки для типов данных CHAR, VARCAHR и BLOB-текст. Выбор порядка сортировки ограничен теми, которые поддерживаются для данной кодировки столбца, это или кодировка по умолчанию для базы данных в целом или другая установленная в предложении CHARACTER SET как часть определения типа данных. Смотри Language Reference, чтобы получить полный список возможных сортировок.
Атрибут NOT NULL предотвращает ввод NULL или неизвестного значения в столбец.
Ограничения целостности могут быть определены для таблицы, когда она создана. Ограничения целостности это правила, которые контролируют базу данных и ее компоненты, связи типа столбец-таблица и таблица-таблица, и проверку вводимых данных. Они охватывают все транзакции к базе данных и автоматически поддерживаются системой. CREATE TABLE может создавать следующие типы ограничений целостности:
- PRIMARY KEY (первичный ключ) - уникально идентифицирует каждую строку таблицы. Значение в этом столбце либо в упорядоченном наборе столбцов не могут повторятся в более чем одной строке. Столбец PRIMARY KEY должен быть определен только с атрибутом NOT NULL. Таблица может иметь только один PRIMARY KEY, который может быть определен на одном или более столбцов.
- UNIQUE (уникальные) ключи гарантируют, что не существует двух строк имеющих одно и тоже значение в специфическом столбце или упорядоченном наборе столбцов. Уникальный столбец должен быть определен с атрибутом NOT NULL. Таблица может иметь один или более UNIQUE ключей. UNIQUE ключ может быть использован FOREIGN KEY (внешний ключ) в другой таблице.
- Справочные ограничения гарантируют, что значения в наборе столбцов, которые определены в FOREIGN KEY принимают те же самые значения, которые присутствуют в столбце UNIQUE или PRIMARY KEY в справочной таблице.
- CHECK ограничения предписывают <search_condition>, которые должны принимать значение истинно для добавленных или измененных данных.<search_condition> могут требовать некоторой комбинации или порядка значений или равенства значению, введенному в другие столбцы.
Для не именованных ограничений, система создает уникальное имя, сохраненное в системной таблице RDB$RELATION_CONSTRAINTS.
Обратите внимание: Ограничения не допустимы на выражениях.
[] – необязательно присутствует.
Пример.
Рассмотрим две таблицы. Первая таблица содержит информацию о людях. Вторая об их предпочтениях в еде, т.е. любимые блюда.
PERSON | |
Person_id | Smallint(unsigned) |
fname | VARCHAR(20) |
Iname | VARCHAR(20) |
gender | CHAR(1) |
birth_date | DATE |
И таблицу
Favorite_food | |
Person_id | Smallint(unsigned) |
Food | VARCHAR(20) |
У таблицы person есть первичный ключ (person_id), гарантирующий уникальность. Столбцы person_id и food (блюдо) образуют первичный ключ таблицы favorite_food. Столбец person_id также является внешним ключом к таблице person.
Команда создания первой таблицы:
CREATE TABLE person (person_id SMALLINT UNSIGNED,
fname VARCHAR(20),
lname VARCHAR(20),
gender CHAR(1),
birth_date DATE,
CONSTRAINT pk_person PRIMARY KEY (person_id) );
В этом выражении должно быть понятно все, кроме последнего элемента. При описании таблицы необходимо сообщить серверу БД, какой столбец или столбцы будут играть роль первичного ключа таблицы. Осуществляется это путем создания ограничения (constraint) для таблицы. В описание таблицы можно добавить ограничение одного из нескольких типов. Данное ограничение является ограничением первичного ключа (primary key constraint). Оно накладывается на столбец person_id и получает имя pk_person. Обычно начинают имена ограничений первичного ключа с приставки pk_, а затем указываю имя таблицы, чтобы при просмотре списка таких ограничений было ясно, чем каждое из них является.
Говоря об ограничении, упомянем еще один тип, который мог бы быть полезным для таблицы person. Некоторым полям можно указать допустимые значения (например 'M' и 'F' для столбца gender). Это другой тип ограничения – проверочное ограничение (check constraint), ограничивающее допустимые значения конкретного столбца. MySQL позволяет вводить в описание столбца проверочное ограничение:
gender ENUM('M','F'),
Если требуется убедиться, что таблица person действительно существует, можно использовать команду describe (описать) (или desc для краткости) и посмотреть описание таблицы.
mysql> DESC person;
Теперь, после создания таблицы person, следующий шаг – создать таблицу favorite_food:
CREATE TABLE favorite_food
(person_id SMALLINT UNSIGNED,
food VARCHAR(20),
CONSTRAINT pk_favorite_food PRIMARY KEY (person_id, food),
CONSTRAINT fk_person_id FOREIGN KEY (person_id)
REFERENCES person (person_id)
);
Это очень похоже на выражение create table для таблицы person, за несколькими исключениями:
• Поскольку у человека может быть несколько любимых блюд (что и стало причиной создания данной таблицы), одного столбца person_id для обеспечения уникальности в таблице недостаточно. Поэтому первичный ключ данной таблицы состоит из двух столбцов: person_id и food.
• Таблица favorite_food содержит другой тип ограничения – ограничение внешнего ключа (foreign key constraint). Оно ограничивает значения столбца person_id таблицы favorite_food, позволяя ему включать только те значения, которые есть в таблице person. При таком ограничении не получится включить в таблицу favorite_food строку, показывающую, что person_id 27 любит пиццу, если в таблице person нет строки со значением 27 для person_id.
просмотр структуры таблицы:
DESC favorite_food;
Дата добавления: 2017-08-01; просмотров: 1554;