Insere linhas em uma tabela. No AnalyticDB for MySQL, o comando INSERT INTO funciona como INSERT IGNORE INTO: se uma linha inserida tiver a mesma chave primária de uma linha existente, o sistema ignorará silenciosamente a linha conflitante em vez de sobrescrevê-la.
Sintaxe
INSERT [IGNORE]
INTO table_name
[( column_name [, ...] )]
[VALUES]
[(value_list[, ...])]
[query];
Parâmetros
|
Parâmetro |
Obrigatório |
Descrição |
|
|
Não |
Ignora qualquer linha cuja chave primária duplique uma linha existente. |
|
|
Não |
Nome da coluna de destino. |
|
|
— |
Instrução |
Observações de uso
Se você omitir os nomes das colunas, os valores na lista VALUES devem seguir a mesma ordem das colunas definidas na instrução CREATE TABLE.
Exemplos
Os exemplos a seguir usam duas tabelas — customer e courses — definidas conforme mostrado abaixo.
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);
Inserir uma única linha com nomes explícitos de colunas
Especifique cada nome de coluna para tornar a ordem de inserção independente da definição da tabela.
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');
Inserir uma única linha sem nomes de colunas
Omita os nomes das colunas quando a ordem dos valores corresponder exatamente à definição do CREATE TABLE.
INSERT INTO customer
VALUES
(002367, 'Alan', '13900001234', 'Hangzhou', 0, '987300', 'West Lake', 'Cloud Town', 23, '2018-03-02 10:00:00');
Inserir várias linhas
Agrupe várias linhas em uma única instrução para reduzir idas e vindas ao banco de dados.
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');
Inserir várias linhas sem especificar nomes de colunas
Se a ordem dos valores corresponder exatamente à definição do CREATE TABLE, omita os nomes das colunas em várias linhas.
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');
Atualizar uma linha existente em caso de chave duplicada
A cláusula ON DUPLICATE KEY UPDATE atualiza uma coluna específica quando uma linha inserida entra em conflito com uma chave primária existente, em vez de ignorar o conflito.
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;
O comportamento padrão doINSERT INTOno AnalyticDB for MySQL equivale aoINSERT IGNORE INTO. O uso deON DUPLICATE KEY UPDATEsubstitui esse comportamento e executa uma atualização em vez de ignorar o conflito.
Inserir uma linha com uma coluna de timestamp
Use NOW() para registrar o timestamp atual no momento da inserção.
INSERT INTO courses (name, submission_date)
VALUES ('Jams', NOW());
Inserir linhas a partir do resultado de uma consulta
Use uma instrução SELECT como source de dados. Para sintaxe e exemplos, consulte INSERT SELECT FROM.
Próximos passos
INSERT SELECT FROM — insere resultados de consultas de outra tabela
CREATE TABLE — define o esquema da tabela, as chaves de distribuição e as partições