INSERT проти INSERT INTO


90

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

INSERT INTO myTable <something here>

Я розумію, що ключове слово INTOтут є необов’язковим, і я не мушу його використовувати, але якимось чином це переросло у звичку в моєму випадку.

Моє запитання:

  • Чи є наслідки використання INSERTсинтаксису проти INSERT INTO?
  • Який з них повністю відповідає стандарту?
  • Чи обоє вони дійсні в інших реалізаціях стандарту SQL?

Відповіді:


94

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

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


2
У книзі "SQL-99 Complete, Really" сказано, що Sybase (а отже, і MS SQL Server) поводиться нестандартно, дозволяючи INTO бути необов'язковим. Інші марки баз даних вимагають ключового слова.
Білл Карвін,

2
Правильно. Якщо ви завжди використовуєте INTO, вам не потрібно пам’ятати, хто вважає це необов’язковим. Усі реалізації дозволяють використовувати його.
Білл Ящірка

21

Вони одне і те ж, INTOє абсолютно необов’язковим для T-SQL (інші діалекти SQL можуть відрізнятися).

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

Я думаю, що це концептуальна річ: на мою думку, я не вставляю рядок у таблицю з назвою "Клієнт", а вставляю Клієнта . (Це пов’язано з тим, що я використовую для називання своїх таблиць однину, а не множину).

Якщо ви дотримуєтеся першої концепції, INSERT INTO Customerшвидше за все, "почуватимете себе добре" для вас.

Якщо ви будете слідувати другій концепції, це, швидше за все, буде INSERT Customerдля вас.


5
Я думаю, що ризик вашого підходу полягає в тому, що ви можете змусити нових програмістів плутати об’єкти з таблицями.
Dave DuPlantis

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

Це не питання мислення в об’єктах і таблицях. Це мислиться концептуально як реляційна модель сутності.
Андре Фігейредо,

@DaveDuPlantis Ах, помилка Джекі Тріхорн. +1
ruffin

10

Це може бути необов’язковим у mySQL, але воно є обов’язковим для деяких інших СУБД, наприклад Oracle. Отже, SQL буде потенційно портативнішим із ключовим словом INTO, чого він вартий.


4

Одним уроком, на який я поклався з цього приводу, є те, що ви завжди повинні підтримувати його послідовність! Якщо ви використовуєте INSERT INTO, також не використовуйте INSERT. Якщо ви цього не зробите, деякі програмісти можуть задати те саме питання ще раз.

Ось ще один пов’язаний з цим приклад: у мене була можливість оновити дуже довгу збережену процедуру в MS SQL 2005. Проблема полягає в тому, що в таблицю результатів було вставлено занадто багато даних. Мені довелося з’ясувати, звідки взялися дані. Я намагався з’ясувати, куди додали нові записи. На початку розділу SP я побачив кілька INSERT INTO. Потім я спробував знайти "ВСТАВИТИ В" і оновив їх, але я пропустив одне місце, де використовувався лише "ВСТАВИТИ". Цей фактично вставив 4k + рядки порожніх даних у деякі стовпці! Звичайно, мені слід просто шукати INSERT. Однак це сталося зі мною. Я звинувачую попереднього програміста IDIOT :) :)


Здається, більше, як автор створив його за допомогою INSERT INTO, а деякі поставили INSERT для обслуговування. На жаль, це трапляється багато, набагато більше, ніж «повинно».
Андре Фігейредо

3

У SQL Server 2005 у вас може бути щось середнє між INSERT і INTO, наприклад:

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

Хоча це працює без INTO, я вважаю за краще використовувати INTO для читабельності.


1

Вони обидва роблять одне і те ж. INTO є необов’язковим (у T-SQL SQL Server), але допомагає читати.


0

Я вважаю за краще використовувати його. Він підтримує той же синтаксис контурних відчувати і читаність , як і інші частини мови SQL, як group BY, order BY.


0

Я почав бачити SQL на ORACLE, тому, коли бачу код без INTO, він просто виглядає "зламаним" і заплутаним.

Так, це лише моя думка, і я не кажу, що ви завжди повинні використовувати INTO. Але якщо ви цього не зробите, ви повинні знати, що багато інших людей, мабуть, подумають те саме, особливо якщо вони не почали виконувати сценарії з новіших реалізацій.

З SQL я думаю, що також дуже важливо усвідомити, що ви ДОДАЄТЕ РЯДОК ТАБЛИЦІ, а не працюєте з об'єктами. Я думаю, що новому розробникові було б непомітно сприймати рядки / записи таблиці SQL як об'єкти. Знову ж таки, лише мені думка.


0

За наявності використовуйте стандартну функцію. Не те, що вам коли-небудь потрібна портативність для вашої конкретної бази даних, але, швидше за все, вам потрібна портативність для ваших знань SQL. Особливим неприємним прикладом T-SQL є використання isnull, використовуйте злиття!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.