Bir tabloya satır ekler. AnalyticDB for MySQL'de INSERT INTO ifadesi INSERT IGNORE INTO gibi çalışır: Eklenen bir satırın birincil anahtarı mevcut bir satırla aynıysa çakışan satır üzerine yazılmaz, sessizce yok sayılır.
Sözdizimi
INSERT [IGNORE]
INTO table_name
[( column_name [, ...] )]
[VALUES]
[(value_list[, ...])]
[query];
Parametreler
| Parametre | Zorunlu | Açıklama |
|---|---|---|
IGNORE |
Hayır | Birincil anahtarı mevcut bir satırla aynı olan satırları atlar. |
column_name |
Hayır | Hedef sütunun adı. |
query |
— | Sonuçları tabloya eklenen bir SELECT deyimidir. |
Kullanım notları
Sütun adlarını belirtmezseniz VALUES listenizdeki değerlerin sırası, CREATE TABLE deyimiyle tanımlanan sütun sırasıyla aynı olmalıdır.
Örnekler
Aşağıdaki örneklerde aşağıda gösterildiği şekilde tanımlanan customer ve courses tabloları kullanılmaktadır.
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);
Açık sütun adlarıyla tek bir satır ekleme
Ekleme sırasının tablo tanımından bağımsız olması için her sütun adını belirtin.
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');
Sütun adları olmadan tek bir satır ekleme
Değer sırası CREATE TABLE tanımıyla tam olarak eşleşiyorsa sütun adlarını atlayabilirsiniz.
INSERT INTO customer
VALUES
(002367, 'Alan', '13900001234', 'Hangzhou', 0, '987300', 'West Lake', 'Cloud Town', 23, '2018-03-02 10:00:00');
Birden çok satır ekleme
Gidiş-dönüş trafiğini azaltmak için birden çok satırı tek bir deyimde gruplayın.
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');
Sütun adları belirtilmeden birden çok satır ekleme
Değer sırası CREATE TABLE tanımıyla tam olarak eşleştiğinde birden çok satır için sütun adlarını atlayabilirsiniz.
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');
Yineleyen anahtar durumunda mevcut satırı güncelleme
ON DUPLICATE KEY UPDATE ifadesi, eklenen satır mevcut bir birincil anahtarla çakıştığında çakışmayı yok saymak yerine belirli bir sütunu günceller.
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;
AnalyticDB for MySQL'de varsayılanINSERT INTOdavranışıINSERT IGNORE INTOile eşdeğerdir.ON DUPLICATE KEY UPDATEbu davranışı geçersiz kılar ve çakışmayı yok saymak yerine güncelleme yapar.
Zaman damgası sütunu içeren bir satır ekleme
Ekleme anındaki geçerli zaman damgasını kaydetmek için NOW() işlevini kullanın.
INSERT INTO courses (name, submission_date)
VALUES ('Jams', NOW());
Sorgu sonucundan satır ekleme
Veri kaynağı olarak bir SELECT deyimi kullanın. Sözdizimi ve örnekler için bkz. INSERT SELECT FROM.
Sonraki adımlar
INSERT SELECT FROM — başka bir tablodan sorgu sonuçlarını ekleme
CREATE TABLE — tablo şemasını, dağıtım anahtarlarını ve bölümleri tanımlama