当前位置:首页 > 问答 > 正文

数据库里怎么写代码才能顺利加数据,步骤和注意点都说说吧

要给数据库里加数据,也就是我们常说的“增”操作,核心是使用 INSERT 语句,但要想顺利加进去,不出错,光知道这一句可不够,得注意不少细节,下面我一步步跟你说。

第一步:想清楚往哪个表加

数据库里通常有很多表,就像一个大仓库里有很多不同的货架,你首先得明确,你这批新货物要放到哪个货架上,这个“货架”的名字就是表名,你有一个叫 users 的表,专门存放用户信息。

第二步:搞清楚表里有哪些“格子”

确定了货架,你还要知道这个货架上有哪些格子,每个格子是放什么的,这些“格子”就是表的或者叫字段users 表里可能有 id, name, age, email 这几个格子,你最好弄清楚:

  • 每个格子的名字是什么。
  • 每个格子允许放什么类型的数据?是数字、文字还是日期?(id 是数字,name 是文字)。
  • 哪些格子是必须要有东西的,不能为空?(name 可能必须填,而 age 可以不填)。
  • 有没有哪个格子的数据是不能重复的?(email 邮箱地址通常要求唯一)。

这些信息就是表的结构,在加数据之前,花点时间看清楚结构,能避免大部分错误,你可以用数据库管理工具(Navicat, DBeaver)或者像 DESCRIBE users; 这样的命令来查看。

第三步:准备要加的数据

数据库里怎么写代码才能顺利加数据,步骤和注意点都说说吧

根据第二步了解到的格子信息,把你要添加的数据准备好,这里有几个关键点:

  1. 数据类型要对得上:要求是数字的格子,你就不能塞一段文字进去,要求是日期的,就要写成 ‘2023-10-27’ 这样的标准格式。
  2. 不能为空的格子必须有值name 格子规定不能为空,那你加数据时,name 就一定要提供一个值,否则数据库会拒绝。
  3. 唯一性约束要遵守email 要求唯一,而你准备添加的邮箱已经存在于表里了,那么这次添加就会失败。
  4. 注意字符串的引号:在写代码时,所有文字类型的数据(比如姓名、地址)都必须用单引号 括起来,数字和 NULL(表示空值)则不需要,这是最容易出错的地方之一。‘张三’ 是对的,而直接写 张三 就会报错。

第四步:编写 INSERT 语句

这是核心步骤。INSERT 语句有两种常见的写法:

指定列名(推荐,尤其对新手)

INSERT INTO 表名 (列名1, 列名2, 列名3, ...)
VALUES (值1, 值2, 值3, ...);

举个例子,往 users 表里加一个叫李四,年龄25岁,邮箱是 lisi@example.com 的用户(假设 id 是自动生成的,不用我们管):

数据库里怎么写代码才能顺利加数据,步骤和注意点都说说吧

INSERT INTO users (name, age, email)
VALUES (‘李四’, 25, ‘lisi@example.com’);

这种写法的好处是清晰、安全、灵活

  • 清晰:一眼就能看出哪个值对应哪个列。
  • 安全:即使表的结构以后增加了新列,这个语句通常还能正常工作。
  • 灵活:允许你只为部分列插入数据,其他列采用默认值或 NULL,比如上面例子就没管 id

不指定列名(需要特别小心)

INSERT INTO 表名
VALUES (值1, 值2, 值3, ...);

这种写法要求你提供的值的顺序、数量必须和表结构中定义的列的顺序、数量完全一致,还用上面的例子,users 表的结构是 (id, name, age, email)id 是自动生成的,你不能简单地写成:

INSERT INTO users
VALUES (‘李四’, 25, ‘lisi@example.com’); -- 这会报错!

因为你这个语句只提供了3个值,但表有4个列,即使你想让 id 自动生成,你也必须用 NULLDEFAULT 来占位(具体取决于数据库设置),这很容易搞错。强烈建议新手始终使用第一种写法

第五步:执行并检查结果

数据库里怎么写代码才能顺利加数据,步骤和注意点都说说吧

写好了语句,在你的数据库管理工具中执行它,如果成功,你通常会看到一个提示,影响一行”,这时候,你可以用一个 SELECT * FROM users; 语句查询一下,看看数据是不是真的已经按照你预期的方式加进去了。

执行前后的重要注意点

  1. 事务的重要性(高级但实用):当你需要一次性添加多条相互关联的数据时(创建一个新订单的同时,还要添加订单里的多个商品项),一定要使用事务,事务可以把多个 INSERT 语句打包成一个整体,要么全部成功,要么全部失败,这样可以避免出现数据不一致的情况(比如订单创建了,但商品项没加上),基本用法是:

    BEGIN TRANSACTION; -- 开始事务
    INSERT INTO orders ...; -- 插入订单
    INSERT INTO order_items ...; -- 插入订单商品项1
    INSERT INTO order_items ...; -- 插入订单商品项2
    COMMIT; -- 如果上面都成功了,提交事务
    -- 如果中途出错,可以执行 ROLLBACK; 回滚,所有操作取消
  2. 批量插入:如果需要加入大量数据,一条一条地执行 INSERT 效率极低,应该使用批量插入功能,不同数据库语法略有不同,但思想一样,MySQL 可以:

    INSERT INTO users (name, age)
    VALUES (‘张三’, 20),
           (‘李四’, 25),
           (‘王五’, 30);

    这样一次就能加三条数据,速度快很多。

  3. 权限问题:你可能遇到了所有步骤都对,但就是加不进去数据的情况,这时候要检查一下你登录数据库的这个账号,有没有对这张表进行插入(INSERT)操作的权限,没有权限的话,需要找管理员给你开通。

  4. 外键约束:如果表A里的某个列,指向了表B的主键(orders 表里有个 user_id 指向 users 表的 id),那么你在往表A加数据时,你填写的 user_id 必须在表B中真实存在,否则,数据库会拒绝插入,这叫外键约束,是为了保证数据之间的关联正确性。

顺利加数据的流程就是:看清表结构 -> 准备合规数据 -> 用指定列名的INSERT语句 -> 执行并验证,过程中时刻注意数据类型、空值约束、唯一约束这些关键点,复杂操作用好事务,批量操作追求效率,多练几次,就熟练了。