- •Типы данных столбцов
- •Пример:
- •То автоматически генерируется уникальный id (то же, если поле id вообще не указывать в команде вставки).
- •Обычно, следует выполнять select для set-столбца, используя оператор like или функцию find_in_set():
- •Но и такая форма также работает:
- •'Yyyy-mm-dd',yy-mm-dd' Например '98-12-31', "98.12.31', '98/12/31'
- •Describe messy # Описать таблицу 'messy'
- •Например, drop table people, animals, plants удалит эти три таблицы. Drop table oh_no, help_me, dont_do_it # Удалить таблицы 'oh_no', 'help_me' и 'dont_do_it'
- •Например, можно указать следующее:
- •Но нельзя указать:
- •Например:
- •Быстрая загрузка данных
- •Синтаксис оператора truncate
- •Примеры:
- •(Например, select name from people; select mydata.People.Name from people ).
- •Подзапросы -- Язык sql разрешает использовать в других операторах языка dml подзапросы, которые являются внутренними запросами, определяемыми оператором select.
- •Применение подзапросов в операторах изменения данных
- •Демонстрируется использование mysql в качестве несложного калькулятора:
- •Проверка таблицы при помощи команды describe:
- •Выборка всех данных
- •Выборка определенных строк. Выборка с условием Из таблицы можно выбрать и только нужные строки, если надо проверить правильность внесенных в дату рождения собаки Bowser изменений:
- •В условиях может указываться любой из столбцов:
- •Условия можно и комбинировать, например для того, чтобы выделить всех собак женского пола:
- •В предыдущем запросе использован оператор and. Существует еще и оператор or:
- •Операторы and и or можно использовать совместно.
- •Выборка определенных столбцов Достаточно просто перечислить имена нужных столбцов, разделив их запятыми.
- •Получить имена владельцев животных можно с помощью следующего запроса:
- •Сократить количество выводимых строк можно, воспользовавшись ключевым словом distinct - тогда будут выводиться только уникальные записи:
- •При помощи выражения where можно комбинировать выбор строк и столбцов. Например для того, чтобы загрузить даты рождения только кошек и собак, можно воспользоваться следующим запросом:
- •Сортировка строк Для этого используется выражение order by.
- •Предположим, нужно узнать, в каком возрасте животные давали приплод:
- •В этом запросе мы указываем псевдонимы имен таблицы, для обращения к столбцам и определения, к какой из таблиц относится каждая ссылка на столбец.
- •Сортировку можно проводить по нескольким столбцам сразу.
- •Отсортировать результаты по возрасту также можно при помощи выражения order by:
- •Этот запрос подсчитывает, сколько различных дней входит в данную комбинацию год/месяц, автоматически исключая дублирующиеся значения.
Примеры:
INSERT INTO people ( name, rank, serial_number ) VALUES ( 'Bob Smith', 'Captain', 12345 );
INSERT INTO addresses (name, address, city, state, phone, age)
VALUES( 'Irving Forbush', ' 123 Mockingbird Lane', 'Corbin', 'KY', '(800) 555-1234', 26)
INSERT INTO foods VALUES (NULL, 'Oranges', 133, 0, 2, 39),(HULL, 'Bananas', 122, 0, 4, 29), (NULL, 'Liver', 232, 3, 15, 10)
# Ввести данные в каталог Stacie's Directory, который находится в c:\Personal\Stacie, управляющий символ - по умолчанию '\' — позволяет вводить в литералы одиночные кавычки и сам символ '\':
INSERT INTO files (description, location)
VALUES ('Stacie\'s Directory', 'C: \\Personal\\Stacie')
# Скопировать все записи, которые старше определенной даты, из таблицы 'data' в таблицу 'old_data'. Обычно за этим следует удаление старых записей из 'data'.
INSERT INTO foods (name, fat) SELECT food_name, fat_grams FROM recipes
INSERT INTO old_data (id, date, field ) SELECT ( id, date, field) FROM data WHERE date < 87459300;
UPDATE persondata SET age=age*2, age=age+1;
UPDATE Widget_Table SET widgets_on_hand=widgets_on_hand - 300 WHERE widget_id=3;
UPDATE people SET name='John Doe' WHERE name='John Deo'
#Можно выполнять UPDATE, охватывающий множество таблиц:
UPDATE items,month SET items.price=month.price WHERE items.id=month.id;
#Пример использования поля типа AUTO_NCREMENT :
CREATE TABLE cities (id INT NOT NULL PRIMARY KEY AUTO_INCREMENT
name VARCHAR(100),pop MEDIUMINT,founded DATE)
INSERT INTO cities (id, name, pop) VALUES (NULL, 'Houston', 3000000)
#Другим способом реализации последовательностей является использование значения, возвращаемого функцией LAST_INSERT_ID :
UPDATE table SET id=LAST_INSERT_ID (id+1);
# Загрузить данные из файла 'mydata.txt' в таблицу 'mydata'. Считается, что поля отделены табуляцией и не заключены в кавычки.
LOAD DATA INFILE 'mydata.txf INTO TABLE mydata
LOAD DATA INFILE 'newdata.txt' INTO TABLE newtable FIELDS TERMINATED BY( field"!, -field2 )
DROP TABLE oh_no, help_me, dont_do_it # Удалить таблицы 'oh_no', 'help_me' и 'dont_do_it'
REPLACE INTO people ( name, rank, senal_number ) VALUES ( 'Bob Smith', 'Captain', 12345 )
# Скопировать все записи, которые старше определенной даты, из таблицы 'data' в таблицу 'old_data'.
REPLACE INTO old_data ( id, date, field ) SELECT ( id, date, field) FROM data WHERE date < 87459300
# Удалить все данные из таблицы 'olddata 1 (но не саму таблицу).
DELETE FROM olddata
# Удалить все записи из таблицы 'sales', где поле 'year' равно '1995'.
DELETE FROM sales WHERE year=1995
Тема: Работа в пакетном режиме.
Использование mysql в пакетном режиме
Запускать mysql можно и в пакетном режиме. Для этого нужно собрать все команды в один файл и передать его на исполнение mysql:
mysql < batch-file
При работаете с mysql в ОС Windows, можно воспользоваться следующей командой:
> mysql source batch-file
Если необходимо указать параметры соединения в командной строке, она может иметь следующий вид:
> mysql -h host -u user -p < batch-file
Enter password: ********
Работая с mysql таким образом, в сущности, создается сценарий и затем он исполняется.
Выводимые запросом результаты можно сохранить в файле для последующей обработки:
shell> mysql < batch-file > mysql.out
Если нужно продолжать обработку сценария даже при обнаружении в нем ошибок, надо использовать параметр командной строки --force.
По умолчанию при работе с mysql в пакетном режиме используется более сжатый формат вывода результатов, чем при интерактивной работе.
Если нужно, чтобы в пакетном режиме программа выводила данные так же, как и в интерактивном, надо использовать ключ mysql -t. Включить "эхо" исполняемых команд можно с помощью ключа mysql -vvv.
В командную строку mysql можно включать и сценарии - при помощи команды source:
mysql> source filename;
Зачем нужны сценарии? Причин тому несколько:
при необходимости частого (ежедневного или хотя бы еженедельного) запуска одного и того же запроса сценарий позволяет избавиться от многократного набора этого запроса;
можно создавать новые запросы, подобные уже существующим, просто копируя и затем изменяя файлы сценариев;
пакетный режим может пригодиться и при разработке особенно длинных запросов, а именно - многострочных команд или больших последовательностей команд;
Тема: Создание запросов.
Формирование запросов средствами языка SQL:
SELECT [STRAIGHT_JOIN] [DISTINCT | ALL] <список выражений>
[INTO {OUTFILE | DUMPFILE} 'file_name' delimiters ]
[FROM table_references
[WHERE where_definition]
[GROUP BY column,...]
[ORDER BY column{unsigned_integer | col_name | formula} [ASC | DESC], ...]
[HAVING full_where_definition]
[FOR UPDATE | LOCK IN SHARE MODE]]
[LIMIT [ start, ] rows ]
При указании ключевых слов следует точно соблюдать порядок, указанный выше. Например, выражение HAVING должно располагаться после всех выражений GROUP BY и перед всеми выражениями ORDER BY.
Оператор SELECT позволяет формировать запрос к базе данных. В результате выполнения этого оператора СУБД формирует результирующий набор. Если этот оператор был введен в интерактивном режиме взаимодействия с базой данных, то результат отображается в виде таблицы в текущем диалоговом окне. Если оператор SELECT выполняется из приложения на другом языке программирования, то формируется результирующий набор, размещаемый в памяти приложения или сервера БД, а затем приложение извлекает данные из результирующего набора в свои переменные.
Для выполнения запроса требуется привилегия SELECT на все таблицы, участвующие в запросе.
<список выражений> это одна из следующих конструкций:
[таблица.]столбец | (выражение) | константа | переменная| SQL_функция | системная_переменная
Синтаксис выражений имеет вид
( {[ [+] | - ] {значение | функция_СУБД} [ + | - | * | ** ]}... )
а синтаксис SQL_функций – одна из следующих конструкций:
{SUM|AVG|MIN|MAX|COUNT} ( [[ALL]|DISTINCT][таблица.]столбец )
{SUM|AVG|MIN|MAX|COUNT} ( [ALL] выражение )
COUNT(*)