Новости из Блогов Автозаполнение столбцов для автоинкремента в MySQL

Discussion in 'Мировые новости. Обсуждения.' started by d3l3t3, 11 Aug 2012.

  1. d3l3t3

    d3l3t3 Banned

    Joined:
    3 Dec 2010
    Messages:
    1,771
    Likes Received:
    98
    Reputations:
    10
    Задача:
    В существующую таблицу добавить столбец, автоматически заполнить его от 1 до
    количества строк в таблице, сделать его ключевым с автоинкрементом.

    Решение:

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

    Code:
       mysql> select * from tTable;
       +------+
       | b    |
       +------+
       | aa   |
       | ab   |
       | ac   |
       | ad   |
       | ae   |
       | af   |
       | ag   |
       | ah   |
       +------+
       8 rows in set (0.00 sec)
    Добавляем столбец командой:

    Code:
       mysql> alter table tTable add a int;
    теперь таблица имеет вид

    Code:
       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)
    Собственно само автозаполнение:

    Code:
       mysql> set @x:=0; update tTable set a=(@x:=@x+1);
    После чего таблица будет иметь вид

    Code:
       mysql> select * from tTable;
       +------+------+
       | b    | a    |
       +------+------+
       | aa   |    1 |
       | ab   |    2 |
       | ac   |    3 |
       | ad   |    4 |
       | ae   |    5 |
       | af   |    6 |
       | ag   |    7 |
       | ah   |    8 |
       +------+------+
    Делаем столбец ключом и автоинкрементом:

    Code:
       mysql> alter table tTable change a a int key auto_increment;
    вид таблицы после изменения

    Code:
       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)
    02.08.2012 , Автор: Lennotoecom
    http://www.opennet.ru/tips/2707_mysql_table_auto_increment.shtml