Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > обновить значения для primary key


Автор: linderox 15.3.2009, 11:33
после удаления некоторых полей из таблицы хочу поменять значения для primary key, чтобы навести порядок в записях. хочу это сделать так, чтобы не было пробелов в нумерации. как это можно сделать?
у меня Codeigniter - может там есть что-то уже встроенное?

Автор: bars80080 16.3.2009, 10:55
Цитата(linderox @  15.3.2009,  10:33 Найти цитируемый пост)
после удаления некоторых полей из таблицы хочу поменять значения для primary key, чтобы навести порядок в записях. хочу это сделать так, чтобы не было пробелов в нумерации. как это можно сделать?

не помню ни одного случая, когда упорядочивание уникального идентификатора не было бы злом. обрисуйте зачем вам это нужно

Автор: linderox 16.3.2009, 14:32
просто стало интересно! можно или нельзя и как это сделать

Автор: bars80080 16.3.2009, 14:42
это разрушит структуру ваших данных. идентификатор не должен упорядочиваться


а что не получается просто слить данные в массив или файл, а затем обратно залить, где в primary key записывать порядковый номер записи, а не прежний id

правда, если поле auto_increment, то потребуется дополнительно удалить таблицу и заново пересоздать

Автор: pompei 17.3.2009, 04:46
Не понимаю в чём проблемма.
Код

mysql> create table asd(id int primary key auto_increment, name varchar(255));
Query OK, 0 rows affected (0.00 sec)

mysql> insert into asd(name)values('asd');
Query OK, 1 row affected (0.01 sec)

mysql> select * from asd;
+----+------+
| id | name |
+----+------+
|  1 | asd  |
+----+------+
1 row in set (0.00 sec)

          -- вот просто update-ом изменяем первичный ключ с автоинкрементом
mysql> update asd set id = 100 where name = 'asd';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from asd;
+-----+------+
| id  | name |
+-----+------+
| 100 | asd  |
+-----+------+
1 row in set (0.00 sec)

mysql> insert into asd (name) values ('dsa');
Query OK, 1 row affected (0.00 sec)

--  вот автоинкремент как работал так и работает
mysql> select * from asd; 
+-----+------+
| id  | name |
+-----+------+
| 100 | asd  |
| 101 | dsa  |
+-----+------+
2 rows in set (0.00 sec)

Автор: bars80080 17.3.2009, 10:35
Цитата(pompei @  17.3.2009,  03:46 Найти цитируемый пост)
Не понимаю в чём проблемма.

а если назад? допустим автоинкремент насчитал 100 значений, большая часть строк в силу разных причин удалена, оставшиеся, скажем 20, надо упорядочить с 1 по 20, а автоинкремент запустить с 21

как тогда?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)