Poprawną składnią do wstawiania nowych wierszy w SQL jest polecenie INSERT INTO i to jest taki absolutny fundament pracy z bazą danych. Standard SQL (ANSI/ISO) definiuje właśnie tę komendę jako podstawowy mechanizm dodawania rekordów do tabeli. Typowy zapis wygląda na przykład tak: INSERT INTO klienci (imie, nazwisko, email) VALUES ('Jan', 'Kowalski', '
[email protected]');. Najpierw podajemy nazwę tabeli, potem listę kolumn, a następnie wartości w dokładnie tej samej kolejności. W praktyce, w aplikacjach webowych, to właśnie INSERT INTO stoi za dodawaniem nowych użytkowników, zamówień, wpisów na blogu czy logów systemowych. Moim zdaniem warto od razu wyrabiać sobie dobre nawyki: zawsze jawnie wypisuj nazwy kolumn, zamiast polegać na kolejności kolumn w tabeli. Dzięki temu, jeśli ktoś kiedyś doda nową kolumnę albo zmieni ich układ, Twoje zapytania dalej będą działały poprawnie. Jest też drugi, często używany wariant: INSERT INTO tabela VALUES (...), ale on jest bezpieczny tylko wtedy, gdy dokładnie kontrolujesz strukturę tabeli. INSERT INTO może też współpracować z SELECT, np. do masowego kopiowania danych: INSERT INTO archiwum_zamowien SELECT * FROM zamowienia WHERE data < '2023-01-01';. W systemach produkcyjnych łączy się tę komendę z transakcjami (BEGIN, COMMIT, ROLLBACK), żeby zapewnić spójność danych. Warto pamiętać, że różne silniki (MySQL, PostgreSQL, SQL Server) mają swoje rozszerzenia, ale sama idea INSERT INTO jest wspólna i zgodna ze standardem. To takie must-have dla każdego, kto poważnie myśli o pracy z bazami danych.
W języku SQL nazewnictwo poleceń nie jest przypadkowe i mocno wynika ze standardu ANSI/ISO. Jeżeli chcemy dodać nowy wiersz danych do istniejącej tabeli, używamy instrukcji INSERT INTO, a nie żadnych konstrukcji typu SELECT ROW, CREATE ROW czy CREATE INTO. Te błędne formy często biorą się z intuicyjnego mieszania pojęć z języków programowania i potocznego opisu danych. SELECT służy wyłącznie do odczytu danych, czyli do tworzenia zapytań wybierających wiersze z tabel. Dodawanie słowa ROW do SELECT wygląda może „logicznie” po ludzku, ale w SQL nie istnieje taka konstrukcja jak SELECT ROW do wstawiania rekordu. SELECT może co najwyżej dostarczyć dane, które potem wstawimy za pomocą INSERT INTO w formie INSERT INTO tabela (kolumny) SELECT .... To jest poprawny, standardowy mechanizm masowego wstawiania, ale sama instrukcja SELECT niczego nie zapisuje do tabeli. Z kolei CREATE w SQL służy do tworzenia obiektów strukturalnych: CREATE TABLE, CREATE VIEW, CREATE INDEX, CREATE DATABASE. Tworzymy w ten sposób samą strukturę, a nie dane w środku. Stąd pomysły typu CREATE ROW albo CREATE INTO są po prostu sprzeczne z logiką składni SQL. Wiersz danych (rekord) nie jest osobnym obiektem, który się „tworzy” poleceniem CREATE, tylko zawartością tabeli, którą modyfikujemy poleceniami INSERT, UPDATE albo DELETE. Częsty błąd myślowy polega na tym, że ktoś próbuje tłumaczyć SQL dosłownie z języka naturalnego: „chcę utworzyć wiersz, więc napiszę CREATE ROW”. Niestety SQL ma swoje utrwalone słownictwo i trzeba się go nauczyć jak języka obcego. Dobra praktyka w branży to trzymanie się dokładnych konstrukcji ze standardu: INSERT INTO do dodawania rekordów, SELECT do odczytu, UPDATE do modyfikacji i DELETE do usuwania. Dzięki temu kod jest czytelny dla każdego programisty czy administratora, który zna SQL, a zapytania są przenośne między różnymi silnikami baz danych.