Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
РУБД - Теория по SQL .doc
Скачиваний:
4
Добавлен:
27.08.2019
Размер:
691.71 Кб
Скачать

Например, drop table people, animals, plants удалит эти три таблицы. Drop table oh_no, help_me, dont_do_it # Удалить таблицы 'oh_no', 'help_me' и 'dont_do_it'

DROP ФУНКЦИЯ name Удаляет функцию из системы MySQL. .

DROP INDEX Команда поддерживается для совместимости с другими реализациями SQL. Для выполнения DROP INDEX надо иметь право SELECT, INSERT, DELETE, UPDATE, CREATE и DROP для этой таблицы.

Тема: Команды заполнение таблиц.

INSERT [LOW_PRIORITY | DELAYED] [IGNORE]

[INTO] tbl_name [(col_name,...)]

VALUES (expression,...),(...),...

[ ON DUPLICATE KEY UPDATE col_name=expression, ... ]

или INSERT [LOW_PRIORITY | DELAYED] [IGNORE]

[INTO] tbl_name [(col_name,...)]

SELECT ...

или INSERT [LOW_PRIORITY | DELAYED] [IGNORE]

[INTO] tbl_name

SET col_name=(expression | DEFAULT), ...

[ ON DUPLICATE KEY UPDATE col_name=expression, ... ]

Оператор INSERT вставляет новые строки в существующую таблицу.

INSERT ... VALUES вставляет строки в соответствии с указанными в команде значениями.

INSERT ... SELECT вставляет строки, выбранные из другой таблицы или таблиц.

tbl_name задает таблицу, в которую должны быть внесены строки. Столбцы, для которых заданы величины в команде, указываются в списке имен столбцов или в части SET.

Если не указан список столбцов, то величины для всех столбцов должны быть определены в списке VALUES() или в результате работы SELECT. Любой столбец, для которого явно не указано значение, будет установлен в свое значение по умолчанию, при использовании ключевого слова DEFAULT.

Выражение expression может относится к любому столбцу, который ранее был внесен в список значений.

Например, можно указать следующее:

INSERT INTO tbl_name (col1,col2) VALUES(15,col1*2);

Но нельзя указать:

INSERT INTO tbl_name (col1,col2) VALUES(col2*2,15);

LOW_PRIORITY выполнение данной команды INSERT будет задержано до тех пор, пока другие клиенты не завершат чтение этой таблицы.

INSERT DELAYED позволяет данному клиенту продолжать операцию сразу же.

IGNORE все строки, имеющие дублирующиеся ключи PRIMARY или UNIQUE в этой таблице, будут проигнорированы, не будут внесены. Если не указывать IGNORE, то данная операция вставки прекращается при обнаружении строки, имеющей дублирующееся значение существующего ключа.

ON DUPLICATE KEY UPDATE производить вставку строки, которая вызывает ошибку дублирующегося первичного (PRIMARY) или уникального (UNIQUE) ключа, то выполняется UPDATE старой строки (замещение).

Например:

INSERT INTO table (a,b,c) VALUES (1,2,3) --> ON DUPLICATE KEY UPDATE c=c+1;

Если a определяется как UNIQUE и уже содержит 1, то тогда вышеуказанная команда будет аналогична следующей: UPDATE table SET c=c+1 WHERE a=1;

Внимание: если столбец b также является уникальным ключом, то UPDATE переписывается как:

UPDATE table SET c=c+1 WHERE a=1 OR b=2 LIMIT 1;

и если несколько записей соответствуют a=1 OR b=2 только одна запись будет обновлена! В общем случае, следует избегать использования ON DUPLICATE KEY на таблицах с множеством уникальных (UNIQUE) ключей.

Когда используется ON DUPLICATE KEY UPDATE, опция DELAYED будет проигнорирована.

Records: 100 Duplicates: 0 Warnings: 0

Duplicates показывает число строк, которые не могли быть внесены, поскольку они дублировали бы значения некоторых существующих уникальных индексов. Указатель Warnings показывает число попыток внести величину в столбец, который по какой-либо причине оказался проблематичным.

