Чтение онлайн

ЖАНРЫ

MySQL 5.0. Библиотека программиста

Гольцман Виктор

Шрифт:

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

• LINES – укажите этот параметр, чтобы сообщить программе MySQL, в каком формате заданы строки в файле:

– STARTING BY <Префикс строки> – укажем последовательность символов в начале каждой строки, которая должна игнорироваться программой вместе со всеми предшествующими символами. После префикса должны начинаться значения;

– TERMINATED BY <Разделитель строк> – укажем символ, которым заканчиваются строки. Например, если строки заканчиваются символом перевода строки, укажем параметр TERMINATED BY \n\', если символом возврата каретки – укажем TERMINATED BY \r\', если сочетанием этих символов – укажем TERMINATED BY \r\n\', если нулевым байтом –

укажем TERMINATED BY \0.

Если параметр LINES не указан, программа MySQL считает, что строки в файле не имеют префикса и заканчиваются символом перевода строки «\n».

• IGNORE <Количество строк в начале файла> LINES – укажите этот параметр, если первые несколько строк в файле не содержат значений (иными словами, являются заголовком) и при загрузке их нужно пропустить.

• (<Список столбцов>) – перечислите столбцы таблицы, в которые будут загружаться данные. Это необходимо, если файл содержит данные не для всех столбцов таблицы или порядок следования значений в файле отличается от порядка столбцов в таблице.

• SET <Имя столбца> = <Выражение> – вы можете записывать в столбцы не только значения из файла, но и значения, вычисленные с помощью выражений. Для этого создадим одну или несколько переменных, присвоим им считанные из файла значения и запишем в столбец значение выражения, использующего эти переменные. Пусть, например, имеется таблица t1 с числовым столбцом c1 и столбцом с2 с типом TIMESTAMP. В столбец c1 нужно загрузить значение из файла, если это значение не превосходит 1000, либо NULL, если значение в файле больше 1000, а в столбец c2 при этом нужно записать текущую дату и время. Это можно сделать с помощью команды

LOAD DATA INFILE \'С:/DATA/t1.txt\'

INTO TABLE t1 (@var1)

SET c1 = IF(@var1< = 1000,@var1,NULL), c2 = CURRENT_TIMESTAMP;

(о функции IF и о других функциях, используемых в выражениях, рассказывается в главе 3). Далее рассмотрим команду INSERT, с помощью которой также можно добавлять строки в таблицу.

Вставка отдельных строк

Для добавления одной или нескольких строк в таблицу можно использовать команду

INSERT [INTO] <Имя таблицы>

[(<Список столбцов>)]

VALUES

(<Список значений 1>),

(<Список значений 2>),

(<Список значений N>);

В команде INSERT используются следующие основные параметры.

• Имя таблицы, в которую добавляются строки.

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

...

Примечание

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

• Значения, которые нужно добавить в таблицу. Значения могут указываться в одном из следующих форматов:

– набор значений для каждой добавляемой строки заключается в скобки. Набор значений внутри каждой пары скобок должен соответствовать указанному списку столбцов, а если список столбцов не указан, то упорядоченному списку всех столбцов, составляющих таблицу (список столбцов таблицы можно просмотреть с помощью команды DESCRIBE, см. подраздел «Другие команды для работы с таблицами»). Значения внутри набора, а также сами наборы отделяются друг от друга запятыми;

– символьные значения, а также значения даты и времени приводятся в одинарных кавычках. Для числовых значений кавычки необязательны. Десятичным разделителем для чисел с дробной частью служит точка. Время и даты вводятся, соответственно, в формате «YYYY-MM-DD» и «HH:MM:SS»;

– чтобы ввести в столбец неопределенное значение, то необходимо указать вместо значения ключевое слово NULL без кавычек (слово в кавычках рассматривается как обычная символьная строка);

– вместо значения можно указать ключевое слово DEFAULT без кавычек, тогда в столбец будет введено значение по умолчанию (если оно задано для этого столбца).

Например, добавьте в таблицу Products (Товары) сведения о продукции компании с помощью

команды, представленной в листинге 2.5.

