You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL主键自动插入与关联表属性查询技术问询

问题解答

1. 配置MySQL自动生成主键值

要实现新增数据时无需手动指定主键、自动生成主键值,只需在创建表时给主键字段添加AUTO_INCREMENT属性:

  • 定义主键时使用INT PRIMARY KEY AUTO_INCREMENT(这是MySQL中最常用的自动主键配置方式,MySQL 8.0+也支持GENERATED ALWAYS AS IDENTITY,但兼容性稍弱)
  • 插入数据时,字段列表中无需包含主键字段,数据库会自动为该字段生成递增的唯一值

你的示例guest表已经完成了正确配置:

CREATE TABLE guest
(
    IDguest int primary key auto_increment,
    firstname varchar(255) not null,
    lastname varchar(255) not null
);

此时插入数据可简化为:

INSERT INTO guest (firstname, lastname) VALUES('Isabell', 'ExamplewomanB');

MySQL会自动生成下一个递增的IDguest值(示例中已有ID 1、2,新插入的条目会得到IDguest=3)。

注意:如果手动指定未被占用的主键值,MySQL会优先使用该值,后续自动生成的主键会从该值的下一位开始递增。

2. 查询关联表属性值及修正查询语句

获取关联表属性的方法

要获取关联表的属性而非外键ID,需通过JOIN操作关联目标表,并在SELECT子句中明确指定要查询的关联表字段(如guest.firstname、guest.lastname),避免使用SELECT *返回冗余数据。

原查询语句的问题及修正

你的原查询存在两处关键错误:

  1. begin和end是MySQL的保留关键字,直接使用会触发语法错误,必须用反引号`包裹字段名
  2. 日期比较逻辑错误:'2022-07-11' between 'begin' and 'end'是将字符串与字符串对比,而非与字段值对比——单引号包裹的'begin'会被识别为普通字符串,而非booking表的字段

修正后的正确查询语句:

SELECT guest.firstname, guest.lastname
FROM booking
INNER JOIN guest ON guest.IDguest = booking.guestID
WHERE '2022-07-11' BETWEEN `begin` AND `end`;

该语句会返回2022-07-11当天在住的客人姓名(对应示例数据中的Otto Exampleman)。


内容的提问来源于stack exchange,提问作者maximiliansport

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 07:54:22