INSERT
功能描述
在表中插入新的数据。
INSERT语句有三种形式:
- 第一种是值插入,即构造一行记录并插入到表中。
- 第二种形式是查询插入,它通过SELECT子句返回的结果集构造一行或多行记录插入到表中。
- 第三种是先插入记录,如果报主键冲突错误则执行UPDATE操作,更新指定字段值。
注意事项
- 执行该语句的用户需要有表的INSERT权限或者INSERT ANY TABLE的系统权限。普通用户不允许insert系统SYS用户对象。
- INSERT事务提交是默认关闭的。会话退出时,需要显式COMMIT,否则记录将丢失。
- INSERT ...SELECT形式,select_list列数必须与待插入的字段数一样。
- INSERT中单行数据量需小于64000字节。
语法格式
- 值插入。
INSERT [hint_info] [IGNORE] [ INTO ] [ schema_name. ]table_name [ ( column_name [ , ... ] ) ] VALUES ( expression [ , ... ] )
- 查询插入。
INSERT [IGNORE] [ INTO ] [ schema_name. ]table_name [table_alais][ ( column_name [ , ... ] ) ]select_clause
- select_clause
SELECT [ DISTINCT ] select_list FROM table_list [ where_clause ] [ group_by_clause ] [ order_by_clause ] [ limit_clause ]
- 主键冲突错误,执行UPDATE操作。
INSERT [ INTO ] [ schema_name. ]table_name [ ( column_name [ , ... ] ) ] VALUES ( expression [ , ... ] ) ON DUPLICATE KEY UPDATE {column_name = expression} [ , ... ]
参数说明
- IGNORE
用于忽略会导致重复关键字错误的记录,不支持和ON DUPLICATE KEY UPDATE 同时使用。
- table_name
待插入的表名。
- column_name
待插入的表字段名。
如果insert语句所指定的字段名包含表中的所有字段,则可能省略字段名。
取值范围:已存在的字段名。
- expression
插入字段的值或表达式。
- select_clause
SELECT查询结果集作为新值插入到表中,具体参数,参考select章节。
- select_list
指定查询列。
- table_list
指定查询表,可以是表、视图、子查询。
- DISTINCT
关键字,表示查询结果集是否需要去重。
取值范围:已存在的字段名,或字段表达式。
- where_clause
指定查询结果集要满足的条件。
- group_by_clause
指定查询结果集要满足的分组规则。
- order_by_clause
指定查询结果集要满足的排序规则。
- limit_clause
指定查询结果集要满足的界限。
- ON DUPLICATE KEY UPDATE
指定插入记录的主键和已有记录的主键冲突时执行UPDATE操作。根据索引定义的顺序遍历各列查找冲突记录。例如,表t1包含三列,列名分别为f1、f2、f3,索引建立顺序为f3->f2->f1,那么在插入记录的主键和已有记录的主键冲突时,GaussDB 100通过遍历列数据查找冲突的顺序为f3->f2->f1。
示例
向表trainning中插入数据。--删除表training。 DROP TABLE IF EXISTS training;
--创建表training。 CREATE TABLE training(staff_id INT NOT NULL PRIMARY KEY,course_name CHAR(50),course_start_date DATETIME, course_end_date DATETIME,exam_date DATETIME,score INT);
--向表training中插入记录1。 INSERT INTO training(staff_id,course_name,course_start_date,course_end_date,exam_date,score) VALUES(10,'SQL majorization','2017-06-15 12:00:00','2017-06-20 12:00:00','2017-06-25 12:00:00',90); --向表training中插入记录2。 INSERT INTO training(staff_id,course_name,course_start_date,course_end_date,exam_date,score) VALUES(11,'information safety','2017-06-20 12:00:00','2017-06-25 12:00:00','2017-06-26 12:00:00',95); --向表training中插入记录3。 INSERT INTO training(staff_id,course_name,course_start_date,course_end_date,exam_date,score) VALUES(12,'master all kinds of thinking methonds','2017-07-15 12:00:00','2017-07-20 12:00:00','2017-07-25 12:00:00',97); --提交事务。 COMMIT;
--向表training插入记录5时,主键冲突执行update操作。 INSERT INTO TRAINING VALUES (12,'INFORMATION234','2018-06-20 12:00:00','2018-06-25 12:00:00','2018-06-26 12:00:00',94) ON DUPLICATE KEY UPDATE STAFF_ID=STAFF_ID,COURSE_NAME='INFORMATION234',COURSE_START_DATE='2018-06-20 12:00:00', COURSE_END_DATE='2018-06-25 12:00:00', EXAM_DATE='2018-06-23 12:00:00',SCORE=88; --提交事务。 COMMIT;
「喜欢文章,快来给作者赞赏墨值吧」【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。评论
- 主键冲突错误,执行UPDATE操作。
- 查询插入。