MySQL: установка, настройка, описание - Операторы SQL

ОГЛАВЛЕНИЕ


Операторы 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 (выражение)
          не реализовано
      • описание-ссылки ::= 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 имя-колонки
      • опции таблицы
      делается временная копия таблицы, изменяется, затем старая таблица удаляется (соответственно, нужны привилегии: select, insert, delete, update, create и drop)
      IGNORE: если в преобразованной таблице образуются одинаковые значения UNIQUE индексов, то берется только одна строка (без IGNORE операция откатывается)
      нельзя сделать размер колонки короче, чем используется в каком-либо индексе
    • 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 не реализованы
  • обслуживание таблиц
    • OPTIMIZE TABLE имя-таблицы [, имя-таблицы,...]
      полезно после больших удалений или изменений таблиц с переменной длиной строки: сортировка индексов и дефрагментация
    • CHECK TABLE имя-таблицы [, имя-таблицы,...] {QUICK | FAST | MEDIUM | EXTEND | CHANGED}
    • BACKUP TABLE имя-таблицы [, имя-таблицы,...] TO 'имя-директории'
    • RESTORE TABLE имя-таблицы [, имя-таблицы,...] FROM 'имя-директории'
    • ANALYZE TABLE имя-таблицы [, имя-таблицы,...]
      пересчет распределения ключей
    • REPAIR TABLE имя-таблицы [, имя-таблицы,...] [QUICK] [EXTENDED]
  • операции над строками
    • 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