Справочное руководство MySQL 8.0 / SQL Заявления / Заявления о манипулировании данными / ВСТАВИТЬ ЗАЯВЛЕНИЕ 15.2.7 ВКЛЮЧИТЬ Заявление 15.2.7.1 ВСТАВИТЬ ... ВЫБЕРИТЕ ЗАЯВЛЕНИЕ 15.2.7.2 ВКЛЮЧИТЬ ... В ПОВТОРЯЮЩЕЕСЯ ЗАЯВЛЕНИЕ ОБ ОБНОВЛЕНИИ КЛЮЧА 15.2.7.3 ВКЛЮЧИТЬ ЗАДЕРЖАВШЕЕСЯ ЗАЯВЛЕНИЕ ВСТАВЛЯТЬ [НИЗКИЙ_ПРИОРИТЕТ | ЗАДЕРЖАННЫЙ | HIGH_PRIORITY] [ИГНОРИРОВАТЬ] [В] tbl_name [РАЗДЕЛЕНИЕ (partition_name [, partition_name] ...)] [(col_name [, col_name] ...)] { {ЦЕННОСТИ | СТОИМОСТЬ} (value_list) [, (value_list)] ... } [КАК row_alias[(col_alias [, col_alias] ...)]] [НА ДУБЛИКАТ КЛЮЧ ОБНОВЛЯТЬ назначение_список] ВСТАВЛЯТЬ [НИЗКИЙ_ПРИОРИТЕТ | ЗАДЕРЖАННЫЙ | HIGH_PRIORITY] [ИГНОРИРОВАТЬ] [В] tbl_name [РАЗДЕЛЕНИЕ (partition_name [, partition_name] ...)] НАБОР назначение_список [КАК row_alias[(col_alias [, col_alias] ...)]] [НА ДУБЛИКАТ КЛЮЧ ОБНОВЛЯТЬ назначение_список] ВСТАВЛЯТЬ [НИЗКИЙ_ПРИОРИТЕТ | HIGH_PRIORITY] [ИГНОРИРОВАТЬ] [В] tbl_name [РАЗДЕЛЕНИЕ (partition_name [, partition_name] ...)] [(col_name [, col_name] ...)] { ВЫБЕРИТЕ ... | СТОЛБ таблица_имя | ЦЕННОСТИ row_constructor_list } [НА ДУБЛИКАТ КЛЮЧ ОБНОВЛЯТЬ назначение_список] стоимость: {эксп | ДЕФОЛТ} value_list: стоимость [, стоимость] ... row_constructor_list: РЯД(value_list)[, РЯД(value_list)][, ...] присвоение: col_name = стоимость | [row_alias.]col_name | [tbl_name.]col_name | [row_alias.]col_alias назначение_список: присвоение [, присвоение] ... ВСТАВЛЯТЬ вставляет новые строки в существующая таблица ВСТАВЬТЕ... ЦЕННОСТИ, ВСТАВЬТЕ... ЦЕННОСТИ РЯД(), и ВСТАВЬТЕ... НАБОР формы оператора вставляют строки на основе явно заданных ценности. ВСТАВЬТЕ... ВЫБЕРИТЕ формировать строки вставок, выбранные из другой таблицы или таблицы. Вы также можете использовать ВСТАВЬТЕ... ТАБЛИЦА в MySQL 8.0.19 и более поздних строк из одной таблицы. ВСТАВЛЯТЬ с НА ДУБЛИКАТ ОБНОВЛЕНИЯ КЛЮЧА пункт позволяет существующим строкам быть обновлено, если строка будет вставлена, вызовет дублирование значения в УНИКАЛЬНЫЙ индекс или ПЕРВИЧНЫЙ КЛЮЧ. В MySQL 8.0.19 и более поздних версиях псевдоним строки с одним или несколькими необязательными псевдонимы столбцов можно использовать с ДУБЛИКАТ ОБНОВЛЕНИЯ КЛЮЧА для ссылки на строку, которая должна быть вставлена. Для получения дополнительной информации о ВСТАВЬТЕ... ВЫБЕРИТЕ и ВСТАВЬ... НА ДУБЛИКАТ ОБНОВЛЕНИЯ КЛЮЧА, увидеть Раздел 15.2.7.1, “INSERT ... SELECT Statement”, и Раздел 15.2.7.2, “INSERT ... О ДУБЛИКАТЕ ОБНОВЛЕНИЯ КЛЮЧА Statement”. В MySQL 8.0 ЗАДЕРЖАННЫЙ ключевое слово принимается, но игнорируется сервером. По причинам этого см Раздел 15.2.7.3, “INSERT DELAYED Statement”, Вставка в таблицу требует ВСТАВЛЯТЬ привилегия для стола. Если ДУБЛИКАТ ОБНОВЛЕНИЯ КЛЮЧА пункт используется и дублированный ключ вызывает ОБНОВЛЯТЬ к вместо этого выполните, утверждение требует ОБНОВЛЯТЬ привилегия для колонн будьте обновлены. Для столбцов, которые читаются, но не изменены, вам нужно только ВЫБЕРИТЕ привилегии (например для столбца, указанного только на правой стороне col_name = эксп назначение в ДУБЛИКАТ ОБНОВЛЕНИЯ КЛЮЧА пункт). При вставке в разделённую таблицу можно контролировать, какие разделы и подразделы принимают новые строки РАЗДЕЛЕНИЕ пункт берет список разделённые запятыми имена одной или нескольких разделов или подразделов (или оба) таблицы. если какой-либо из строк вставить заданным ВСТАВЛЯТЬ заявление не совпадает один из перечисленных разделов ВСТАВЛЯТЬ утверждение не удаётся с ошибкой Найдена строка, не соответствующая заданному набору разделов. Для получения дополнительной информации и примеров см Раздел 26.5, “Partition Selection”. tbl_name таблица, в которую входят строки следует вставить. Укажите столбцы, для которых утверждение предоставляет значения следующим образом: Предоставить скобчатый список разделённых запятыми названий столбцов следуя названию таблицы. в этом случае значение для каждого названного колонка должна быть предоставлена ЦЕННОСТИ список, ЗНАЧЕНИЯ СТРОКА() список, или ВЫБЕРИТЕ заявление. Для ВСТАВИТЬ СТОЛ форма, количество столбцы в исходной таблице должны соответствовать количеству столбцов быть вставленным. Если вы не указали список имен столбцов для ВСТАВЬТЕ... ЦЕННОСТИ или ВСТАВЬТЕ... ВЫБЕРИТЕ, значения для каждого столбца в таблице должны быть предоставлено ЦЕННОСТИ список, ВЫБЕРИТЕ заявление, или СТОЛБ заявление, если вы этого не сделаете знайте порядок столбцов в таблице, используйте ОПИСЫВАТЬ tbl_name чтобы узнать. А НАБОР пункт указывает столбцы явно по имени, вместе со значением присваивать каждому. Значения столбцов могут быть даны несколькими способами: Если строгий режим SQL не включен, любой столбец явно не включен заданное значение устанавливается по умолчанию (явное или неявное) value. Например, если вы укажете список столбцов, который не назовите все столбцы в таблице, безымянные столбцы установлены на их значения по умолчанию. Присвоение значения по умолчанию описано в Раздел 13.6, “Data Тип По умолчанию Values”. См. также Раздел 1.6.3.3, “Enforced Constraints on Invalid Data”. Если включен строгий режим SQL, ВСТАВЛЯТЬ утверждение генерирует ошибка, если она не указывает явное значение для каждого столбец, который не имеет значения по умолчанию Раздел 7.1.11, “Server SQL Modes”. Если и список столбцов, и ЦЕННОСТИ список пустые, ВСТАВЛЯТЬ создает ряд с каждым столбцом, установленным в его значении по умолчанию: ВСТАВЛЯТЬ В tbl_name () ЦЕННОСТИ(); Если строгий режим не включен, MySQL использует неявный по умолчанию значение для любого столбца, не имеющего явно заданного по умолчанию. Если включен строгий режим, возникает ошибка, если какой-либо столбец имеет значение по умолчанию отсутствует. Используйте ключевое слово ДЕФОЛТ установить столбец явно к его значению по умолчанию. Это облегчает написание ВСТАВЛЯТЬ заявления, которые назначают значения для всех, кроме нескольких столбцов, потому что это позволяет вам избегайте написания неполного ЦЕННОСТИ список это не включает значение для каждого столбца в таблице. В противном случае вы должны предоставить список названий столбцов соответствующее каждому значению в ЦЕННОСТИ список. Если сгенерированный столбец вставлен в явно, единственный допустимая стоимость ДЕФОЛТ. Для информации о сгенерированных столбцах см Раздел 15.1.20.8, “CREATE TABLE и Generated Columns”. В выражениях можно использовать ПО УМОЛЧАНИЮ col_name ) для получения значения по умолчанию для столбца col_name . Преобразование типа выражения эксп это обеспечивает значение столбца может возникнуть, если тип данных выражения не соответствует тип данных столбца. Преобразование заданного значения может привести к различные вставленные значения в зависимости от типа столбца пример, вставка строки '1999.0e-2' в INT, ПЛАВАТЬ, ДЕСЯТИЧНЫЙ(10,6), или ГОД столбец вставляет значение 1999, 19.9921, 19.992100, или 1999, соответственно. Значение, хранящееся в INT и ГОД колонны это 1999 потому что строка-число конверсия смотрит только на большую часть начальной части строка, которая может считаться действительным целым числом или годом. Для ПЛАВАТЬ и ДЕСЯТИЧНЫЙ колонны преобразование строки в число считает всю строку действительное числовое значение. Выражение эксп может относиться к любому столбец, который был установлен ранее в списке значений. Например, вы может сделать это, потому что значение для col2 относится к col1, который ранее был назначенный: ВСТАВЛЯТЬ В tbl_name (col1,col2) ЦЕННОСТИ(15,col1*2); Но следующее не является законным, потому что ценность для col1 относится к col2, который назначается после col1: ВСТАВЛЯТЬ В tbl_name (col1,col2) ЦЕННОСТИ(col2*2,15); Исключение происходит для столбцов, которые содержат AUTO_INCREMENT ценности Потому что AUTO_INCREMENT значения генерируются после другие присвоения значений, любая ссылка на AUTO_INCREMENT столбец в задании возвращает а 0. ВСТАВЛЯТЬ заявления, которые используют ЦЕННОСТИ синтаксис может вставить несколько строк это включает в себя несколько списков разделенных запятыми значений столбцов, со списками, заключёнными в круглые скобки и разделёнными запятыми. Пример: ВСТАВЛЯТЬ В tbl_name (а,b,с) ЦЕННОСТИ(1,2,3), (4,5,6), (7,8,9); Каждый список значений должен содержать ровно столько значений, сколько должно быть вставлено в строку. Следующее утверждение недействительно, потому что оно содержит один список из девяти значений, а не три списка из трёх значения каждый: ВСТАВЛЯТЬ В tbl_name (а,b,с) ЦЕННОСТИ(1,2,3,4,5,6,7,8,9); СТОИМОСТЬ является синонимом ЦЕННОСТИ в этом контексте ни то, ни другое не подразумевает что-либо о количестве списков значений, или о количестве значения на список. Либо можно использовать, есть ли единичный список значений или несколько списков, и независимо от количества значения в списке. ВСТАВЛЯТЬ заявления, использующие ЗНАЧЕНИЯ СТРОКА() синтаксис также может вставлять несколько строк. в этом случае каждое значение список должен содержаться в РЯД() (ряд конструктор), вот так: ВСТАВЛЯТЬ В tbl_name (а,b,с) ЦЕННОСТИ РЯД(1,2,3), РЯД(4,5,6), РЯД(7,8,9); Значение пораженных рядов для ВСТАВЛЯТЬ может быть получен с помощью ROW_COUNT() Функция SQL или mysql_affected_rows() C API функция. См Раздел 14.15, “Information Functions”, и mysql_affected_rows(). Если вы используете ВСТАВЬТЕ... ЦЕННОСТИ или ВСТАВИТЬ... ЗНАЧЕНИЯ ROW() с несколькими списками значений, или ВСТАВЬТЕ... ВЫБЕРИТЕ или ВСТАВЬТЕ... ТАБЛИЦА, extrain возвращает информационную строку в этом формате: Записи: N1 Дубликаты: N2 Предупреждения: N3 Если вы используете C API, информационную строку можно получить призывая mysql_info() функция. См mysql_info(). Records указывает количество обработанных строк по утверждению. (Это не обязательно количество строк фактически вставлен потому, что Дубликаты может быть ненулевой.) Дубликаты указывает количество ряды, которые нельзя было вставить, потому что они дублировали бы некоторые существующее уникальное значение индекса. Предупреждения указывает количество попыток вставить значения столбцов, которые были проблематично в некотором роде Предупреждения могут возникать под любым из следующие условия: Вставка НУЛЬ в колонку, которая была объявлена НЕ НУЛЕВОЙ. Для многорядных ВСТАВЛЯТЬ заявления или ВСТАВЬТЕ В... ВЫБЕРИТЕ ведомости, столбец задан на неявный значение по умолчанию для типа данных столбца. 0 для числовых типов пустая строка ('') для типов струн и “ноль” значение для типов даты и времени. ВСТАВЬТЕ В... ВЫБЕРИТЕ заявления обрабатываются так же, как многорядные вставки, потому что сервер не проверяет результат, установленный из ВЫБЕРИТЕ к посмотрите, возвращает ли он одну строку. (Для однорядной ВСТАВЛЯТЬ, никаких предупреждений не происходит, когда НУЛЬ вставляется в НЕ НУЛЕВОЙ столбец. Вместо этого заявление терпит неудачу с ошибка.) Установка числового столбца на значение, которое лежит за пределами диапазон столбцов. Значение обрезается до ближайшей конечной точки диапазон. Присвоение такой ценности, как '10.34 a' к числовой столбец. Отчеркивающий нечисловой текст отчеркнут а оставшаяся числовая часть вставляется если строка значение не имеет ведущей числовой части, столбец установлен 0. Вставка строки в столбец строки (ЧАР, ВАРШАР, ТЕКСТ, или БОБ), который превышает столбец максимальная длина. Значение усечено до максимума столбца длина. Вставка значения в столбец даты или времени, который является незаконным для типа данных столбец установлен в соответствующий ноль значение для типа. За ВСТАВЛЯТЬ примеры, включающие AUTO_INCREMENT значения столбцов, см Раздел 5.6.9, “Using AUTO_INCREMENT”. Если ВСТАВЛЯТЬ вставляет ряд в стол, который имеет AUTO_INCREMENT колонка, вы можете найти значение, используемое для этого столбца, используя LAST_INSERT_ID() Функция SQL или mysql_insert_id() C API функция. Примечание Эти две функции не всегда ведут себя одинаково поведение ВСТАВЛЯТЬ заявления в отношении AUTO_INCREMENT колонны это обсуждается далее в Раздел 14.15, “Information Functions”, и mysql_insert_id(). The ВСТАВЛЯТЬзаявление поддерживает следующие модификаторы: Если вы используете НИЗКИЙ_ПРИОРИТЕТ модификатор, выполнение ВСТАВЛЯТЬ является задерживается до тех пор, пока другие клиенты не прочитают со стола. Это включает в себя других клиентов, которые начали читать, пока существуют клиенты читают, а пока ВСТАВИТЬ LOW_PRIORITY заявление ждёт. Возможно, для клиента, который выдает ВСТАВИТЬ LOW_PRIORITY заявление ждать очень долго. НИЗКИЙ_ПРИОРИТЕТ влияет только на двигатели хранения для этого используется только столовая блокировка (например МИСАМ, ПАМЯТЬ, и СЛИВАТЬСЯ). Примечание НИЗКИЙ_ПРИОРИТЕТ обычно не следует использовать с МИСАМ столы, потому что так делают отключает одновременные вставки. См Раздел 10.11.3, “Concurrent Inserts”. Если вы укажете HIGH_PRIORITY, он переопределяет эффект --низкоприоритет-обновления вариант если сервер был запущен с этой опцией. Это также вызывает параллельные вставки не должны использоваться. См Раздел 10.11.3, “Concurrent Inserts”. HIGH_PRIORITY влияет только на двигатели хранения для этого используется только столовая блокировка (например МИСАМ, ПАМЯТЬ, и СЛИВАТЬСЯ). Если вы используете ИГНОРИРОВАТЬ модификатор, невежественный ошибки, которые возникают при выполнении ВСТАВЛЯТЬ заявление игнорируется. Например, без ИГНОРИРОВАТЬ, ряд, что дублирует существующий УНИКАЛЬНЫЙ индекс или ПЕРВИЧНЫЙ КЛЮЧ значение в таблице вызывает ошибка дублированного ключа и утверждение прерывается. с ИГНОРИРОВАТЬ, строка отбрасывается и без ошибок происходит. Игнорированные ошибки генерируют предупреждения вместо. ИГНОРИРОВАТЬ оказывает аналогичное влияние на вставки в разделенные таблицы, где нет раздела, соответствующего заданному значению найдена. Без ИГНОРИРОВАТЬ, таких ВСТАВЛЯТЬ заявления отменяются с ошибкой Когда ВСТАВИТЬ ИГНОРИРОВАТЬ используется, операция вставки не срабатывает бесшумно для строк, содержащих непревзойденное значение, но вставляет строки, которые сопоставляются. Например, см Раздел 26.2.2, “LIST Partitioning”. Преобразование данных, которое может вызвать ошибки, прерывает утверждение, если ИГНОРИРОВАТЬ не уточняется. с ИГНОРИРОВАТЬ, недействительные значения корректируются на самые близкие значения и вставленные; предупреждения производятся, но заявление не прерывает. Вы можете определить с помощью mysql_info() функция API C сколько строк было вставлено в таблицу. Для получения дополнительной информации см Влияние IGNORE на Исполнение Заявления. Вы можете использовать ЗАМЕНЯТЬ вместо ВСТАВЛЯТЬ перезаписывать старые строки. ЗАМЕНЯТЬ является аналогом ВСТАВИТЬ ИГНОРИРОВАТЬ при лечении новые ряды, которые содержат уникальные ключевые значения, дублирующие старые строки: Новые строки замените старые строки, а не отбрасывайте. Смотрите Раздел 15.2.12, “REPLACE Statement”. Если вы укажете ДУБЛИКАТ ОБНОВЛЕНИЯ КЛЮЧА, и вставляется строка, которая вызовет дублирующее значение в УНИКАЛЬНЫЙ индекс или ПЕРВИЧНЫЙ КЛЮЧ, а ОБНОВЛЯТЬ из возникает старая строка. Значение пораженных строк в строке равно 1, если строка вставляется как новая строка, 2 если обновляется существующая строка, и 0, если существующая строка установлена на ее текущие значения. Если вы укажите CLIENT_FOUND_ROWS флаг на mysql_real_connect() C API функция при подключении к мисклд, значение затрагиваемых строк равно 1 (не 0), если задана существующая строка его текущие значения. См Раздел 15.2.7.2, “INSERT ... О ДУБЛИКАТЕ ОБНОВЛЕНИЯ КЛЮЧА Statement”. ВСТАВИТЬ ОТСРОЧЕННО был обесценен в MySQL 5.6, и запланировано для последующего удаления. в MySQL 8.0, ЗАДЕРЖАННЫЙ модификатор является принято, но проигнорировано. ВСТАВЛЯТЬ (без ЗАДЕРЖАННЫЙ) вместо. См Раздел 15.2.7.3, “INSERT DELAYED Statement”. © 2024 Oracle
Создать свой сайт бесплатно