Листинг 2.5.

Команда добавления строк в таблицу Products

INSERT INTO Products (description,details,price)

VALUES

(\'Обогреватель Мосбытприбор ВГД 121R\',

\'Инфракрасный обогреватель. 3 режима нагрева:

400 Вт, 800 Вт, 1200 Вт\',\'1145.00\'),

(\'Гриль Мосбытприбор СТ-14\',

\'Мощность 1440 Вт. Быстрый нагрев. Термостат.

Цветовой индикатор работы\',\'2115.00\'),

(\'Кофеварка Мосбытприбор ЕКЛ-1032\',

\'Цвет: черный. Мощность: 450 Вт.

Вместительность: 2 чашки\',\'710.00\'),

(\'Чайник Мосбытприбор МН\',

\'Цвет: белый. Мощность: 2200 Вт. Объем: 2 л\',\'925.00\'),

(\'Утюг Мосбытприбор c паром АБ 200\',

\'Цвет: фиолетовый. Мощность: 1400 вт\',\'518.00\');

Эта команда добавляет значения в столбцы description (наименование), details (описание) и price (цена) таблицы Products. При этом в столбец id (идентификатор) автоматически вносятся порядковые номера строк, поскольку этот столбец имеет тип данных SERIAL (см. листинг 2.3).

Теперь, когда данные внесены и в таблицу Customers (Клиенты) (в предыдущем подразделе было рассказано, как загрузить в эту таблицу данные из файла), и в таблицу Products, можно заполнять таблицу Orders (Заказы). Напомню, что каждая строка таблицы Orders ссылается на строку таблицы Customers и строку таблицы Products, и в момент добавления строки в таблицу Orders соответствующие строки в таблицах Customers и Products должны уже существовать. Внесите в таблицу Orders сведения о заказах, выполнив команду, представленную в листинге 2.6.

Листинг 2.6. Команда добавления строк в таблицу Orders

INSERT INTO Orders

VALUES

(1012,\'2007-12-12\',5,8,\'4500\',533),

(1013,\'2007-12-12\',2,14,\'22000\',536),

(1014,\'2008-01-21\',5,12,\'5750\',533);

Если вы пытаетесь добавить в таблицу некорректное значение, то результат выполнения команды INSERT зависит от того, в каком режиме ваше клиентское приложение взаимодействует с сервером MySQL. Остановимся на этом подробнее. Узнать, в каком режиме вы в данный момент работаете, можно с помощью команды

SHOW VARIABLES LIKE \'sql_mode\

Эта команда показывает значение переменной sql_mode. Если в значении нет ключевых слов STRICT_TRANS_TABLES и STRICT_ALL_TABLES, это означает, что сервер работает в нестрогом режиме.

В нестрогом режиме вставляемое некорректное значение преобразуется в допустимое, в частности

• некорректная дата заменяется нулевой датой (0000-00-00 00:00:00);

• «лишние» символы в слишком длинном символьном значении отбрасываются (так, значение abc, вставляемое в столбец с типом CHAR(2), сокращается до ab);

• слишком большое число заменяется максимально возможным значением для данного типа столбца;

• при внесении в числовой столбец символьного значения все символы, начиная с первой буквы, отбрасываются, и в таблицу вносится начальная числовая часть значения, а если первый символ в значении буква, а не цифра, то значение заменяется нулем (даже если задано отличное от нуля значение по умолчанию);

• если вы установили для столбца свойство NOT NULL, но не задали значение по умолчанию, а при вставке строки не указали значение для этого столбца, то в столбец будет добавлено следующее значение:

– для числовых столбцов – 0, а если задано свойство AUTO_INCREMENT, то очередной порядковый номер;

– для столбцов с типом даты и времени – нулевая дата и/или время (0000–0000 00:00:00), а для первого в таблице столбца с типом TIMESTAMP – текущая дата и время;

– для символьных столбцов – пустая строка, а для столбца с типом ENUM – первый из элементов списка.

При этом операция добавления завершается успешно и генерируется предупреждение, которое можно просмотреть, выполнив после команды INSERT команду

Поделиться с друзьями: