The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Раздел полезных советов: Автозаполнение столбцов для автоинк..."
Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"Раздел полезных советов: Автозаполнение столбцов для автоинк..."  +/
Сообщение от auto_tips on 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.dev/tips/info/2707.shtml

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Автозаполнение столбцов для автоинкремента в MySQL "  +/
Сообщение от kornel email on 04-Авг-12, 15:32 
Не забудьте выставить блокировку перед update tTable set a=(@x:=@x+1) и снять ее после  alter table tTable change a a int key auto_increment;
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Автозаполнение столбцов для автоинкремента в MySQL "  +1 +/
Сообщение от юзер (??) on 05-Авг-12, 11:32 
чем вся эта спистопляска отличается от

alter table tTable add a int key auto_increment;

???

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

3. "Автозаполнение столбцов для автоинкремента в MySQL "  +1 +/
Сообщение от zoonman (ok) on 05-Авг-12, 16:40 
Ничем она не отличается.
Но лучше автоинкремент добавлять вот так:

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

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "Автозаполнение столбцов для автоинкремента в MySQL "  +/
Сообщение от Lennotoecom (??) on 05-Авг-12, 23:56 
Тем что "x" может быть любым?
Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

8. "Автозаполнение столбцов для автоинкремента в MySQL "  +/
Сообщение от zoonman (ok) on 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...

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

5. "Автозаполнение столбцов для автоинкремента в MySQL "  +/
Сообщение от Анонимус42 on 07-Авг-12, 11:50 
Лучше скажите, как сделать что-то типа автоинкремента, но при этом не делать примари индекс? Тригеры?
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

6. "Автозаполнение столбцов для автоинкремента в MySQL "  +/
Сообщение от alexxisr on 08-Авг-12, 07:25 
зачем вообще это надо?
кроме ситуации когда "случайно" забыли сразу сделать ключ в таблице
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

7. "Автозаполнение столбцов для автоинкремента в MySQL "  +/
Сообщение от angra (ok) on 10-Авг-12, 21:06 
Даже для этого оно не нужно. При добавлении уникального автоинкремент поля mysql автоматически его заполнит возрастающими значениями для все существующих записей. Причем, в отличии от этого вредного совета, сделает это без race condition.
Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру