MySQL: установка, настройка, описание - Операторы SQL
ОГЛАВЛЕНИЕ
Страница 13 из 16
Операторы SQL
- операции над базами данных
- CREATE DATABASE [IF NOT EXISTS] db_name
- DROP DATABASE [IF EXISTS] db_name
- операции над таблицами
- CREATE [TEMPORARY] TABLE [IF NOT EXISTS] имя-таблицы [(описание-колонки,...)] [опции] [[IGNORE | REPLACE] SELECT ...]
- описание-колонки
- имя-колонки тип [NOT NULL | NULL] [DEFAULT значение-по-умолчанию] [AUTO_INCREMENT] [PRIMARY KEY] [описание-ссылки]
NULL: по умолчанию
AUTO_INCREMENT: для колонки типа целое число, при вставке NULL или 0 в такую колонку ищется максимальное значение колонки и увеличивается на единицу; отсчет начинается с 1; при удалении строки с наибольшим значением бывает всякое ;); такая колонка м.б. только одна и она д.б. проиндексирована; не надо записывать в такую колонку отрицательных чисел; получить наибольшее число можно с помощью оператора: SELECT * FROM имя-таблицы WHERE имя-колонки IS NULL
DEFAULT: назначается системой (NULL, 0, пустая строка и т.д.), если Вы не установили явно
SELECT позволяет создать новую таблицу на основе уже существующей - PRIMARY KEY (имя-колонки[(длина)],...)
уникальный ключ; все ключевые колонки д.б. NOT NULL; только один на таблицу (присваивается имя PRIMARY) - {KEY | INDEX} [имя-индекса] (имя-колонки[(длина)],...)
- UNIQUE [INDEX] [имя-индекса] (имя-колонки[(длина)],...)
- FULLTEXT [INDEX] [имя-индекса] (имя-колонки[(длина)],...)
- [CONSTRAINT символ] FOREIGN KEY имя-индекса (имя-колонки[(длина)],...) [описание-ссылки]
не реализовано - CHECK (выражение)
не реализовано
- имя-колонки тип [NOT NULL | NULL] [DEFAULT значение-по-умолчанию] [AUTO_INCREMENT] [PRIMARY KEY] [описание-ссылки]
- описание-ссылки ::= REFERENCES имя-таблицы [(имя-колонки[(длина)],...)] [MATCH FULL | MATCH PARTIAL] [ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}] [ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]
не реализовано - опции
- TYPE = {BDB | HEAP | ISAM | InnoDB | MERGE | MYISAM } (см, типы таблиц)
- AUTO_INCREMENT = начальное-значение
- AVG_ROW_LENGTH = число
- CHECKSUM = {0 | 1}
- COMMENT = "строка-до-60-символов"
- MAX_ROWS = число
- MIN_ROWS = число
- PACK_KEYS = {0 | 1}
чтение происходит быстрее, а изменение - медленнее - PASSWORD = "пароль"
шифруется описание таблицы (в бесплатной версии не работает) - DELAY_KEY_WRITE = {0 | 1}
- ROW_FORMAT= { default | dynamic | fixed | compressed }
не реализовано - RAID_TYPE= {1 | STRIPED | RAID0 } RAID_CHUNKS=число-расслоений RAID_CHUNKSIZE=числоKB
требуется ключ --with-raid при сборке; пока реализован только тип STRIPED (1 и RAID0 - это синонимы для STRIPED); позволяет создавать таблицы с данными более 2GB (или распараллелить ввод/вывод, если разнести директории на разные диски) - UNION = (имя-таблицы,[имя-таблицы...])
только для таблиц типа MERGE
- описание-колонки
- ALTER [IGNORE] TABLE имя-таблицы как-менять [,как-менять ...]
- ADD [COLUMN] описание-колонки [FIRST | AFTER имя-колонки ]
без FIRST или AFTER колонка вставляется в конец - ADD [COLUMN] (описание-колонки, описание-колонки, ...)
- ADD INDEX [имя-индекса] (имя-колонки[(длина)],...)
- ADD PRIMARY KEY (имя-колонки[(длина)],...)
- ADD UNIQUE [имя-индекса] (имя-колонки[(длина)],...)
- ADD FULLTEXT [имя-индекса] (имя-колонки[(длина)],...)
- ALTER [COLUMN] имя-колонки {SET DEFAULT константа | DROP DEFAULT}
- CHANGE [COLUMN] имя-существующей-колонки описание-колонки
- MODIFY [COLUMN] описание-колонки
- DROP [COLUMN] имя-колонки
- DROP PRIMARY KEY
- DROP INDEX имя-индекса
- RENAME [TO] новое-имя-таблицы
- ORDER BY имя-колонки
- опции таблицы
IGNORE: если в преобразованной таблице образуются одинаковые значения UNIQUE индексов, то берется только одна строка (без IGNORE операция откатывается)
нельзя сделать размер колонки короче, чем используется в каком-либо индексе - ADD [COLUMN] описание-колонки [FIRST | AFTER имя-колонки ]
- RENAME TABLE tbl_name TO new_table_name[, tbl_name2 TO new_table_name2,...]
оператор выполняется как единое целое, что позволяет подменить таблицу пустой:CREATE TABLE new_table (...); RENAME TABLE old_table TO backup_table, new_table TO old_table;
- DROP TABLE [IF EXISTS] имя-таблицы [, имя-таблицы,...] [RESTRICT | CASCADE]
RESTRICT и CASCADE не реализованы
- CREATE [TEMPORARY] TABLE [IF NOT EXISTS] имя-таблицы [(описание-колонки,...)] [опции] [[IGNORE | REPLACE] SELECT ...]
- обслуживание таблиц
- OPTIMIZE TABLE имя-таблицы [, имя-таблицы,...]
полезно после больших удалений или изменений таблиц с переменной длиной строки: сортировка индексов и дефрагментация - CHECK TABLE имя-таблицы [, имя-таблицы,...] {QUICK | FAST | MEDIUM | EXTEND | CHANGED}
- BACKUP TABLE имя-таблицы [, имя-таблицы,...] TO 'имя-директории'
- RESTORE TABLE имя-таблицы [, имя-таблицы,...] FROM 'имя-директории'
- ANALYZE TABLE имя-таблицы [, имя-таблицы,...]
пересчет распределения ключей - REPAIR TABLE имя-таблицы [, имя-таблицы,...] [QUICK] [EXTENDED]
- OPTIMIZE TABLE имя-таблицы [, имя-таблицы,...]
- операции над строками
- DELETE [LOW_PRIORITY] FROM имя-таблицы [WHERE выражение] [LIMIT макс-число-строк]
место не освобождается - используйте OPTIMIZE - TRUNCATE TABLE имя-таблицы
удаляет таблицу и тут же создает заново - SELECT [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT] [HIGH_PRIORITY] [DISTINCT | DISTINCTROW | ALL]
выражение [AS имя-алиаса],...
[INTO {OUTFILE | DUMPFILE} 'имя-файла' опции-экспорта
[FROM из-каких-таблиц
[WHERE выражение]
[GROUP BY {номер-колонки | имя-колонки | формула} [ASC | DESC], ...]
[HAVING выражение]
[ORDER BY {номер-колонки | имя-колонки | формула} [ASC | DESC], ...]
[LIMIT [смещение-от-0,] макс-число-строк]
[PROCEDURE имя-процедуры]
[FOR UPDATE | LOCK IN SHARE MODE]]
FROM - простейший случай синтаксиса - имя-таблицы, если таблиц несколько, то смотри синтаксис JOIN (в простейшем случае имена перечисляются через запятую); также можно задавать алиас таблицы с помощью слова AS
HAVING применяется последним (в частности, после GROUP BY) непосредственно перед посылкой результата клиенту (т.е. без оптимизации!)
DUMPFILE: в файл записывается одна строка безо всяких разделителей полей и строк и escape (позволяет, например, сбросить картинку из BLOB)
OUTFILE и DUMPFILE: необходимо иметь привилегии file, если файл с указанным именем существовал, то он не затирается; права к файлу устанавливаются на чтение для всех
FOR UPDATE: если тип таблицы позволяет блокировку страницы/строки (InnoDB, GEMINI), то задействованные строки блокируются на запись - синтаксис JOIN (только не надо вопросов ко мне, задавайте их этим фантазерам :)
- таблица::= имя-таблицы [[AS] алиас] [USE INDEX (список-ключей)] [IGNORE INDEX (список-ключей)]
- таблица, таблица
это синоним INNER JOIN - таблица [CROSS] JOIN таблица
- таблица INNER JOIN таблица {ON условное-выражение | USING (список-колонок)}
- таблица STRAIGHT_JOIN таблица
- таблица LEFT [OUTER] JOIN [ON условное-выражение | USING (список-колонок)]
- таблица NATURAL [LEFT [OUTER]] JOIN таблица
- таблица LEFT OUTER JOIN таблица ON условное-выражение
- таблица RIGHT [OUTER] JOIN [ON условное-выражение | USING (список-колонок)]
- таблица NATURAL [RIGHT [OUTER]] JOIN таблица
- INSERT
- LOAD FILE
- DELETE [LOW_PRIORITY] FROM имя-таблицы [WHERE выражение] [LIMIT макс-число-строк]