Menyisipkan baris ke dalam tabel. Di AnalyticDB for MySQL, pernyataan INSERT INTO berperilaku seperti INSERT IGNORE INTO: jika baris yang dimasukkan memiliki primary key yang sama dengan baris yang sudah ada, baris tersebut akan diabaikan secara diam-diam alih-alih ditimpa.
Sintaksis
INSERT [IGNORE]
INTO table_name
[( column_name [, ...] )]
[VALUES]
[(value_list[, ...])]
[query];
Parameter
| Parameter | Wajib | Deskripsi |
|---|---|---|
IGNORE |
Tidak | Mengabaikan baris apa pun yang primary key-nya menduplikasi baris yang sudah ada. |
column_name |
Tidak | Nama kolom target. |
query |
— | Pernyataan SELECT yang hasilnya dimasukkan ke dalam tabel. |
Catatan penggunaan
Jika Anda menghilangkan nama kolom, nilai dalam daftar VALUES harus sesuai urutan kolom yang didefinisikan dalam pernyataan CREATE TABLE.
Contoh
Contoh berikut menggunakan dua tabel — customer dan courses — yang didefinisikan seperti di bawah ini.
CREATE TABLE customer (
customer_id bigint NOT NULL COMMENT 'Customer ID',
customer_name varchar NOT NULL COMMENT 'Customer name',
phone_num bigint NOT NULL COMMENT 'Phone number',
city_name varchar NOT NULL COMMENT 'City',
sex int NOT NULL COMMENT 'Gender',
id_number varchar NOT NULL COMMENT 'ID card number',
home_address varchar NOT NULL COMMENT 'Home address',
office_address varchar NOT NULL COMMENT 'Office address',
age int NOT NULL COMMENT 'Age',
login_time timestamp NOT NULL COMMENT 'Logon time',
PRIMARY KEY (login_time, customer_id, phone_num)
)
DISTRIBUTED BY HASH(customer_id)
PARTITION BY VALUE(DATE_FORMAT(login_time, '%Y%m%d')) LIFECYCLE 30
COMMENT 'Customer information table';CREATE TABLE courses (
id bigint AUTO_INCREMENT PRIMARY KEY,
name varchar(20) NOT NULL,
grade varchar(20) DEFAULT 'Grade 3',
submission_date timestamp
)
DISTRIBUTED BY HASH(id);
Menyisipkan satu baris dengan nama kolom eksplisit
Tentukan nama setiap kolom agar urutan penyisipan tidak bergantung pada definisi tabel.
INSERT INTO customer (customer_id, customer_name, phone_num, city_name, sex, id_number, home_address, office_address, age, login_time)
VALUES
(002367, 'Alan', '13900001234', 'Hangzhou', 0, '987300', 'West Lake', 'Cloud Town', 23, '2018-03-02 10:00:00');
Menyisipkan satu baris tanpa nama kolom
Abaikan nama kolom jika urutan nilai sesuai persis dengan definisi CREATE TABLE.
INSERT INTO customer
VALUES
(002367, 'Alan', '13900001234', 'Hangzhou', 0, '987300', 'West Lake', 'Cloud Town', 23, '2018-03-02 10:00:00');
Menyisipkan beberapa baris
Gabungkan beberapa baris dalam satu pernyataan untuk mengurangi jumlah round trip.
INSERT INTO customer (customer_id, customer_name, phone_num, city_name, sex, id_number, home_address, office_address, age, login_time)
VALUES
(002367, 'Tom', '13900001234', 'Hangzhou', 0, '987300', 'West Lake', 'Cloud Town', 23, '2018-03-02 10:00:00'),
(002368, 'Alex', '13900001111', 'Hangzhou', 0, '987300', 'West Lake', 'Cloud Town', 28, '2018-08-01 11:00:00'),
(002369, 'Eric', '13900002222', 'Hangzhou', 1, '987300', 'West Lake', 'Cloud Town', 35, '2018-09-12 08:11:00');
Menyisipkan beberapa baris tanpa menentukan nama kolom
Jika urutan nilai sesuai persis dengan definisi CREATE TABLE, Anda dapat menghilangkan nama kolom untuk menyisipkan beberapa baris sekaligus.
INSERT INTO customer
VALUES
(002367, 'Tom', '13900001234', 'Hangzhou', 0, '987300', 'West Lake', 'Cloud Town', 23, '2018-03-02 10:00:00'),
(002368, 'Alex', '13900001111', 'Hangzhou', 0, '987300', 'West Lake', 'Cloud Town', 28, '2018-08-01 11:00:00'),
(002369, 'Eric', '13900002222', 'Hangzhou', 1, '987300', 'West Lake', 'Cloud Town', 35, '2018-09-12 08:11:00');
Memperbarui baris yang sudah ada saat terjadi duplikat kunci
ON DUPLICATE KEY UPDATE memperbarui kolom tertentu ketika baris yang dimasukkan bertabrakan dengan primary key yang sudah ada, alih-alih mengabaikan konflik tersebut.
INSERT INTO customer
VALUES
(002367, 'Alan', '13900001234', 'Hangzhou', 0, '987300', 'West Lake', 'Cloud Town', 23, '2018-03-02 10:00:00')
ON DUPLICATE KEY
UPDATE age = 23;
Perilaku defaultINSERT INTOdi AnalyticDB for MySQL setara denganINSERT IGNORE INTO. PenggunaanON DUPLICATE KEY UPDATEmengganti perilaku tersebut dengan melakukan pembaruan alih-alih mengabaikan konflik.
Menyisipkan baris dengan kolom timestamp
Gunakan NOW() untuk mencatat timestamp saat ini pada waktu penyisipan.
INSERT INTO courses (name, submission_date)
VALUES ('Jams', NOW());
Menyisipkan baris dari hasil kueri
Gunakan pernyataan SELECT sebagai sumber data. Untuk sintaksis dan contoh, lihat INSERT SELECT FROM.
Langkah selanjutnya
-
INSERT SELECT FROM — menyisipkan hasil kueri dari tabel lain
-
CREATE TABLE — mendefinisikan skema tabel, kunci distribusi, dan partisi