URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 85868
[ Назад ]

Исходное сообщение
"Раздел полезных советов: Автозаполнение столбцов для автоинк..."

Отправлено auto_tips , 04-Авг-12 15:32 
Задача:
В существующую таблицу добавить столбец, автоматически заполнить его от 1 до количества строк в таблице, сделать его ключевым с автоинкрементом.

Решение:

Исходная таблица

   mysql> select * from tTable;
   +------+
   | b    |
   +------+
   | aa   |
   | ab   |
   | ac   |
   | ad   |
   | ae   |
   | af   |
   | ag   |
   | ah   |
   +------+
   8 rows in set (0.00 sec)

Добавляем столбец командой:

   mysql> alter table tTable add a int;

теперь таблица имеет вид

   mysql> select * from tTable;
   +------+------+
   | b    | a    |
   +------+------+
   | aa   | NULL |
   | ab   | NULL |
   | ac   | NULL |
   | ad   | NULL |
   | ae   | NULL |
   | af   | NULL |
   | ag   | NULL |
   | ah   | NULL |
   +------+------+
   8 rows in set (0.00 sec)

Собственно само автозаполнение:

   mysql> set @x:=0; update tTable set a=(@x:=@x+1);

После чего таблица будет иметь вид

   mysql> select * from tTable;
   +------+------+
   | b    | a    |
   +------+------+
   | aa   |    1 |
   | ab   |    2 |
   | ac   |    3 |
   | ad   |    4 |
   | ae   |    5 |
   | af   |    6 |
   | ag   |    7 |
   | ah   |    8 |
   +------+------+

Делаем столбец ключом и автоинкрементом:

   mysql> alter table tTable change a a int key auto_increment;

вид таблицы после изменения

   mysql> show columns from tTable;
   +-------+---------+------+-----+---------+----------------+
   | Field | Type    | Null | Key | Default | Extra          |
   +-------+---------+------+-----+---------+----------------+
   | b     | char(2) | YES  |     | NULL    |                |
   | a     | int(11) |      | PRI | NULL    | auto_increment |
   +-------+---------+------+-----+---------+----------------+
   2 rows in set (0.00 sec)

URL:
Обсуждается: http://www.opennet.me/tips/info/2707.shtml


Содержание

Сообщения в этом обсуждении
"Автозаполнение столбцов для автоинкремента в MySQL "
Отправлено kornel , 04-Авг-12 15:32 
Не забудьте выставить блокировку перед update tTable set a=(@x:=@x+1) и снять ее после  alter table tTable change a a int key auto_increment;

"Автозаполнение столбцов для автоинкремента в MySQL "
Отправлено юзер , 05-Авг-12 11:32 
чем вся эта спистопляска отличается от

alter table tTable add a int key auto_increment;

???


"Автозаполнение столбцов для автоинкремента в MySQL "
Отправлено zoonman , 05-Авг-12 16:40 
Ничем она не отличается.
Но лучше автоинкремент добавлять вот так:

ALTER TABLE `tTable` ADD COLUMN `a` INTEGER(11) UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE;


"Автозаполнение столбцов для автоинкремента в MySQL "
Отправлено Lennotoecom , 05-Авг-12 23:56 
Тем что "x" может быть любым?

"Автозаполнение столбцов для автоинкремента в MySQL "
Отправлено zoonman , 11-Авг-12 21:03 
ALTER TABLE tTable AUTO_INCREMENT = 500;

Перед моим вышеприведенным запросом.

Гораздо интереснее переменные auto_increment_increment и  auto_increment_offset.
Первая управляет шагом инкремента, а вторая начальным смещением.
Это очень полезно при настройке репликации и масштабирования баз.

http://dev.mysql.com/doc/refman/5.0/en/replication-options-m...


"Автозаполнение столбцов для автоинкремента в MySQL "
Отправлено Анонимус42 , 07-Авг-12 11:50 
Лучше скажите, как сделать что-то типа автоинкремента, но при этом не делать примари индекс? Тригеры?

"Автозаполнение столбцов для автоинкремента в MySQL "
Отправлено alexxisr , 08-Авг-12 07:25 
зачем вообще это надо?
кроме ситуации когда "случайно" забыли сразу сделать ключ в таблице

"Автозаполнение столбцов для автоинкремента в MySQL "
Отправлено angra , 10-Авг-12 21:06 
Даже для этого оно не нужно. При добавлении уникального автоинкремент поля mysql автоматически его заполнит возрастающими значениями для все существующих записей. Причем, в отличии от этого вредного совета, сделает это без race condition.