Используя пользовательские переменные, вы можете имитировать функцию row_number.
Помните, что #, назначенный каждому человеку, может меняться каждый раз, когда выполняется запрос. Заказ по дате может быть изменен вместо имени, но если произойдет вставка, обновление или удаление, которое добавит новую запись, удалит ее или изменит дату, зарегистрированную до времени, может изменить эту нумерацию.
SELECT A.*, @rn := @rn+1 as Row
FROM aTable A
CROSS JOIN (Select @rn :=0) B
ORDER BY Name
Working SQL fiddle
Теперь, если вы хотите постоянный идентификатор ... обязательно изменить обновление, чтобы изменить заказ на ваше поле даты, если вы хотите идентификаторы быть положенными в порядке дата, но это действительно не имеет значения, поскольку ПК, созданный таким образом (ключ Суррогата), не имеет никакого значения, кроме уникальной идентификации записи.
create table atable (
name varchar(10),
age int);
Insert into atable values
('Joe',30),
('Henry',24),
('Rick',55),
('Tom',19);
ALTER table atable add column ID int;
Update atable
INNER JOIN (
SELECT A.*, @rn := @rn+1 as Row
FROM aTable A
CROSS JOIN (Select @rn :=0) B
ORDER BY Name) B
on atable.Name = B.Name
and atable.Age = B.Age
set atable.id = B.Row;
ALTER TABLE atable MODIFY ID int NOT NULL primary key AUTO_INCREMENT;
Working fiddle
заказа не является составной частью таблицы. Когда вы будете работать со временем, Том может быть 5 на один прогон 3 на другой и 10 позже. У вас может быть система GENERATE номер строки для каждого запуска запроса с использованием пользовательских переменных; но, как указано ранее, заказ не гарантируется, поэтому строка № может меняться со временем. 'SELECT A. *, @rn: = @ rn + 1 as Row from TableName Перекрестное соединение (Select @rn: = 0) B order by Name' – xQbert
@xQbert Могу ли я знать, как это сделать? –
Строки представляют собой неупорядоченные множества. Таким образом, нет такой вещи, как «номер строки». Итак, в каком смысле Том в строке 5? – Strawberry