菜鸟科技网

SQL中插入记录的命令是什么?

在SQL(结构化查询语言)中,插入记录是数据库操作中最基本且频繁使用的功能之一,主要用于向数据库表中的添加新的数据行,SQL中插入记录的核心命令是INSERT INTO,该命令允许用户按照表的结构向指定列插入数据,同时支持多种灵活的插入方式,以满足不同的业务需求,本文将详细介绍INSERT INTO命令的语法、使用方法、注意事项以及常见场景,帮助读者全面掌握SQL中插入记录的操作。

SQL中插入记录的命令是什么?-图1
(图片来源网络,侵删)

INSERT INTO命令的基本语法

INSERT INTO命令的基本语法结构如下:

INSERT INTO 表名 (列1, 列2, 列3, ...)
VALUES (值1, 值2, �3, ...);
  • 表名:指定要插入数据的表,必须为数据库中已存在的表。
  • (列1, 列2, 列3, ...):可选参数,指定要插入数据的列名,如果省略,则默认为表的所有列,但需确保VALUES子句中的值顺序与表中列的顺序完全一致。
  • VALUES (值1, 值2, 倃3, ...):必选参数,提供要插入的具体数据值,值的数量、类型和顺序必须与列名子句中的列一一对应。

假设有一个名为students的表,包含id(学号)、name(姓名)、age(年龄)和gender(性别)四列,向该表插入一条新记录的SQL语句为:

INSERT INTO students (id, name, age, gender)
VALUES (1, '张三', 18, '男');

INSERT INTO命令的常见用法

  1. 插入部分列的数据
    如果某些列允许为空(NULL)或设置了默认值,可以只插入部分列的数据。students表中的id列可能为主键且自增,此时无需手动插入id值:

    INSERT INTO students (name, age, gender)
    VALUES ('李四', 19, '女');
  2. 插入多行数据
    部分数据库(如MySQL、SQL Server)支持一次性插入多行数据,语法为:

    SQL中插入记录的命令是什么?-图2
    (图片来源网络,侵删)
    INSERT INTO 表名 (列1, 列2, ...)
    VALUES 
    (值1_1, 值1_2, ...),
    (值2_1, 值2_2, ...),
    ...;
    INSERT INTO students (name, age, gender)
    VALUES 
    ('王五', 20, '男'),
    ('赵六', 21, '女');
  3. 从其他表插入数据
    使用INSERT INTO ... SELECT语句可以从一个或多个表中查询数据并插入到目标表中,语法为:

    INSERT INTO 目标表 (列1, 列2, ...)
    SELECT 列1, 列2, ...
    FROM 源表
    WHERE 条件;

    temp_students表中年龄大于18岁的学生插入到students表:

    INSERT INTO students (name, age, gender)
    SELECT name, age, gender
    FROM temp_students
    WHERE age > 18;

数据类型与约束的注意事项

插入数据时,必须确保值的类型与列的数据类型兼容,否则会报错。

  • 数值型列(如INTDECIMAL)不能插入字符串。
  • 日期型列(如DATEDATETIME)需符合特定格式(如'2023-10-01')。
  • 字符串和日期值需用单引号()包围,数值则无需引号。

还需注意表的约束条件:

SQL中插入记录的命令是什么?-图3
(图片来源网络,侵删)
  • 主键约束:主键列的值必须唯一且非空,如果插入重复的主键值,数据库会拒绝操作并报错。
  • 外键约束:插入的外键值必须在被引用的表中存在,否则会违反参照完整性。
  • 非空约束:具有NOT NULL约束的列必须提供值,否则插入失败。
  • 唯一约束:具有UNIQUE约束的列不能插入重复值。

使用表格总结INSERT INTO命令的常见场景

场景 SQL示例 说明
插入完整行数据 INSERT INTO students VALUES (1, '张三', 18, '男'); 省略列名时,需按表列顺序提供所有值
插入部分列数据 INSERT INTO students (name, age) VALUES ('李四', 19); 适用于有默认值或允许NULL的列
插入多行数据 INSERT INTO students VALUES (2, '王五', 20, '男'), (3, '赵六', 21, '女'); 需数据库支持多行插入语法
从查询插入数据 INSERT INTO students SELECT * FROM temp_students WHERE id = 1; 将查询结果批量插入目标表

相关问答FAQs

Q1: 如果插入的数据违反了主键约束,会发生什么?
A1: 当插入的数据导致主键列出现重复值或主键列为NULL时,数据库会拒绝该操作并返回错误提示,在students表中尝试插入id为1的重复记录时,MySQL会报错:Duplicate entry '1' for key 'PRIMARY',解决方法包括检查数据唯一性或使用ON DUPLICATE KEY UPDATE语法(MySQL)覆盖已有数据。

Q2: 如何在插入数据时自动生成时间戳?
A2: 如果表中包含DATETIMETIMESTAMP类型的列(如create_time),可以在插入数据时使用数据库函数自动生成当前时间,在MySQL中:

INSERT INTO students (name, age, gender, create_time)
VALUES ('钱七', 22, '男', NOW());

create_time列的值会被设置为当前系统时间,若需在创建表时默认自动填充时间,可在列定义中使用DEFAULT CURRENT_TIMESTAMP

分享:
扫描分享到社交APP
上一篇
下一篇