Предупреждения возникают при выполнении любого из следующих условий:

  1. Внесение NULL в столбец, который был объявлен, как NOT NULL. Данный столбец устанавливается в значение, заданное по умолчанию.

  2. Установка числового столбца в значение, лежащее за пределами его допустимого диапазона. Данная величина усекается до соответствующей конечной точки этого диапазона.

  3. Занесение в числовой столбец такой величины, как '10.34 a'. Конечные данные удаляются и вносится только оставшаяся числовая часть. Если величина вовсе не имеет смысла как число, то столбец устанавливается в 0.

  4. Внесение в столбцы типа CHAR, VARCHAR, TEXT или BLOB строки, превосходящей максимальную длину столбца. Данная величина усекается до максимальной длины столбца.

  5. Внесение в столбец даты или времени строки, недопустимой для данного типа столбца. Этот столбец устанавливается в нулевую величину, соответствующую данному типу.

  6. При использовании SELECT нельзя указать ORDER BY.

  7. Если надо вставить NULL в данное значение, можно сделать это, не определяя значение для поля, в которое надо вставить NULL.

Для команды INSERT ... SELECT необходимо соблюдение следующих условий:

Целевая таблица команды INSERT не должна появляться в утверждении FROM части SELECT данного запроса, поскольку запрещено производить выборку из той же таблицы, в которую производится вставка.

REPLACE [LOW_PRIORITY | DELAYED]

[INTO] tbl_name [(col_name,...)]

VALUES (expression,...),(...),...

или REPLACE [LOW_PRIORITY | DELAYED]

[INTO] tbl_name [(col_name,...)]

SELECT ...

или REPLACE [LOW_PRIORITY | DELAYED]

[INTO] tbl_name

SET col_name=expression, col_name=expression,...

Оператор REPLACE работает точно так же, как INSERT, за исключением того, что если старая запись в данной таблице имеет то же значение индекса UNIQUE или PRIMARY KEY, что и новая, то старая запись перед занесением новой будет удалена. Другими словами, команда REPLACE не предоставляет доступа к замещаемой записи..

Для использования REPLACE должны быть привилегии INSERT и DELETE для таблицы.

Следует учитывать, что, если не используются индексы UNIQUE или PRIMARY KEY, то применение команды REPLACE не имеет смысла, так как она работает просто как INSERT.

UPDATE [LOW_PRIORITY] [IGNORE] tbl_name

SET col_name1=expr1 [, col_name2=expr2 ...]

[WHERE where_definition]

[ORDER BY ...]

[LIMIT rows]

или

UPDATE [LOW_PRIORITY] [IGNORE] tbl_name [, tbl_name ...]

SET col_name1=expr1 [, col_name2=expr2 ...]

[WHERE where_definition]

Здесь where_definition:

where_definition:

where_expr or where_expr [AND | OR] where_expr

Здесь where where_expr имеет формат:

where_expr:

column_name [> | >= | = | <> | <= | < ]

column_name_or_constant or

column_name LIKE column_name_or_constant or

column_name IS NULL or column_name IS NOT NULL or (where_definition)

Нада иметь права доступа update для использования этой команды.

Оператор UPDATE обновляет столбцы в соответствии с их новыми значениями в строках существующей таблицы. В выражении SET указывается, какие именно столбцы следует модифицировать и какие величины должны быть в них установлены. В выражении WHERE, если оно присутствует, задается, какие строки подлежат обновлению. В остальных случаях обновляются все строки. Если задано выражение ORDER BY, то строки будут обновляться в указанном в нем порядке. Все обновления выполняются слева направо.

Внутри UPDATE на одной таблице все операции атомарные. Например, можно увеличивать счетчик внутри таблицы, просто прибавляя 1 к соответствующей переменной.

UPDATE persondata SET age=age+1;

LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name.txt'

[REPLACE | IGNORE]

INTO TABLE tbl_name

[FIELDS

[TERMINATED BY '\t']

[[OPTIONALLY] ENCLOSED BY '']

[ESCAPED BY '\\' ] ]

[LINES TERMINATED BY '\n']

[IGNORE number LINES]

[(col_name,...)]

Команда LOAD DATA INFILE читает строки из текстового файла и вставляет их в таблицу с очень высокой скоростью. Если задано ключевое слово LOCAL, то файл читается с клиентского хоста. Если же LOCAL не указывается, то файл должен находиться на сервере.

В случаях, когда файлы находятся на сервере, последний действует по следующим правилам:

  • если задан абсолютный (полный) путь к файлу, то сервер использует этот путь без изменений.

  • если задан относительный путь к файлу с указанием одного или более начальных каталогов, то поиск файла будет осуществляться относительно указанных каталогов в каталоге данных сервера (datadir).

  • если дается путь к файлу без указания начальных каталогов, то сервер ищет этот файл в директории используемой базы данных.

LOW_PRIORITY выполнение данной команды LOAD DATA будет задержано до тех пор, пока другие клиенты не завершат чтение этой таблицы.

