id 怎么不是按顺序?

-- 用户表 user1
CREATE TABLE user1 (
id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT KEY COMMENT '编号',
username VARCHAR(20) NOT NULL UNIQUE COMMENT '用户名',
email VARCHAR(50) NOT NULL DEFAULT '123456789@qq.com' COMMENT '邮箱',
proName TINYINT NOT NULL COMMENT '省份'
)engine=Innodb charset=utf8;
INSERT user1(username,proName) values('a',1),
('b',1),
('c',1),
('d',2),
('e',3),
('f',3),
('g',1);
select username,proName from user1;
-- 省份表 pro
create table pro (
id tinyint unsigned not null auto_increment key,
proName varchar(10) not null unique
)engine=innodb charset=utf8;
insert pro(proName) values('北京'),('上海'),('深圳');
-- 查询user: id ,username ;pro: proName
select u.id,u.username,p.proName
from user1 as u
join pro as p
on u.id=p.id;25
收起
正在回答
3回答
同学你好,这是因为受编码方式的影响,使用utf-8字符集排序时,汉字排序并不是按照字母顺序来排序的,所以就会出现同学所说的有按照顺序的排序。
我们如果修改一下字符编码,改为GBK就会按照汉字顺序来排序了,比如,老师写的小例子

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
好帮手慕小班
2019-12-12 11:13:59
同学你好,
运行同学代码,id没有按照顺序是因为在pro表中的id的顺序是没有正常排序,例:

所以对应连接查询的结果也是如上所示的内容。对应我们可以发现pro表中的id没有按照顺序,解决办法,删除这个id主键,重新插入这个主键的字段。
ALTER TABLE `pro` DROP `id`; ALTER TABLE `pro` ADD `id` MEDIUMINT( 3 ) NOT NULL FIRST; ALTER TABLE `pro` MODIFY COLUMN `id` MEDIUMINT( 3 ) NOT NULL AUTO_INCREMENT,ADD PRIMARY KEY(id);
执行如上代码内容后,再来执行查询内容

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
3. Java 数据库开发与实战应用
- 参与学习 人
- 提交作业 357 份
- 解答问题 8016 个
本阶段将带你学习MySQL数据库,JDBC接口,MyBatis框架等,带你掌握的数据的存放和管理。
了解课程

恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星