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 *返回冗余数据。
原查询语句的问题及修正
你的原查询存在两处关键错误:
begin和end是MySQL的保留关键字,直接使用会触发语法错误,必须用反引号`包裹字段名- 日期比较逻辑错误:
'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
相关产品推荐
相关产品推荐

