Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

MySQL Insert Command vs T-SQL Query Syntax dengan Contoh

Pengembang adalah siswa seumur hidup. Mendapatkan pengetahuan baru secepat kami bisa selalu menjadi pertunjukan kami. Jika Anda berasal dari kamp T-SQL, apa cara yang lebih cepat untuk mempelajari MySQL? Seringkali Anda ingin membandingkan sintaks. Terakhir kali, Anda belajar tentang membuat tabel di MySQL. Postingan kami hari ini akan membawa Anda selangkah lebih maju. Kami akan memasukkan catatan dengan MySQL INSERT.

Seberapa mudah bisa? Kedua platform database menggunakan SQL, tetapi kita tahu bahwa kedua produk database ini memiliki sedikit tambahan pada sintaks SQL standar. MySQL INSERT tidak terkecuali.

Jadi, jika Anda bosan membandingkan referensi untuk MySQL dan SQL Server, hari ini adalah hari keberuntungan Anda. Saya telah membuat sintaks dan melakukan perbandingan untuk Anda. Juga, kami akan memiliki contoh untuk diperiksa. Akhirnya, kami akan memiliki lembar contekan gratis lainnya.

Sekarang, sebelum kita masuk, Anda juga bisa mendapatkan lembar contekan PDF GRATIS tentang artikel ini dengan mengisi formulir keikutsertaan di bawah ini.

