mysql 利用@rownum生成自定义排序值
一、定义表结构
CREATE TABLE `t_student` (
`id` int(12) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`stunum` varchar(12) DEFAULT NULL COMMENT '学号',
`stuname` varchar(45) DEFAULT NULL COMMENT '姓名',
`stuage` int(3) DEFAULT NULL COMMENT '年龄',
`stusex` varchar(2) DEFAULT NULL COMMENT '性别',
`stubirthday` varchar(45) DEFAULT NULL COMMENT '生日',
`stuhobby` varchar(45) DEFAULT NULL COMMENT '爱好',
`age_rank` int(11) DEFAULT NULL COMMENT '年龄升序排序值',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=34 DEFAULT CHARSET=utf8;
二、创建测试存储过程
DROP PROCEDURE IF EXISTS insert_loop;
delimiter //
CREATE PROCEDURE insert_loop (count INT)
BEGIN
DECLARE i INT DEFAULT 1 ;
START TRANSACTION ;
WHILE i <= count DO
INSERT INTO t_student (stunum, stuage)
VALUE
(
CONCAT('0901', LPAD(i, 5, '0')),
FLOOR(18 + RAND() * 5)
) ;
SET i = i + 1 ;
END WHILE ;
COMMIT ;
END//
delimiter ;
三、执行存储过程,插入10w条测试数据
CALL insert_loop(100000);
四、mysql 利用@rownum生成自定义排序值
UPDATE t_student s set s.age_rank=(
SELECT rownum from
(SELECT
@rownum :=@rownum + 1 AS rownum,
t.id
FROM
t_student t,
(SELECT @rownum := 0) r
ORDER BY
stuage ASC) b
where s.id=b.id
);
受影响的行: 100001
时间: 2.829s
5、执行结果