すべてのプロダクト
Search
ドキュメントセンター

AnalyticDB:INSERT INTO

最終更新日:Aug 22, 2026

テーブルに行を挿入します。AnalyticDB for MySQL では、INSERT INTOINSERT IGNORE INTO のように動作します。挿入する行のプライマリキーが既存の行と重複する場合、競合する行は上書きされずに暗黙的に無視されます。

構文

INSERT [IGNORE]
    INTO table_name
    [( column_name [, ...] )]
    [VALUES]
    [(value_list[, ...])]
    [query];

パラメーター

パラメーター 必須 説明
IGNORE いいえ プライマリキーが既存の行と重複する行をスキップします。
column_name いいえ ターゲット列の名前。
query 結果がテーブルに挿入される SELECT 文。

注意事項

列名を省略した場合、VALUES リストの値は、CREATE TABLE 文で定義された列と同じ順序で指定する必要があります。

以下の例では、次に示すように定義された customercourses の 2 つのテーブルを使用します。

CREATE TABLE customer (
  customer_id bigint NOT NULL COMMENT '顧客 ID',
  customer_name varchar NOT NULL COMMENT '顧客名',
  phone_num bigint NOT NULL COMMENT '電話番号',
  city_name varchar NOT NULL COMMENT '都市',
  sex int NOT NULL COMMENT '性別',
  id_number varchar NOT NULL COMMENT 'ID カード番号',
  home_address varchar NOT NULL COMMENT '自宅住所',
  office_address varchar NOT NULL COMMENT '勤務先住所',
  age int NOT NULL COMMENT '年齢',
  login_time timestamp NOT NULL COMMENT 'ログイン時刻',
  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 '顧客情報テーブル';
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);

列名を明示的に指定して単一行を挿入する

各列名を指定することで、テーブル定義とは無関係な順序で挿入できます。

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');

列名を指定せずに単一行を挿入する

値の順序が CREATE TABLE の定義と完全に一致する場合は、列名を省略できます。

INSERT INTO customer
VALUES
  (002367, 'Alan', '13900001234', 'Hangzhou', 0, '987300', 'West Lake', 'Cloud Town', 23, '2018-03-02 10:00:00');

複数行を挿入する

複数行を 1 つの文にまとめることで、ラウンドトリップを削減できます。

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');

列名を指定せずに複数行を挿入する

値の順序が CREATE TABLE の定義と完全に一致する場合、複数行にわたって列名を省略できます。

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');

キーが重複した場合に既存の行を更新する

ON DUPLICATE KEY UPDATE を使用すると、挿入された行が既存のプライマリキーと競合した場合に、競合を無視する代わりに特定の列を更新します。

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 における INSERT INTO のデフォルトの動作は INSERT IGNORE INTO と同等です。ON DUPLICATE KEY UPDATE はその動作をオーバーライドし、競合を無視する代わりに更新を実行します。

タイムスタンプ列を持つ行を挿入する

NOW() を使用して、挿入時の現在のタイムスタンプを記録します。

INSERT INTO courses (name, submission_date)
VALUES ('Jams', NOW());

クエリ結果から行を挿入する

SELECT 文をデータソースとして使用します。構文と例については、「INSERT SELECT FROM」をご参照ください。

次のステップ

  • INSERT SELECT FROM — 別のテーブルからクエリ結果を挿入する

  • CREATE TABLE — テーブルスキーマ、分散キー、パーティションを定義する