А Б В Г Д Е Ж З И К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Э Ю Я
0-9 A B C D I F G H IJ K L M N O P Q R S TU V WX Y Z #


Чтение книги "MySQL 5.0. Библиотека программиста" (страница 10)

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

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

   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 команду

   SHOW WARNINGS;

...
   Внимание!
   В любом из режимов попытка добавить повторяющееся значение в столбец первичного ключа или уникального индекса вызывает ошибку и прекращение выполнения операции. Также в любом из режимов вызывает ошибку и отмену операции попытка добавить во внешний ключ таблицы с типом InnoDB значение, отсутствующее в первичном ключе родительской таблицы.
   Если в значении переменной sql_mode содержится ключевое слово STRICT_ TRANS_TABLES или STRICT_ALL_TABLES, значит, сервер работает в строгом режиме. Для таблиц с поддержкой транзакций (то есть таблиц с типом InnoDB) эти два режима эквивалентны и действуют одинаково. При попытке вставки некорректного значения операция INSERT полностью отменяется (то есть в таблицу не загружается ни одна из добавляемых строк, даже если некорректное значение обнаружено только в одной из них) и выдается сообщение об ошибке.
   Для таблиц, не поддерживающих транзакции (то есть таблиц с типом MyISAM и др.), режимы STRICT_TRANS_TABLES или STRICT_ALL_TABLES функционируют следующим образом:
   • если некорректное значение обнаружено в первой из добавляемых строк, операция INSERT полностью отменяется и выдается сообщение об ошибке (то есть результат выполнения такой же, как для таблиц InnoDB);
   • если установлен режим STRICT_TRANS_TABLES, а некорректное значение обнаружено в одной из последующих добавляемых строк, то некорректное значение преобразуется в допустимое и генерируется предупреждение (как в нестрогом режиме);
   • если установлен режим STRICT_ALL_TABLES, а некорректное значение обнаружено в одной из последующих добавляемых строк, то операция частично отменяется: строки, предшествующие ошибочной строке, добавляются в таблицу, а ошибочная и следующие за ней – игнорируются. В связи с этим в таблицы, не поддерживающие транзакции, рекомендуется добавлять по одной строке в каждой команде INSERT.
...
   Внимание!
   В любом из режимов числа с дробной частью, добавляемые в целочисленный столбец, округляются до целого, причем такая операция не вызывает ни ошибок, ни предупреждений.
   Если вы задали для столбца таблицы свойство NOT NULL (тем самым запретив использовать значение NULL в качестве значения по умолчанию), но не задали отличное от NULL значение по умолчанию (свойство DEFAULT), и если вы удалили значение столбца по умолчанию с помощью команды ALTER TABLE, то в строгом режиме считается, что у такого столбца нет значения по умолчанию. Поэтому при добавлении строки в таблицу необходимо явно задать значение для такого столбца, в противном случае операция INSERT полностью отменяется и выдается сообщение об ошибке. Исключение составляют столбцы с типом TIMESTAMP и ENUM, а также числовые столбцы со свойством AUTO_INCREMENT: для них в случае отсутствия явно заданного значения используются такие же значения, что и в нестрогом режиме.
   Изменить режим взаимодействия вашего клиентского приложения с сервером вы можете с помощью команды

   SET SQL_MODE = '<Режим>';

   Например, команда

   SET SQL_MODE = '';

   устанавливает нестрогий режим, а команды

   SET SQL_MODE = 'STRICT_TRANS_TABLES';

   и

   SET SQL_MODE = 'STRICT_ALL_TABLES';

   устанавливают соответствующий строгий режим.
   Команда SET SQL_MODE изменяет режим взаимодействия с сервером только для текущего соединения и не влияет на взаимодействие сервера с другими клиентскими приложениями. Новый режим вступает в силу немедленно после выполнения команды и сохраняется только до момента отключения от сервера.
   Если же вы хотите, чтобы новый режим действовал глобально (то есть для всех клиентских приложений), необходимо включить в команду изменения режима ключевое слово GLOBAL:

   SET GLOBAL SQL_MODE = '<Режим>';

   Режим, установленный глобально, применяется для всех вновь подключаемых к серверу клиентских приложений; ранее подключенные приложения продолжают работать в прежнем режиме. Чтобы новый режим вступил в силу для вашего приложения, необходимо отключиться от сервера и затем снова подключиться к нему. Глобальный режим сохраняется до момента перезапуска сервера MySQL.
...
   Внимание!
   В отличие от других клиентских приложений, графическая утилита MySQL Query Browser всегда взаимодействует с сервером в глобальном режиме. Установить для нее режим, отличный от установленного глобально, невозможно: команда SET SQL_MODE, выполненная в MySQL Query Browser, игнорируется. Таким образом, чтобы изменить режим для MySQL Query Browser, нужно изменить режим глобально с помощью команды SET GLOBAL SQL_MODE. При изменении глобального режима новый режим применяется к этой утилите сразу же, без переподключения к серверу.
   Теперь, когда данные внесены в таблицы, можно пользоваться базой данных для нахождения нужных вам сведений. Об этом и пойдет речь в следующем разделе.
Чтение онлайн



1 2 3 4 5 6 7 8 9 [10] 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Навигация по сайту


Читательские рекомендации

Информация