CONCURRENT при работе с таблицами MyISAM, другие потоки могут извлекать данные из таблицы во время выполнения команды LOAD DATA. Использование этой возможности, конечно, будет немного влиять на производительность выполнения LOAD DATA, даже если никакой другой поток не использует данную таблицу в это же время.

REPLACE и IGNORE управляют обработкой входных записей, которые дублируют существующие записи с теми же величинами уникальных ключей. Если указать REPLACE, то новые строки заменят существующие с таким же уникальным ключом. Если указать IGNORE, то входные строки, имеющие тот же уникальный ключ, что и существующие, будут пропускаться. Если не указан ни один из параметров, то при обнаружении дублирующегося значения ключа возникает ошибка и оставшаяся часть текстового файла игнорируется.

Если данные загружаются из локального файла с использованием ключевого слова LOCAL, то сервер не сможет прервать передачу данных посреди этой операции, поэтому по умолчанию выполнение команды происходит так же, как и в случае, когда указывается IGNORE.

Команда LOAD DATA INFILE является дополнительной к SELECT ... INTO OUTFILE. Чтобы записать данные из базы данных в файл, используется SELECT ... INTO OUTFILE. Чтобы прочитать данные обратно в базу данных, используется LOAD DATA INFILE.

Синтаксис FIELDS и LINES одинаков в обеих командах. Обе части являются необязательными, но если указаны оба, то FIELDS должно предшествовать LINES.

Если указывается FIELDS, то каждое из его подвыражений (TERMINATED BY, [OPTIONALLY] ENCLOSED BY, и ESCAPED BY) также является необязательным, однако необходимо указать по меньшей мере одно из них.

Без указанных разделителей оператор LOAD DATA INFILE будет считать, что текстовые поля в файле разделены символом табуляции, особые символы набраны через обратную косую черту (так называемый бэкслэш - «\»), и строки заканчиваются символом конца строки.

Также можно указать собственные разделители с помощью следующих ключевых слов:

FIELDS TERMINATED BY 'с' Определяет символ, используемый для разделения полей. Чтобы указать специальные символы, можно использовать стандартные управляющие коды языка С. Значение может содержать более одного символа. Например, FIELDS TERMINATED BY ', ' означает файл, разделенный запятыми, a FIELDS TERMINATED BY '\t' обозначает разделения табуляцией. Разделение табуляцией является значением по умолчанию.

FIELDS ENCLOSED BY 'с' Определяет символ для объединения символьной строки. Например, FIELD ENCLOSED BY '' будет означать, что строка, содержащая "this, value", "this", "value" , будет записана в базу как три поля: "this,value", "this", и "value". По умолчанию считается, что в файле не используются кавычки.

FIELDS ESCAPED BY 'с' Определяет символ, указывающий на то, что символ, следующий за ним, является простым, даже если обычно он считался бы управляющим. Например, FIELDS ESCAPED BY ' приведет к тому, что строка "First, Second",Third, Fourth" будет прочитана как три поля: "First", "Second,Third" и "Fourth" . Исключением являются символы нуля. Например, если FIELDS ESCAPED BY имеет значение обратной косой черты, то \0 указывает на ASCII NULL (символ с номером 0), и \N указывает на значение null в MySQL. Символ обратной косой черты является значением по умолчанию для этого параметра. Обратите внимание, что MySQL рассматривает его как спецсимвол. И если вам необходимо использовать его в этом выражении, следует отделить его еще одной обратной косой чертой: FIELDS ESCAPED BY '\\' .

LINES TERMINATED BY 'с' Определяет символ для указания на начало новой строки. Значением могут быть несколько символов. Например, при LINES TERMINATED BY '.', файл, состоящий из а, b, с. d, e, f. g, h, k. , будет прочитан как три отдельные записи, с тремя полями в каждой. По умолчанию используется символ новой строки. Это означает, что по умолчанию MySQL считает каждую строку отдельной записью.

Ключевое слово FIELDS следует использовать только для всего выражения. Например:

LOAD DATA INFILE data.txt FIELDS TERMINATED BY ','ESCAPED BY '\\'.

Если задан список столбцов, данные будут записаны именно в эти поля. Если столбцы не указаны, число полей в файле с данными должно совпадать с числом полей в таблице, и они должны идти в том же порядке, что и поля в таблице.

LOAD DATA INFILE 'persondata.txt' INTO TABLE persondata (col1,col2,...);

Для выполнения этого оператора надо обладать правами SELECT и INSERT.

Команда LOAD DATA INFILE интерпретирует все входные данные как строки, поэтому нельзя указывать числовые величины для столбцов ENUM или SET так же, как для команд INSERT. Все величины ENUM и SET должны быть заданы как строки!