INSERT vs INSERT INTO


91

Я уже некоторое время работаю с T-SQL в MS SQL и почему-то всякий раз, когда мне нужно вставить данные в таблицу, я обычно использую синтаксис:

INSERT INTO myTable <something here>

Я понимаю, что это ключевое слово INTOздесь необязательно, и мне не нужно его использовать, но в моем случае оно каким-то образом вошло в привычку.

У меня вопрос:

  • Есть ли какие-то последствия использования INSERTсинтаксиса по сравнению с INSERT INTO?
  • Какой полностью соответствует стандарту?
  • Действительны ли они оба в других реализациях стандарта SQL?

Ответы:


96

INSERT INTOэто стандарт. Несмотря на то, что INTOв большинстве реализаций это необязательно, в некоторых он требуется, поэтому рекомендуется включить его, чтобы обеспечить переносимость кода.

Вы можете найти ссылки на несколько версий стандарта SQL здесь . Я нашел HTML версию старого стандарта здесь .


2
В книге «SQL-99 Complete, Really» говорится, что Sybase (и, следовательно, MS SQL Server) ведет себя нестандартно, что позволяет INTO быть необязательным. Для других брендов базы данных требуется ключевое слово.
Билл Карвин,

2
Правильно. Если вы всегда используете INTO, вам не нужно помнить, какие из них считают его необязательным. Все реализации позволяют его использовать.
Bill the Lizard

22

Это одно и то же, INTOсовершенно необязательно в T-SQL (другие диалекты SQL могут отличаться).

В отличие от других ответов, я думаю, что это ухудшает удобочитаемость INTO.

Я думаю, что это концептуальная вещь: на мой взгляд, я не вставляю строку в таблицу с именем «Клиент», а вставляю клиента . (Это связано с тем, что я использую для имен своих таблиц в единственном, а не во множественном числе).

Если вы будете следовать первой концепции, INSERT INTO Customerона, скорее всего, «подойдет» вам.

Если вы последуете второй концепции, скорее всего, она INSERT Customerвам подойдет.


5
Я думаю, что риск вашего подхода состоит в том, что вы можете заставить новых программистов путать объекты с таблицами.
Дэйв ДюПлантис,

12
Ваш ответ фактически верен. Обидно, когда люди голосуют против противоположных точек зрения. Я думаю, что одним из преимуществ SO является возможность слышать разные мнения.
DOK

Дело не в мышлении предметами и таблицами. Это концептуальное мышление как реляционная модель сущностей.
Андре Фигейредо

@DaveDuPlantis Ах, заблуждение Джеки Трихорна. +1
бродяга

10

Это может быть необязательно в mySQL, но обязательно в некоторых других СУБД, например Oracle. Таким образом, SQL будет более потенциально переносимым с ключевым словом INTO, чего бы оно ни стоило.


4

Один урок, который я извлек из этой проблемы, заключается в том, что вы всегда должны сохранять последовательность! Если вы используете INSERT INTO, не используйте INSERT. Если вы этого не сделаете, некоторые программисты могут снова задать тот же вопрос.

Вот еще один связанный с этим пример: у меня была возможность обновить очень-очень длинную хранимую процедуру в MS SQL 2005. Проблема в том, что в таблицу результатов было вставлено слишком много данных. Мне нужно было выяснить, откуда пришли данные. Пытался узнать, где были добавлены новые записи. В начале раздела SP я увидел несколько INSERT INTO. Затем я попытался найти "INSERT INTO" и обновил их, но я пропустил одно место, где использовалось только "INSERT". Он фактически вставил 4k + строк пустых данных в некоторые столбцы! Конечно, мне нужно просто поискать INSERT. Однако это случилось со мной. Виноват предыдущий программист ИДИОТ :) :)


Похоже, что автор создал его с помощью INSERT INTO, а некоторые поместили INSERT в обслуживание. К сожалению, это происходит намного больше, чем «должно».
Андре Фигейредо

3

В SQL Server 2005 у вас может быть что-то среднее между INSERT и INTO, например:

INSERT top (5) INTO tTable1 SELECT * FROM tTable2;

Хотя он работает без INTO, я предпочитаю использовать INTO для удобства чтения.


1

Они оба делают одно и то же. INTO не является обязательным (в SQL Server T-SQL), но способствует удобочитаемости.


0

Я предпочитаю его использовать. Он поддерживает то же синтаксис оконтуривающие чувствовать и читаемость , как и другие части языка SQL, как group BY, order BY.


0

Я начал писать SQL в ORACLE, поэтому, когда я вижу код без INTO, он выглядит «сломанным» и сбивает с толку.

Да, это всего лишь мое мнение, и я не говорю, что вы всегда должны использовать INTO. Но если вы этого не сделаете, вы должны знать, что многие другие люди, вероятно, подумают о том же, особенно если они еще не начали писать сценарии с новыми реализациями.

Я думаю, что с SQL также очень важно понимать, что вы добавляете СТРОКУ в ТАБЛИЦУ, а не работаете с объектами. Я думаю, что для нового разработчика было бы бесполезно думать о строках / записях таблицы SQL как об объектах. Опять же, только мое мнение.


0

Если возможно, используйте стандартную функцию. Не то чтобы вам когда-либо требовалась переносимость для вашей конкретной базы данных, но, скорее всего, вам потребуется переносимость для ваших знаний SQL. Конкретный неприятный пример T-SQL - использование isnull, use coalesce!

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.