В данной лекции мы рассмотрим основные понятия теории
В жизни мы часто сталкиваемся с необходимостью хранить какую-либо
информацию, а потому часто имеем дело и с
В этой таблице данные – это собственно номера телефонов, адреса и ФИО., т.е. строки "Иванов Иван Иванович", "32-43-12" и т.п., а названия столбцов этой таблицы, т.е. строки "ФИО", "Номер телефона" и "Адрес" задают смысл этих данных, их семантику.
| ФИО | Номер телефона | Адрес |
|---|---|---|
| Иванов Иван Иванович | 32-43-12 | ул. Ленина, 12, 43 |
| Ильин Федор Иванович | 32-32-34 | пр. Маркса, 32, 45 |
Теперь представьте, что записей в этой таблице не две, а две тысячи,
вы занимаетесь созданием этого справочника и где-то произошла ошибка
(например, опечатка в адресе). Видимо, тяжеловато будет найти и
исправить эту ошибку вручную. Нужно воспользоваться какими-то
Для точности дадим определение
Итак, мы пришли к выводу, что хранить данные независимо от программ,
так, что они связаны между собой и организованы по определенным
правилам, целесообразно. Но вопрос, как хранить данные, по каким
правилам они должны быть организованы, остался открытым. Способов
существует множество (кстати, называются они моделями представления
или хранения данных). Наиболее популярные – объектная и
Автором реляционной модели считается Э. Кодд, который первым
предложил использовать для обработки данных аппарат теории множеств
(объединение, пересечение, разность,
Таким образом, реляционная
Примеры реляционных
В основу объектной модели положена концепция объектно-ориентированного программирования, в которой данные представляются в виде набора объектов и классов, связанных между собой родственными отношениями, а работа с объектами осуществляется с помощью скрытых (инкапсулированных) в них методов.
Примеры объектных
В последнее время производители
Поскольку мы собираемся работать с
Для начала давайте подумаем над таким вопросом: какую информацию
нужно дать о человеке, чтобы собеседник точно сказал, что это именно
тот человек, сомнений быть не может, второго такого нет? Сообщить
фамилию, очевидно, недостаточно, поскольку существуют однофамильцы.
Если собеседник человек, то мы можем приблизительно объяснить, о ком
речь, например вспомнить поступок, который совершил тот человек, или
еще как-то. Компьютер же такого объяснения не поймет, ему нужны
четкие правила, как определить, о ком идет речь. В системах
управления
Например, в нашей таблице (см. выше) ФИО и адрес позволяют однозначно
выделить запись о человеке. Если же говорить в общем, без связи с
решаемой задачей, то такие знания не позволяют точно указать на
единственного человека, поскольку существуют однофамильцы, живущие в
разных городах по одному адресу. Все дело в границах, которые мы сами
себе задаем. Если считаем, что знания ФИО, телефона и адреса без
указания города для наших целей достаточно, то все замечательно,
тогда поля ФИО и адрес могут образовывать
Кроме однозначной идентификации записи,
Например, у нас есть три таблицы: содержащая информацию об
исторических личностях (Persons), содержащая информацию об их
изобретениях (
(рис 10.1) Пример использования первичных ключей для организации связей с другими таблицами
Одна из основных задач, возникающих при работе с
Если говорить о , , и , а слово ключ ( KEY ) используется как синоним слова
индекс ( ). Все индексы хранятся в памяти в виде
– NOT
NULL ). Таблица может иметь только один первичный индекс, но он может
состоять из нескольких полей
–
– обычный индекс (как мы описали выше). В
Продолжим разговор о
В текстовом режиме работа с
(рис 10.2) Работа с MySQL в командной строке. Команда show databases — вывести все имеющиеся базы данных
(рис 10.3) Работа с MySQL в командной строке. Результат обработки команды show databasesПеред тем как переходить к детальному изучению языка , mysqld.exe и т.п. (у нас под Windows XP это c:\ ) Последний файл запускает . Здесь
даже пароля не спросят. Более того, если вы наберете
shell> mysql.exe -u root
или
shell>mysql -u root mysql
то получите все права администратора .
Для начала, не вдаваясь в подробности команд, исправим эти два недочета (отсутствие пароля у администратора и возможность входа анонимным пользователям):
shell> mysql -u root mysql
mysql> UPDATE user SET Password=PASSWORD('new_password')
WHERE user='root';
mysql> DELETE FROM user WHERE user='';
mysql> FLUSH PRIVILEGES;
Все данные о пользователях user в специальной PASSWORD, которая
кодирует введенные данные. Кроме изменения пароля администратора,
нужно еще удалить всех пользователей, не имеющих логина (команда ). Команда заставляет вступить в действие
изменения, произошедшие в системной
Теперь создадим
mysql>create database book;
Как можно заметить, все команды в
mysql> show tables
->
->
Теперь последнее действие – создадим простого пользователя,
предоставим ему доступ к созданной
mysql> GRANT ALL PRIVILEGES ON book.* TO nina@localhost
IDENTIFIED BY '123';
Команда наделяет пользователя nina, зашедшего на сервер с этой
же машины (c localhost) и идентифицируемого паролем "123",
определенными правами (в данном случае всеми) на все таблицы book. Теперь мы можем выйти и зайти как пользователь nina с
соответствующим паролем:
shell>mysql -u nina -p Enter password: *** Welcome to the MySQL monitor!... mysql>
Если вы собираетесь пользоваться
Итак, мы в общих чертах познакомились с основными понятиями теории
Первый международный стандарт языка
Следующий международный стандарт языка
Если говорить о
Далее, говоря об основах языка
Функции любой
К первым двум функциям имеют доступ только администраторы
Прежде чем что-либо делать с данными, нужно создать таблицы, в
которых эти данные будут храниться, научиться изменять структуру этих
таблиц и удалять их, если потребуется. Для этого в языке , и .
создает таблицу с заданным именем в текущей
В версии имя_базы_данных.имя_таблицы. Эта форма записи работает независимо
от того, является ли указанная
В версии . Временная таблица автоматически удаляется по
завершении соединения, а ее имя действительно только в течение
данного соединения. Это означает, что в двух разных соединениях могут
использоваться временные таблицы с одинаковыми именами без конфликта
друг с другом или с существующей таблицей с тем же именем
(существующая таблица скрыта, пока не удалена временная таблица). В
версии CREATE .
В версии IF NOT EXISTS для того, чтобы не возникала ошибка, если указанная
таблица уже существует. Следует учитывать, что при этом идентичность
структур этих таблиц не проверяется.
Каждая таблица представлена набором определенных файлов в директории
Синтаксис
CREATE [TEMPORARY] TABLE [IF NOT EXISTS]
имя_таблицы [(определение_столбца,...)]
[опции_таблицы] [select_выражение]
В выражении определение_столбца перечисляют, какие столбцы должны
быть созданы в таблице. Каждый столбец таблицы может быть пустым
( NULL ), иметь значение по умолчанию, являться ключом или
автоинкрементом. Кроме того, для каждого столбца обязательно
указывается тип данных, которые будут в нем храниться. Если не
указывается ни NULL, ни NOT NULL, то столбец интерпретируется так,
как будто указано NULL. Если поле помечают как автоинкремент
( AUTO_INCREMENT ), то его значение автоматически увеличивается на
единицу каждый раз, когда происходит добавление данных в таблицу и в
это поле записывается пустое значение ( NULL, т.е. ничего не
записывается) или 0. Автоинкремент в таблице может быть только один,
и при этом он обязательно должен быть проиндексирован.
Последовательность AUTO_INCREMENT начинается с 1. Наличие
автоинкремента является одной из особенностей
имя_столбца тип [NOT NULL | NULL]
[DEFAULT значение_по_умолчанию]
[AUTO_INCREMENT][PRIMARY KEY]
[reference_definition]
Тип столбца (тип в выражении определение_столбца) может быть одним из следующих:
INT[(length)] [UNSIGNED ] [ZEROFILL]REAL[(length,decimals)] [UNSIGNED ] [ZEROFILL]CHAR(length) [BINARY] и VARCHAR(length) [BINARY]DATE и TIMEBLOB TEXTENUM (value1,value2,value3,...) и SET(value1,value2,value3,...)Полный список типов смотрите в документации
Вместо перечисления столбцов и их свойств в определении_столбца можно
задавать списки ключевых и индексных полей, ограничения и проверки:
PRIMARY KEY (имя_индексируемого_столбца, ...)
или
KEY [имя_индекса] (имя_индексируемого_столбца,...)
или
INDEX [имя_индекса] (имя_индексируемого_столбца,...)
или
UNIQUE [INDEX] [имя_индекса]
(имя_индексируемого_столбца,...)
или
FULLTEXT [INDEX] [имя_индекса]
(имя_индексируемого_столбца,...)
или
[CONSTRAINT symbol]
FOREIGN KEY [имя_индекса]
(имя_индексируемого_столбца,...)
[reference_definition]
или
CHECK (expr)
При задании всех этих элементов указывается список полей (столбцов),
которые будут входить в индекс, ключ или ограничение, имя_индексируемого_столбца записывается следующим образом:
имя_столбца [(длина_индекса)]
, CHECK и REFERENCES на самом деле ничего не делают в
Кроме всего перечисленного, при создании таблицы можно указать некоторые ее свойства (опции_таблицы), например такие:
TYPE = {BDB | HEAP | ISAM | InnoDB | MERGE |
MRG_MYISAM | MYISAM }AUTO_INCREMENT = числоAVG_ROW_LENGTH = числоCOMMENT = "строка"MAX_ROWS =
число и MIN_ROWS = числоИ последний (опять же опциональный) элемент команды CREATE – это
выражение . Синтаксис такой:
[IGNORE | REPLACE] SELECT ...
(любое корректное выражение SELECT)
Если при создании таблицы в команде CREATE указывается выражение , то все поля, полученные выборкой, добавляются в создаваемую
таблицу.
Пример 10.1. Создадим таблицу Persons, структура
которой была приведена на рисунке 10.1.
mysql>CREATE TABLE Persons
(id INT PRIMARY KEY AUTO_INCREMENT,
first_name VARCHAR(50), last_name
VARCHAR(100), death_date INT,
description TEXT, photo INT,
citizenship CHAR(50) DEFAULT 'Russia');
С помощью специфичной для SHOW можно просмотреть
существующие
Показать все
mysql>SHOW databases;
Сделать текущей book и показать все таблицы в ней:
mysql>use book; mysql>show tables;
Показать все столбцы в таблице Persons:
mysql> show columns from Persons;
удаляет одну или несколько таблиц. Все табличные
данные и определения удаляются, так что при работе с этой командой
следует соблюдать осторожность
Синтаксис:
DROP TABLE [IF EXISTS] имя_таблицы
[, имя_таблицы,...]
[RESTRICT | CASCADE]
В версии IF EXISTS, чтобы предупредить ошибку, если указанные таблицы не
существуют.
Опции и CASCADE позволяют упростить перенос программы с
других
mysql> DROP TABLE IF EXISTS Persons,
Artifacts, test;
обеспечивает возможность изменять структуру
существующей таблицы
Синтаксис:
ALTER [IGNORE] TABLE имя_таблицы
alter_specification
[, alter_specification ...]
Можно производить следующие изменения в таблице
(все они записываются в alter_specification ):
ADD [COLUMN] определение_столбца [FIRST | AFTER имя_столбца ]
или
ADD [COLUMN] (определение_столбца,
определение_столбца,...)
Здесь, как и далее, определение_столбца записывается так же, как при создании таблицы.
ADD
или ADD
или ADD
или ADD FULLTEXT [имя_индекса] (имя_индексируемого_столбца,...)
или CHANGE [COLUMN] старое_имя_столбца определение_столбца
или MODIFY [COLUMN] определение_столбца
DROP [COLUMN] имя_столбца
DROP PRIMARY KEY
DROP INDEX имя_индекса
RENAME [TO] новое_имя_таблицы
ORDER BY поле
или
опции_таблицы
Если оператор используется для изменения определения типа столбца, но показывает, что столбец не
изменился, то, возможно, VARCHAR на CHAR VARCHAR, если данная таблица содержит другие столбцы с
переменной длиной.
Оператор во время работы создает временную копию исходной
таблицы. Требуемое изменение выполняется на копии, затем исходная
таблица удаляется, а новая переименовывается. Это делается для того,
чтобы в новую таблицу автоматически попадали все обновления, кроме
неудавшихся. Во время выполнения исходная таблица
доступна для чтения другими клиентами. Операции обновления и записи в
этой таблице приостанавливаются, пока не будет готова новая таблица.
Следует отметить, что при использовании любой другой опции для , кроме RENAME,
Пример10.3. Добавим в созданную таблицу Persons поле для записи года
рождения человека:
mysql> ALTER TABLE Persons
ADD bday INTEGER AFTER last_name;
Итак, мы научились работать с таблицами: создавать, удалять и изменять их. Теперь разберемся, как делать то же самое с данными, которые в этих таблицах хранятся.
применяется для извлечения строк, выбранных из одной
или нескольких таблиц. То есть с его помощью мы задаем столбцы или
выражения, которые надо извлечь ( select_выражения ), таблицы
( table_references ), из которых должна производиться выборка, и,
возможно, условие ( where_definition ), которому должны соответствовать
данные в этих столбцах, и порядок, в котором эти данные нужно выдать
Кроме того, оператор можно использовать для извлечения строк,
вычисленных без ссылки на какую-либо таблицу. Например, чтобы
вычислить, чему равно 2*2, нужно просто написать
mysql> SELECT 2*2;
Упрощенно структуру оператора можно представить следующим образом:
SELECT select_выражение1, select_выражение2,
...
[FROM table_references
[WHERE where_definition]
[ORDER BY {число | имя_столбца |
формула}
[ASC | DESC], ...]]
Квадратные скобки [ ] означают, что использование находящегося в них
оператора необязательно, вертикальная черта | означает перечисление
возможных вариантов. После ключевого слова ORDER BY указывают имя
столбца, число (целое беззнаковое) или формулу и способ упорядочения
(по возрастанию – , или по убыванию – ). По умолчанию
используется упорядочение по возрастанию.
Когда в select_выражении мы пишем " * ", это значит выбрать все
столбцы. Кроме " * " в select_выражения могут использоваться функции
типа max, min и .
Пример 10.4. Выбрать из таблицы Persons все данные, для которых поле first_name имеет значение 'Александр':
mysql> SELECT * FROM Persons
WHERE first_name='Александр';
Выбрать название и описание ( title, description ) артефакта под
номером 10:
mysql> SELECT title,description
FROM Artifacts WHERE id=10;
вставляет новые строки в существующую таблицуимя_таблицы во всех этих
формах задает таблицу, в которую должны быть внесены строки. Столбцы,
для которых задаются значения, указываются в списке имен столбцов
( имя_столбца ) или в части SET.
Синтаксис:
INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
[INTO] имя_таблицы [(имя_столбца,...)]
VALUES (выражение,...),(...),...
Эта форма команды вставляет строки в соответствии с точно
указанными в команде значениями. В скобках после имени таблицы
перечисляются столбцы, а после ключевого слова VALUES – их значения.
Например:
mysql> INSERT INTO Persons
(last_name, bday) VALUES
('Иванов', '1934');
вставит в таблицу Persons строку, в которой значения фамилии
( last_name ) и даты рождения ( bday ) будут заданы соответственно как
"Иванов" и "1934".
INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
[INTO] имя_таблицы [(имя_столбца,...)]
SELECT ...
Эта форма команды вставляет строки, выбранные из другой таблицы или таблиц.
Например:
mysql> INSERT INTO Artifacts (author)
SELECT id FROM Persons
WHERE last_name='Иванов'
AND bday='1934';
вставит в таблицу в поле "автор" ( author ) значение
идентификатора, выбранного из таблицы Persons по условию, что фамилия человека Иванов и год рождения 1934.
INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
[INTO] имя_таблицы
SET имя_столбца=выражение,
имя_столбца=выражение, ...
Например:
mysql> INSERT INTO Persons
SET last_name='Петров',
first_name='Иван';
Эта команда вставит в таблицу Persons в поле last_name значение
"Петров", а в поле first_name – строку "Иван".
Форма со списком из нескольких значений
поддерживается в версии имя_столбца=выражение поддерживается в версии
Действуют следующие соглашения.
INSERT. .. VALUES или INSERT. .. SELECT , то величины для всех столбцов должны быть определены в списке VALUES() или в результате работы SELECT . Если порядок столбцов в
таблице неизвестен, для его получения можно использовать DESCRIBE
имя_таблицы.expression может относиться к любому столбцу, который
ранее был внесен в список значений. Например, можно указать
следующее:mysql> INSERT INTO имя_таблицы (col1,col2)
VALUES(15,col1*2);
Но нельзя указать:
mysql> INSERT INTO имя_таблицы (col1,col2)
VALUES(col2*2,15);
Мы еще не обсудили три необязательных параметра, присутствующих во
всех трех формах команды: LOW_PRIORITY, и IGNORE.
Параметры LOW_PRIORITY и используются, когда с таблицей
работает большое число пользователей. Они предписывают устанавливать
приоритет данной операции перед операциями других пользователей. Если
указывается ключевое слово LOW_PRIORITY, то выполнение данной команды будет задержано до тех пор, пока другие клиенты не завершат
чтение этой таблицы. В этом случае клиент должен ожидать, пока данная
команда вставки не будет завершена, что в случае интенсивного
использования таблицы может потребовать значительного времени. В
противоположность этому команда позволяет данному
клиенту продолжать операцию сразу же, независимо от других
пользователей.
Если в команде указывается ключевое слово IGNORE, то все
строки, имеющие дублирующиеся ключи или в этой
таблице, будут проигнорированы и не внесены в таблицу. Если не
указывать IGNORE, то данная операция вставки прекращается при
обнаружении строки, имеющей дублирующееся значение существующего
ключа.
Синтаксис:
UPDATE [LOW_PRIORITY] [IGNORE] имя_таблицы
SET имя_столбца1=выражение1
[, имя_столбца2=выражение2, ...]
[WHERE where_definition]
[LIMIT число]
обновляет значения существующих столбцов таблицы в
соответствии с введенными значениямиSET указывается,
какие именно столбцы следует модифицировать и какие величины должны
быть в них установлены. В выражении WHERE, если оно присутствует,
задается, какие строки подлежат обновлению. В остальных случаях
обновляются все строки. Если задано выражение ORDER BY, то строки
будут обновляться в указанном в нем порядке.
Если указывается ключевое слово LOW_PRIORITY, то выполнение данной
команды задерживается до тех пор, пока другие клиенты не
завершат чтение этой таблицы.
Если указывается ключевое слово IGNORE, то команда обновления не
будет прервана, даже если возникнет ошибка дублирования ключей.
Строки, из-за которых возникают конфликтные ситуации, обновлены не
будут.
Если в выражении, которое задает новое значение столбца, используется
имя этого поля, то команда использует для этого столбца его
текущее значение. Например, следующая команда устанавливает столбец death_date в значение, на единицу большее его текущей величины:
mysql> UPDATE Persons
SET death_date=death_date+1;
В версии LIMIT #, чтобы
убедиться, что было изменено только заданное количество строк.
Например, такая операция заменит в первой строке нашей таблицы
экспонатов название title на строку "Ламповая ЭВМ":
mysql> UPDATE Artifacts
SET title='Ламповая ЭВМ' Limit 1;
удаляет из таблицы имя_таблицы строки,
удовлетворяющие заданным в where_definition условиям, и возвращает
число удаленных записей
Если оператор запускается без определения WHERE, то удаляются
все строки.
Синтаксис:
DELETE [LOW_PRIORITY] FROM имя_таблицы
[WHERE where_definition]
[LIMIT rows]
Например, следующая команда удалит из таблицы Persons все записи, у
которых поле "год рождения" ( bday ) больше 2003:
mysql> DELETE FROM Persons WHERE bday>2003;
Удалить все записи в таблице можно еще и с помощью такой команды:
mysql> DELETE FROM Persons WHERE 1>0;
Но этот метод работает гораздо медленнее, чем использование той же команды без условия:
mysql> DELETE FROM Persons;
Специфическая для LIMIT для команды указывает
серверу максимальное количество строк, которые следует удалить до
возврата управления клиенту. Эта опция может использоваться для
гарантии того, что данная команда не потребует слишком много
времени для выполнения.
Итак, мы разобрались с основами реляционных
В данной лекции мы рассмотрим основные понятия теории
В жизни мы часто сталкиваемся с необходимостью хранить какую-либо
информацию, а потому часто имеем дело и с
В этой таблице данные – это собственно номера телефонов, адреса и ФИО., т.е. строки "Иванов Иван Иванович", "32-43-12" и т.п., а названия столбцов этой таблицы, т.е. строки "ФИО", "Номер телефона" и "Адрес" задают смысл этих данных, их семантику.
| ФИО | Номер телефона | Адрес |
|---|---|---|
| Иванов Иван Иванович | 32-43-12 | ул. Ленина, 12, 43 |
| Ильин Федор Иванович | 32-32-34 | пр. Маркса, 32, 45 |
Теперь представьте, что записей в этой таблице не две, а две тысячи,
вы занимаетесь созданием этого справочника и где-то произошла ошибка
(например, опечатка в адресе). Видимо, тяжеловато будет найти и
исправить эту ошибку вручную. Нужно воспользоваться какими-то
Для точности дадим определение
Итак, мы пришли к выводу, что хранить данные независимо от программ,
так, что они связаны между собой и организованы по определенным
правилам, целесообразно. Но вопрос, как хранить данные, по каким
правилам они должны быть организованы, остался открытым. Способов
существует множество (кстати, называются они моделями представления
или хранения данных). Наиболее популярные – объектная и
Автором реляционной модели считается Э. Кодд, который первым
предложил использовать для обработки данных аппарат теории множеств
(объединение, пересечение, разность,
Таким образом, реляционная
Примеры реляционных
В основу объектной модели положена концепция объектно-ориентированного программирования, в которой данные представляются в виде набора объектов и классов, связанных между собой родственными отношениями, а работа с объектами осуществляется с помощью скрытых (инкапсулированных) в них методов.
Примеры объектных
В последнее время производители
Поскольку мы собираемся работать с
Для начала давайте подумаем над таким вопросом: какую информацию
нужно дать о человеке, чтобы собеседник точно сказал, что это именно
тот человек, сомнений быть не может, второго такого нет? Сообщить
фамилию, очевидно, недостаточно, поскольку существуют однофамильцы.
Если собеседник человек, то мы можем приблизительно объяснить, о ком
речь, например вспомнить поступок, который совершил тот человек, или
еще как-то. Компьютер же такого объяснения не поймет, ему нужны
четкие правила, как определить, о ком идет речь. В системах
управления
Например, в нашей таблице (см. выше) ФИО и адрес позволяют однозначно
выделить запись о человеке. Если же говорить в общем, без связи с
решаемой задачей, то такие знания не позволяют точно указать на
единственного человека, поскольку существуют однофамильцы, живущие в
разных городах по одному адресу. Все дело в границах, которые мы сами
себе задаем. Если считаем, что знания ФИО, телефона и адреса без
указания города для наших целей достаточно, то все замечательно,
тогда поля ФИО и адрес могут образовывать
Кроме однозначной идентификации записи,
Например, у нас есть три таблицы: содержащая информацию об
исторических личностях (Persons), содержащая информацию об их
изобретениях (
(рис 10.1) Пример использования первичных ключей для организации связей с другими таблицами
Одна из основных задач, возникающих при работе с
Если говорить о , , и , а слово ключ ( KEY ) используется как синоним слова
индекс ( ). Все индексы хранятся в памяти в виде
– NOT
NULL ). Таблица может иметь только один первичный индекс, но он может
состоять из нескольких полей
–
– обычный индекс (как мы описали выше). В
Продолжим разговор о
В текстовом режиме работа с
(рис 10.2) Работа с MySQL в командной строке. Команда show databases — вывести все имеющиеся базы данных
(рис 10.3) Работа с MySQL в командной строке. Результат обработки команды show databasesПеред тем как переходить к детальному изучению языка , mysqld.exe и т.п. (у нас под Windows XP это c:\ ) Последний файл запускает . Здесь
даже пароля не спросят. Более того, если вы наберете
shell> mysql.exe -u root
или
shell>mysql -u root mysql
то получите все права администратора .
Для начала, не вдаваясь в подробности команд, исправим эти два недочета (отсутствие пароля у администратора и возможность входа анонимным пользователям):
shell> mysql -u root mysql
mysql> UPDATE user SET Password=PASSWORD('new_password')
WHERE user='root';
mysql> DELETE FROM user WHERE user='';
mysql> FLUSH PRIVILEGES;
Все данные о пользователях user в специальной PASSWORD, которая
кодирует введенные данные. Кроме изменения пароля администратора,
нужно еще удалить всех пользователей, не имеющих логина (команда ). Команда заставляет вступить в действие
изменения, произошедшие в системной
Теперь создадим
mysql>create database book;
Как можно заметить, все команды в
mysql> show tables
->
->
Теперь последнее действие – создадим простого пользователя,
предоставим ему доступ к созданной
mysql> GRANT ALL PRIVILEGES ON book.* TO nina@localhost
IDENTIFIED BY '123';
Команда наделяет пользователя nina, зашедшего на сервер с этой
же машины (c localhost) и идентифицируемого паролем "123",
определенными правами (в данном случае всеми) на все таблицы book. Теперь мы можем выйти и зайти как пользователь nina с
соответствующим паролем:
shell>mysql -u nina -p Enter password: *** Welcome to the MySQL monitor!... mysql>
Если вы собираетесь пользоваться
Итак, мы в общих чертах познакомились с основными понятиями теории
Первый международный стандарт языка
Следующий международный стандарт языка
Если говорить о
Далее, говоря об основах языка
Функции любой
К первым двум функциям имеют доступ только администраторы
Прежде чем что-либо делать с данными, нужно создать таблицы, в
которых эти данные будут храниться, научиться изменять структуру этих
таблиц и удалять их, если потребуется. Для этого в языке , и .
создает таблицу с заданным именем в текущей
В версии имя_базы_данных.имя_таблицы. Эта форма записи работает независимо
от того, является ли указанная
В версии . Временная таблица автоматически удаляется по
завершении соединения, а ее имя действительно только в течение
данного соединения. Это означает, что в двух разных соединениях могут
использоваться временные таблицы с одинаковыми именами без конфликта
друг с другом или с существующей таблицей с тем же именем
(существующая таблица скрыта, пока не удалена временная таблица). В
версии CREATE .
В версии IF NOT EXISTS для того, чтобы не возникала ошибка, если указанная
таблица уже существует. Следует учитывать, что при этом идентичность
структур этих таблиц не проверяется.
Каждая таблица представлена набором определенных файлов в директории
Синтаксис
CREATE [TEMPORARY] TABLE [IF NOT EXISTS]
имя_таблицы [(определение_столбца,...)]
[опции_таблицы] [select_выражение]
В выражении определение_столбца перечисляют, какие столбцы должны
быть созданы в таблице. Каждый столбец таблицы может быть пустым
( NULL ), иметь значение по умолчанию, являться ключом или
автоинкрементом. Кроме того, для каждого столбца обязательно
указывается тип данных, которые будут в нем храниться. Если не
указывается ни NULL, ни NOT NULL, то столбец интерпретируется так,
как будто указано NULL. Если поле помечают как автоинкремент
( AUTO_INCREMENT ), то его значение автоматически увеличивается на
единицу каждый раз, когда происходит добавление данных в таблицу и в
это поле записывается пустое значение ( NULL, т.е. ничего не
записывается) или 0. Автоинкремент в таблице может быть только один,
и при этом он обязательно должен быть проиндексирован.
Последовательность AUTO_INCREMENT начинается с 1. Наличие
автоинкремента является одной из особенностей
имя_столбца тип [NOT NULL | NULL]
[DEFAULT значение_по_умолчанию]
[AUTO_INCREMENT][PRIMARY KEY]
[reference_definition]
Тип столбца (тип в выражении определение_столбца) может быть одним из следующих:
INT[(length)] [UNSIGNED ] [ZEROFILL]REAL[(length,decimals)] [UNSIGNED ] [ZEROFILL]CHAR(length) [BINARY] и VARCHAR(length) [BINARY]DATE и TIMEBLOB TEXTENUM (value1,value2,value3,...) и SET(value1,value2,value3,...)Полный список типов смотрите в документации
Вместо перечисления столбцов и их свойств в определении_столбца можно
задавать списки ключевых и индексных полей, ограничения и проверки:
PRIMARY KEY (имя_индексируемого_столбца, ...)
или
KEY [имя_индекса] (имя_индексируемого_столбца,...)
или
INDEX [имя_индекса] (имя_индексируемого_столбца,...)
или
UNIQUE [INDEX] [имя_индекса]
(имя_индексируемого_столбца,...)
или
FULLTEXT [INDEX] [имя_индекса]
(имя_индексируемого_столбца,...)
или
[CONSTRAINT symbol]
FOREIGN KEY [имя_индекса]
(имя_индексируемого_столбца,...)
[reference_definition]
или
CHECK (expr)
При задании всех этих элементов указывается список полей (столбцов),
которые будут входить в индекс, ключ или ограничение, имя_индексируемого_столбца записывается следующим образом:
имя_столбца [(длина_индекса)]
, CHECK и REFERENCES на самом деле ничего не делают в
Кроме всего перечисленного, при создании таблицы можно указать некоторые ее свойства (опции_таблицы), например такие:
TYPE = {BDB | HEAP | ISAM | InnoDB | MERGE |
MRG_MYISAM | MYISAM }AUTO_INCREMENT = числоAVG_ROW_LENGTH = числоCOMMENT = "строка"MAX_ROWS =
число и MIN_ROWS = числоИ последний (опять же опциональный) элемент команды CREATE – это
выражение . Синтаксис такой:
[IGNORE | REPLACE] SELECT ...
(любое корректное выражение SELECT)
Если при создании таблицы в команде CREATE указывается выражение , то все поля, полученные выборкой, добавляются в создаваемую
таблицу.
Пример 10.1. Создадим таблицу Persons, структура
которой была приведена на рисунке 10.1.
mysql>CREATE TABLE Persons
(id INT PRIMARY KEY AUTO_INCREMENT,
first_name VARCHAR(50), last_name
VARCHAR(100), death_date INT,
description TEXT, photo INT,
citizenship CHAR(50) DEFAULT 'Russia');
С помощью специфичной для SHOW можно просмотреть
существующие
Показать все
mysql>SHOW databases;
Сделать текущей book и показать все таблицы в ней:
mysql>use book; mysql>show tables;
Показать все столбцы в таблице Persons:
mysql> show columns from Persons;
удаляет одну или несколько таблиц. Все табличные
данные и определения удаляются, так что при работе с этой командой
следует соблюдать осторожность
Синтаксис:
DROP TABLE [IF EXISTS] имя_таблицы
[, имя_таблицы,...]
[RESTRICT | CASCADE]
В версии IF EXISTS, чтобы предупредить ошибку, если указанные таблицы не
существуют.
Опции и CASCADE позволяют упростить перенос программы с
других
mysql> DROP TABLE IF EXISTS Persons,
Artifacts, test;
обеспечивает возможность изменять структуру
существующей таблицы
Синтаксис:
ALTER [IGNORE] TABLE имя_таблицы
alter_specification
[, alter_specification ...]
Можно производить следующие изменения в таблице
(все они записываются в alter_specification ):
ADD [COLUMN] определение_столбца [FIRST | AFTER имя_столбца ]
или
ADD [COLUMN] (определение_столбца,
определение_столбца,...)
Здесь, как и далее, определение_столбца записывается так же, как при создании таблицы.
ADD
или ADD
или ADD
или ADD FULLTEXT [имя_индекса] (имя_индексируемого_столбца,...)
или CHANGE [COLUMN] старое_имя_столбца определение_столбца
или MODIFY [COLUMN] определение_столбца
DROP [COLUMN] имя_столбца
DROP PRIMARY KEY
DROP INDEX имя_индекса
RENAME [TO] новое_имя_таблицы
ORDER BY поле
или
опции_таблицы
Если оператор используется для изменения определения типа столбца, но показывает, что столбец не
изменился, то, возможно, VARCHAR на CHAR VARCHAR, если данная таблица содержит другие столбцы с
переменной длиной.
Оператор во время работы создает временную копию исходной
таблицы. Требуемое изменение выполняется на копии, затем исходная
таблица удаляется, а новая переименовывается. Это делается для того,
чтобы в новую таблицу автоматически попадали все обновления, кроме
неудавшихся. Во время выполнения исходная таблица
доступна для чтения другими клиентами. Операции обновления и записи в
этой таблице приостанавливаются, пока не будет готова новая таблица.
Следует отметить, что при использовании любой другой опции для , кроме RENAME,
Пример10.3. Добавим в созданную таблицу Persons поле для записи года
рождения человека:
mysql> ALTER TABLE Persons
ADD bday INTEGER AFTER last_name;
Итак, мы научились работать с таблицами: создавать, удалять и изменять их. Теперь разберемся, как делать то же самое с данными, которые в этих таблицах хранятся.
применяется для извлечения строк, выбранных из одной
или нескольких таблиц. То есть с его помощью мы задаем столбцы или
выражения, которые надо извлечь ( select_выражения ), таблицы
( table_references ), из которых должна производиться выборка, и,
возможно, условие ( where_definition ), которому должны соответствовать
данные в этих столбцах, и порядок, в котором эти данные нужно выдать
Кроме того, оператор можно использовать для извлечения строк,
вычисленных без ссылки на какую-либо таблицу. Например, чтобы
вычислить, чему равно 2*2, нужно просто написать
mysql> SELECT 2*2;
Упрощенно структуру оператора можно представить следующим образом:
SELECT select_выражение1, select_выражение2,
...
[FROM table_references
[WHERE where_definition]
[ORDER BY {число | имя_столбца |
формула}
[ASC | DESC], ...]]
Квадратные скобки [ ] означают, что использование находящегося в них
оператора необязательно, вертикальная черта | означает перечисление
возможных вариантов. После ключевого слова ORDER BY указывают имя
столбца, число (целое беззнаковое) или формулу и способ упорядочения
(по возрастанию – , или по убыванию – ). По умолчанию
используется упорядочение по возрастанию.
Когда в select_выражении мы пишем " * ", это значит выбрать все
столбцы. Кроме " * " в select_выражения могут использоваться функции
типа max, min и .
Пример 10.4. Выбрать из таблицы Persons все данные, для которых поле first_name имеет значение 'Александр':
mysql> SELECT * FROM Persons
WHERE first_name='Александр';
Выбрать название и описание ( title, description ) артефакта под
номером 10:
mysql> SELECT title,description
FROM Artifacts WHERE id=10;
вставляет новые строки в существующую таблицуимя_таблицы во всех этих
формах задает таблицу, в которую должны быть внесены строки. Столбцы,
для которых задаются значения, указываются в списке имен столбцов
( имя_столбца ) или в части SET.
Синтаксис:
INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
[INTO] имя_таблицы [(имя_столбца,...)]
VALUES (выражение,...),(...),...
Эта форма команды вставляет строки в соответствии с точно
указанными в команде значениями. В скобках после имени таблицы
перечисляются столбцы, а после ключевого слова VALUES – их значения.
Например:
mysql> INSERT INTO Persons
(last_name, bday) VALUES
('Иванов', '1934');
вставит в таблицу Persons строку, в которой значения фамилии
( last_name ) и даты рождения ( bday ) будут заданы соответственно как
"Иванов" и "1934".
INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
[INTO] имя_таблицы [(имя_столбца,...)]
SELECT ...
Эта форма команды вставляет строки, выбранные из другой таблицы или таблиц.
Например:
mysql> INSERT INTO Artifacts (author)
SELECT id FROM Persons
WHERE last_name='Иванов'
AND bday='1934';
вставит в таблицу в поле "автор" ( author ) значение
идентификатора, выбранного из таблицы Persons по условию, что фамилия человека Иванов и год рождения 1934.
INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
[INTO] имя_таблицы
SET имя_столбца=выражение,
имя_столбца=выражение, ...
Например:
mysql> INSERT INTO Persons
SET last_name='Петров',
first_name='Иван';
Эта команда вставит в таблицу Persons в поле last_name значение
"Петров", а в поле first_name – строку "Иван".
Форма со списком из нескольких значений
поддерживается в версии имя_столбца=выражение поддерживается в версии
Действуют следующие соглашения.
INSERT. .. VALUES или INSERT. .. SELECT , то величины для всех столбцов должны быть определены в списке VALUES() или в результате работы SELECT . Если порядок столбцов в
таблице неизвестен, для его получения можно использовать DESCRIBE
имя_таблицы.expression может относиться к любому столбцу, который
ранее был внесен в список значений. Например, можно указать
следующее:mysql> INSERT INTO имя_таблицы (col1,col2)
VALUES(15,col1*2);
Но нельзя указать:
mysql> INSERT INTO имя_таблицы (col1,col2)
VALUES(col2*2,15);
Мы еще не обсудили три необязательных параметра, присутствующих во
всех трех формах команды: LOW_PRIORITY, и IGNORE.
Параметры LOW_PRIORITY и используются, когда с таблицей
работает большое число пользователей. Они предписывают устанавливать
приоритет данной операции перед операциями других пользователей. Если
указывается ключевое слово LOW_PRIORITY, то выполнение данной команды будет задержано до тех пор, пока другие клиенты не завершат
чтение этой таблицы. В этом случае клиент должен ожидать, пока данная
команда вставки не будет завершена, что в случае интенсивного
использования таблицы может потребовать значительного времени. В
противоположность этому команда позволяет данному
клиенту продолжать операцию сразу же, независимо от других
пользователей.
Если в команде указывается ключевое слово IGNORE, то все
строки, имеющие дублирующиеся ключи или в этой
таблице, будут проигнорированы и не внесены в таблицу. Если не
указывать IGNORE, то данная операция вставки прекращается при
обнаружении строки, имеющей дублирующееся значение существующего
ключа.
Синтаксис:
UPDATE [LOW_PRIORITY] [IGNORE] имя_таблицы
SET имя_столбца1=выражение1
[, имя_столбца2=выражение2, ...]
[WHERE where_definition]
[LIMIT число]
обновляет значения существующих столбцов таблицы в
соответствии с введенными значениямиSET указывается,
какие именно столбцы следует модифицировать и какие величины должны
быть в них установлены. В выражении WHERE, если оно присутствует,
задается, какие строки подлежат обновлению. В остальных случаях
обновляются все строки. Если задано выражение ORDER BY, то строки
будут обновляться в указанном в нем порядке.
Если указывается ключевое слово LOW_PRIORITY, то выполнение данной
команды задерживается до тех пор, пока другие клиенты не
завершат чтение этой таблицы.
Если указывается ключевое слово IGNORE, то команда обновления не
будет прервана, даже если возникнет ошибка дублирования ключей.
Строки, из-за которых возникают конфликтные ситуации, обновлены не
будут.
Если в выражении, которое задает новое значение столбца, используется
имя этого поля, то команда использует для этого столбца его
текущее значение. Например, следующая команда устанавливает столбец death_date в значение, на единицу большее его текущей величины:
mysql> UPDATE Persons
SET death_date=death_date+1;
В версии LIMIT #, чтобы
убедиться, что было изменено только заданное количество строк.
Например, такая операция заменит в первой строке нашей таблицы
экспонатов название title на строку "Ламповая ЭВМ":
mysql> UPDATE Artifacts
SET title='Ламповая ЭВМ' Limit 1;
удаляет из таблицы имя_таблицы строки,
удовлетворяющие заданным в where_definition условиям, и возвращает
число удаленных записей
Если оператор запускается без определения WHERE, то удаляются
все строки.
Синтаксис:
DELETE [LOW_PRIORITY] FROM имя_таблицы
[WHERE where_definition]
[LIMIT rows]
Например, следующая команда удалит из таблицы Persons все записи, у
которых поле "год рождения" ( bday ) больше 2003:
mysql> DELETE FROM Persons WHERE bday>2003;
Удалить все записи в таблице можно еще и с помощью такой команды:
mysql> DELETE FROM Persons WHERE 1>0;
Но этот метод работает гораздо медленнее, чем использование той же команды без условия:
mysql> DELETE FROM Persons;
Специфическая для LIMIT для команды указывает
серверу максимальное количество строк, которые следует удалить до
возврата управления клиенту. Эта опция может использоваться для
гарантии того, что данная команда не потребует слишком много
времени для выполнения.
Итак, мы разобрались с основами реляционных
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.