[sendpulse-form id="12097″]

Siap? Hebat!

MySQL INSERT INTO Query Syntax (Konstruktor Nilai Tabel)

Namun sebelum kita masuk ke detailnya, mari kita perjelas beberapa hal:

  • Versi MySQL yang saya gunakan di sini adalah 8.0.23, dengan mesin penyimpanan InnoDB.
  • Versi SQL Server adalah 2019.

Pertama, mari kita coba memasukkan satu record ke dalam tabel. Sintaks dasarnya mirip dengan SQL Server. Namun, jika Anda tidak menyertakan database dan nama skema dan tidak menyertakan nama kolom dengan backticks.

CREATE TABLE testdatabase.people
(`ID` int NOT NULL PRIMARY KEY,
 `Lastname` varchar(50) NOT NULL,
 `FirstName` varchar(50) NOT NULL,
 `MiddleName` varchar(50) NULL DEFAULT '',
 `Rank` varchar(20) NOT NULL,
 `Ship` varchar(50) NOT NULL,
 `ShipRegistry` varchar(20) NOT NULL,
 `ModifiedDate` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP());
  
INSERT INTO people
(`ID`, `LastName`, `FirstName`, `MiddleName`, `Rank`, `Ship`, `ShipRegistry`)
VALUES (3,'Archer','Jonathan','','Captain','Enterprise','NX-01');

Menentukan lokasi sebenarnya dari tabel akan sedikit berbeda. Seperti yang telah saya tunjukkan dalam posting ini, database identik dengan skema di MySQL. Periksa sampel yang dimodifikasi di bawah ini:

INSERT INTO testdatabase.people
(`ID`, `LastName`, `FirstName`, `MiddleName`, `Rank`, `Ship`, `ShipRegistry`)
VALUES (3,'Archer','Jonathan','','Captain','Enterprise','NX-01');

Pernahkah Anda memperhatikan tidak adanya nama skema di atas?

Sementara itu, klausa VALUES di atas membentuk konstruktor nilai tabel. Demikian pula, SQL Server memiliki fitur itu juga.

Menyisipkan Beberapa Baris ke dalam Tabel di MySQL

Mari kita coba menyisipkan beberapa baris.

INSERT INTO testdatabase.people
(ID, LastName, FirstName, MiddleName, Rank, Ship, ShipRegistry)
VALUES (4,'Janeway','Kathryn','', Captain','USS Voyager', 'NCC-74656'), 
       (5, 'Sisko','Benjamin','','Captain','USS Defiant','NX-74205');

Kode di atas akan menyisipkan dua record menggunakan dua konstruktor nilai tabel. Anda juga dapat menggunakan ekspresi alih-alih nilai literal. Contoh di bawah ini menggunakan subquery untuk setiap kolom:

CREATE TABLE testdatabase.people2 LIKE people;

INSERT INTO testdatabase.people2
(`ID`, `LastName`, `FirstName`, `MiddleName`, `Rank`, `Ship`, `ShipRegistry`)
VALUES (4,'Janeway','Kathryn','','Captain','USS Voyager', 'NCC-74656'), 
       (5, (SELECT Lastname FROM people WHERE ID=5), 
           (SELECT Firstname FROM people WHERE ID=5), 
           (SELECT MiddleName FROM people WHERE ID=5),
           (SELECT `Rank` FROM people WHERE ID=5),
           (SELECT Ship FROM people WHERE ID=5),
           (SELECT ShipRegistry FROM people WHERE ID=5));

Subkueri terlihat berlebihan dalam kueri di atas. Tapi ini akan menghasilkan kesalahan:

INSERT INTO testdatabase.people2
(`ID`, `LastName`, `FirstName`, `MiddleName`, `Rank`, `Ship`, `ShipRegistry`)
VALUES (4,'Janeway','Kathryn','','Captain','USS Voyager', 'NCC-74656'), 
       (SELECT `ID`, `LastName`, `FirstName`, `MiddleName`, `Rank`, 
        `Ship`, `ShipRegistry` FROM people);    -- ERROR!

Konstruktor nilai tabel mengharapkan literal atau ekspresi untuk setiap bidang dalam daftar kolom. Selain itu, subkueri dalam contoh sebelumnya mengembalikan satu baris dengan satu nilai, dan itu valid. Namun, pernyataan SELECT di atas akan memicu kesalahan karena mengembalikan beberapa baris dan kolom.

Pilihan lainnya adalah dengan menentukan kata kunci ROW seperti pada contoh di bawah ini:

INSERT INTO testdatabase.people
(ID, LastName, FirstName, MiddleName, Rank, Ship, ShipRegistry)
VALUES ROW(4,'Janeway','Kathryn','', Captain','USS Voyager', 'NCC-74656'), 
       ROW(5, 'Sisko','Benjamin','','Captain','USS Defiant','NX-74205');

Tetapi kata kunci ROW dalam pernyataan INSERT tidak didukung di SQL Server.

MySQL INSERT INTO dengan SELECT dari Tabel Lain

Anda dapat menambahkan record ke dalam tabel menggunakan pernyataan SELECT:

INSERT INTO people2
(ID, Lastname, FirstName, MiddleName, `Rank`, Ship, ShipRegistry)
SELECT ID, Lastname, FirstName, MiddleName, `Rank`, Ship, ShipRegistry FROM people;

Seperti yang Anda lihat, itu sama dengan T-SQL tanpa nama database, nama skema, dan karakter backtick. Omong-omong, peringkat adalah kata yang dicadangkan.

Oleh karena itu, karakter backtick yang menyertakan kata Rank adalah suatu keharusan.

Anda dapat mengekspresikannya tanpa daftar kolom. Cukup tentukan nama kolom dalam urutan yang sama dengan susunan kolom tabel target.

TRUNCATE TABLE testdatabase.people2;

INSERT INTO testdatabase.people2
SELECT ID, Lastname, FirstName, MiddleName, `Rank`, Ship, ShipRegistry, ModifiedDate 
FROM people;

SELECT * FROM testdatabase.people2

Lihat output di bawah ini dari dbForge Studio untuk MySQL:

Kedengarannya bagus? Mari kita kembangkan lebih lanjut topik penanganan nilai kolom.

MASUKKAN dan Nilai Kolom Tabel

Bagian ini akan menggali lebih dalam nilai kolom saat menggunakan MySQL INSERT. Ada empat di antaranya:

  • Nilai Unicode.
  • Nilai default.
  • Menggunakan peningkatan otomatis.
  • Nilai dari variabel yang ditentukan pengguna.

Masukkan String Unicode

Di T-SQL, Anda sudah familiar dengan mendahului nilai string dengan N . Saat menggunakan itu, SQL Server mengasumsikan bahwa nilainya adalah nilai Unicode. Di MySQL, Anda tidak membutuhkan itu.

Lihat contoh di bawah ini:

CREATE TABLE IF NOT EXISTS UnicodeNames
(ID int NOT NULL PRIMARY KEY AUTO_INCREMENT,
 FullName varchar(50) NOT NULL);

INSERT INTO UnicodeNames
(FullName)
VALUES ('김지수'),('김제니'),('박채영'),('ลลิษา มโนบาล');

SELECT * FROM UnicodeNames

Ada beberapa hal yang perlu diperhatikan:

  1. Penggunaan NVARCHAR dalam membuat tabel di MySQL 8 akan otomatis berubah menjadi VARCHAR.
  2. Tidak perlu mendahului nilai Unicode dengan N , seperti N’김지수’.
  3. Anda perlu mengedit sedikit kode di atas agar berhasil dijalankan di SQL Server.

Lihat hasilnya di bawah ini:

Berikut kode yang setara di T-SQL:

CREATE TABLE UnicodeNames
(ID int NOT NULL IDENTITY PRIMARY KEY,
 FullName nvarchar(50) NOT NULL);

INSERT INTO UnicodeNames
(FullName)
VALUES (N'김지수'),(N'김제니'),(N'박채영'),(N'ลลิษา มโนบาล');

SELECT * FROM UnicodeNames

Coba hapus 'N' dari salah satu nilai Unicode di atas. Kode akan berjalan dengan baik, tetapi Anda memeriksa output di bawah ini di SQL Server Management Studio:

Cara Memasukkan Nilai Default di MySQL

Nilai default kolom bertindak saat Anda menyisipkan rekaman tanpa menentukan nilai. Kami menggunakan itu dalam contoh pertama di atas. Berikut definisi kolom lagi:


`ModifiedDate` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP()

Kolom ModifiedDate default ke tanggal dan waktu saat ini di server. Itu sebabnya ketika kami melakukan ini:

INSERT INTO testdatabase.people
(`ID`, `LastName`, `FirstName`, `MiddleName`, `Rank`, `Ship`, `ShipRegistry`)
VALUES (3,'Archer','Jonathan','','Captain','Enterprise','NX-01');

Hasilnya begini:

Sangat rapi dan menghemat penekanan tombol. Perilaku yang sama ini juga terjadi di SQL Server.

Sedangkan jika ingin lebih eksplisit, tentukan saja nama kolom dengan nilai DEFAULT:

INSERT INTO testdatabase.people
(`ID`, `LastName`, `FirstName`, `MiddleName`, `Rank`, `Ship`, `ShipRegistry`, `ModifiedDate`)
VALUES (6, 'Pyke','Christopher','','Captain','USS Enterprise','NCC 1701', DEFAULT);

Ini juga berfungsi di SQL Server dengan sedikit modifikasi.

Ada waktu lain dan penghemat penekanan tombol. Ini memiliki nilai kolom kenaikan otomatis.

MASUKKAN ke Kolom AUTO_INCREMENT

Daripada mendapatkan nilai integer terakhir pada tabel dan menambahkan 1, lebih baik mendefinisikan kolom peningkatan otomatis. itu baik untuk kunci utama. Kami melakukannya dalam contoh tabel Unicode.

Ini sebagian lagi:

CREATE TABLE IF NOT EXISTS UnicodeNames
(ID int NOT NULL PRIMARY KEY AUTO_INCREMENT,
 FullName varchar(50) NOT NULL);

Sementara itu, di SQL Server, kami menggunakan kata kunci IDENTITY alih-alih AUTO_INCREMENT.

Gambar 2 mengungkapkan hasil mendefinisikan kolom peningkatan otomatis. Nilai integer dihasilkan tanpa menentukannya dalam pernyataan INSERT.

Menggunakan Variabel Buatan Pengguna untuk Menyetel Nilai Kolom

Kasus umum lainnya untuk memasukkan catatan dalam T-SQL adalah menerapkan variabel yang ditentukan pengguna untuk menetapkan nilai kolom. Sangat membantu untuk membuat skrip ad-hoc dan prosedur tersimpan.

Tapi pertama-tama, mendefinisikan variabel di MySQL dapat dilakukan dengan menggunakan SET. Tidak seperti di SQL Server, Anda menggunakan DECLARE. Lihat contohnya:

SET @stringValue = 'string value';
SET @numericValue = 1287;
SET @booleanValue = TRUE;
SET @dateValue = CURRENT_DATE();

CREATE TABLE IF NOT EXISTS TableDataTypeValues
(ID int NOT NULL PRIMARY KEY AUTO_INCREMENT,
 stringValue varchar(50) NOT NULL,
 numericValue int NOT NULL,
 BooleanValue bit not NULL DEFAULT FALSE,
 dateValue date NULL);

INSERT INTO TableDataTypeValues
(stringValue, numericValue, BooleanValue, dateValue)
VALUES (@stringValue, @numericValue, @booleanValue, @dateValue);

Seperti yang Anda lihat di atas, variabel bertindak sebagai ekspresi untuk mengisi nilai kolom dalam klausa VALUES.

Sisipkan ke Tabel Sementara di MySQL

Di sini, kami meninjau menggunakan MySQL INSERT di tabel sementara. Pengembang T-SQL akrab dengan '# ' simbol sebelum nama tabel sementara. Di MySQL, tabel sementara dibuat menggunakan CREATE TEMPORARY TABLE nama_tabel . Itu tidak memiliki '# ' simbol. Oleh karena itu, di antara baris skrip Anda, nama tabel sementara mungkin terlihat sama dengan nama tabel biasa:

CREATE TEMPORARY TABLE tmpkpopgroup
(ID int NOT NULL PRIMARY KEY AUTO_INCREMENT,
 GroupName varchar(50) NOT NULL,
 ModifiedDate datetime DEFAULT CURRENT_TIMESTAMP());

INSERT INTO tmpkpopgroup
(GroupName)
VALUES ('BTS'),('SEVENTEEN'),('TWICE'),('MOMOLAND'),('GIRLS GENERATION'),('BLACKPINK'),('OH MY GIRL'),('RED VELVET');

SELECT * FROM tmpkpopgroup
ORDER BY GroupName;

Dengan kata lain, menyisipkan record ke tabel sementara terlihat sama seperti tabel biasa.

Ini hasilnya:

MySQL INSERT…ON DUPLICATE KEY UPDATE – Sintaks Tidak Didukung di T-SQL

Terakhir, MySQL INSERT memiliki kasus sintaks yang tidak didukung di T-SQL. Salah satunya adalah INSERT…ON DUPLICATE KEY UPDATE. Apa yang bisa dilakukannya?

Ketika tabel memiliki kunci unik dan Anda memasukkan nilai yang akan menyebabkan duplikat, INSERT akan gagal. Namun, ketika Anda menggunakan INSERT…ON DUPLICATE KEY UPDATE, pembaruan dari baris yang ada akan terjadi sebagai gantinya. Kesalahan tidak akan terjadi.

Katakanlah kita memiliki catatan ini di orang tabel:

Perhatikan nilai daftar kapal yang diberi kotak merah, dan seluruh baris itu. Masalahnya, kita akan memasukkan record yang sama dengan ON DUPLICATE KEY UPDATE.

Sekarang, mari kita jalankan pernyataan di bawah ini:

INSERT INTO testdatabase.people
(`ID`, `LastName`, `FirstName`, `MiddleName`, `Rank`, `Ship`, `ShipRegistry`, `ModifiedDate`)
VALUES (5, 'Sisko','Benjamin','','Captain','USS Defiant','NCC-75633', DEFAULT)
ON DUPLICATE KEY UPDATE ShipRegistry = 'NCC-75633';

SELECT * FROM testdatabase.people;

Apakah ada kesalahan? Mari kita periksa!

Keren, bukan?

Efek yang sama terjadi ketika Anda melakukan ini:

UPDATE people 
SET ShipRegistry = 'NCC-75633'
WHERE ID = 5

Sementara itu, Anda dapat mengungkapkan niat dalam T-SQL seperti ini:

IF EXISTS(SELECT id FROM people WHERE id = 5)
	UPDATE people 
	SET ShipRegistry = 'NCC-75633'
	WHERE ID = 5
ELSE
	INSERT INTO people
	(ID, LastName, FirstName, MiddleName, [Rank], Ship, ShipRegistry, ModifiedDate)
	VALUES (5, 'Sisko','Benjamin','','Captain','USS Defiant','NCC-75633', DEFAULT);

Hasil yang sama akan terjadi.

Kesimpulan

Benjamin Franklin pernah berkata, "Investasi dalam pengetahuan selalu menghasilkan bunga terbaik." Saya harap artikel ini akan membantu Anda tepat waktu.

Mari kita rekap:

  1. Sintaks dasar MySQL INSERT hampir sama di T-SQL kecuali tidak adanya nama skema dan penggunaan backticks.
  2. Memasukkan record di MySQL dari tabel lain hampir sama seperti di T-SQL.
  3. Nilai kolom ditangani secara berbeda di MySQL INSERT. Nilai Unicode adalah yang paling menonjol. Selain itu, sintaksnya berbeda dalam penggunaan AUTO_INCREMENT.
  4. Memasukkan record dalam tabel sementara di MySQL memiliki sedikit perbedaan dalam T-SQL dengan '# ' simbol.
  5. INSERT…ON DUPLICATE KEY UPDATE terlihat bagus dalam memperpendek sintaks untuk menghindari kesalahan duplikat.

Saya harap artikel ini terbukti bermanfaat bagi Anda saat Anda sedang belajar MySQL. Jika Anda menyukai postingan ini, silakan bagikan ke platform media sosial favorit Anda!


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara MEMILIH Catatan Tanpa Nilai NULL di MySQL

  2. 7 Cara Menemukan Baris Duplikat saat Mengabaikan Kunci Utama di MySQL

  3. Bagaimana cara menggunakan tipe int/long yang tidak ditandatangani dengan Entity Framework?

  4. Ubah atau Setel Nilai Waktu Kueri Panjang MySQL untuk kueri log-lambat

  5. Bagaimana Fungsi UPPER() Bekerja di MySQL