Меню

Mysql автоинкремент не работает

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Страниц: 1

#1 16.09.2008 23:27:16

Не работает auto_increment в запросе вида insert . select

В общем есть у меня таблички form и element и процедурка для копирования формы. Полный тестовый скрипт следует

Duplicate entry ‘3’ for key 1

До копирования в таблице element счетчик стоит на 3, см. занесение тестовый данных. При копировании что делаем:

Копируем запись формы все копируем, имя используем новое переданное через параметр. Получаем ID только что вставленной формы.
Копируем элементы старой формы вместо FORM_ID подставляем ID только что добавленный.

Данный скрипт ДОЛЖЕН работать, аналогичный работает на MS SQL, но почему то у меня выдает ошибку. Видимо не происходит автоинкремента в последнем insert запросе.

PS
MySQL 5.0.22 Windows

#2 17.09.2008 00:15:42

Re: Не работает auto_increment в запросе вида insert . select

Проверил, код работает. 5.0.51b, ubuntu
Обновите сервер, нет смысла разрабатывать продукт на том, что не работает.

#3 17.09.2008 09:01:03

Re: Не работает auto_increment в запросе вида insert . select

ОК, вы меня убедили

Страниц: 1

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson

Источник

MySQL: пропадает auto_increment при импорте во всех таблицах

silent3250

Новичок

MySQL: пропадает auto_increment при импорте во всех таблицах

подскажите что может быть? переношу дамп с MySQL 5.0.45 на 5.0.51
в дампе auto_increment есть, при импорте дампа его уже нет
в ручную 140 таблиц переделывать – не вариант.
делаю дамп на phpMyAdmin – 2.11.2.2, закачиваю на phpMyAdmin – 2.11.7
пробовал через shell
mysql -u[login] -p[pass] -f[db]

на всяк случай структура одной из таблиц при экспорте

CREATE TABLE IF NOT EXISTS `city` (
`id` int(11) NOT NULL,
`title` varchar(255) default NULL,
`category` varchar(20) default ‘0’,
`section` int(4) NOT NULL default ‘0’,
`status` int(10) NOT NULL,
`adddate` int(10) NOT NULL,
`user` int(10) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=5 ;

INSERT INTO `city` (`id`, `title`, `category`, `section`, `status`, `adddate`, `user`) VALUES
(1, ‘Moscow’, ’14’, 2, 0, 1210795200, 0);

интересно почему
`id` int(11) NOT NULL,
а не
`id` int(11) NOT NULL auto_increment,

может все дело в phpMyAdmin – 2.11.2.2?

Mr_Max

Первый класс. Зимние каникулы ^_^

silent3250
SHOW CREATE `city`
из консоли?

Той таблицы, что експортируешь.

silent3250

Новичок

show create table ‘city’

CREATE TABLE `city` (
`id` int(11) NOT NULL,
`title` varchar(255) default NULL,
`category` varchar(20) default ‘0’,
`section` int(4) NOT NULL default ‘0’,
`status` int(10) NOT NULL,
`adddate` int(10) NOT NULL,
`user` int(10) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=cp1251

странно.. auto_increment у ID нет, но значения ведь увеличиваются, и когда просматриваю через phpmyadmin там стоит auto_increment

пробовал и через EMS SQL Manager и phpmyadmin другой поставил, всеравно без auto_increment экспортируется

Читайте также:  Газовая варочная панель индезит не работает 1 конфорка

неужели никто не знает?

Продвинутый новичок

zerkms

TDD infected

ты сам показал show create table
автоинкремента там нет. если у тебя есть очки — можешь одеть их и сам убедиться, что нету в таблице автоинкремента.
и чёрт побери логично, что дамп создаётся без автоинкремента и подымается на другом сервере — тоже без автоинкремента.

silent3250

Новичок

Dovg
через консоль я посмотрел и написал результат show create table

zerkms
очков у меня нет, но id автоинкрементный, он автоинкрементится при каждом добавлении информации в таблицу, то что он автоинкрементненный это 100%, почему он становится не автоинкрементненный при экспорте хз.

zerkms

TDD infected

show create table ‘city’

CREATE TABLE `city` (
`id` int(11) NOT NULL,
`title` varchar(255) default NULL,
`category` varchar(20) default ‘0’,
`section` int(4) NOT NULL default ‘0’,
`status` int(10) NOT NULL,
`adddate` int(10) NOT NULL,
`user` int(10) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=cp1251

never knows best

zerkms
блин, не тупи

CREATE TABLE `city` (
`id` int(11) NOT NULL,
`title` varchar(255) default NULL,
`category` varchar(20) default ‘0’,
`section` int(4) NOT NULL default ‘0’,
`status` int(10) NOT NULL,
`adddate` int(10) NOT NULL,
`user` int(10) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=cp1251

Человек пишет: у него есть автоинкремент в таблице

dive now, work later

silent3250, мне даже не лень было.

| city | CREATE TABLE `city` (
`id` int(11) NOT NULL,
`title` varchar(255) default NULL,
`category` varchar(20) default ‘0’,
`section` int(4) NOT NULL default ‘0’,
`status` int(10) NOT NULL,
`adddate` int(10) NOT NULL,
`user` int(10) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=cp1251

mysql> insert into city (status, adddate, user) values (1,1,1);
ERROR 1364 (HY000): Field ‘id’ doesn’t have a default value

так шо очки все-таки придется одеть .

zerkms

TDD infected

не красуется
AUTO_INCREMENT
тогда и будешь бросаться «тупи-не тупи».

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

never knows best

silent3250
самое простое решение (quick & dirty) это
сделать полный дамп
потом пройтись заменить регэкспом

а потом простым реплейсом по тексте

`id` int(11) NOT NULL,

`id` int(11) NOT NULL AUTO_INCREMENT,

а потом е*атся с ошибками

Автор оригинала: zerkms
kode
как только найдёшь хоть одну адекватную причину, по которой после

не красуется
AUTO_INCREMENT
тогда и будешь бросаться «тупи-не тупи».

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

zerkms

TDD infected

silent3250

Новичок

специально для тебя http://web-silent.ru/i/increment.jpg

Читайте также:  Как настроить часы torneo cardio link

или ты думаеш я такой тупой и не знаю как поле сделать автоинкрементным

dive now, work later

zerkms

TDD infected
never knows best

silent3250
попробуй mysqldump c ключём —compatible=mysql50, —compatible=mysql41, —compatible=mysql51

silent3250

Новичок

да все уже добавлено, все работает, все автоинкрементится, но при экспорте автоинкремент пропадает

консоль:
CREATE TABLE city2 (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(255) default NULL,
PRIMARY KEY (id)
)

INSERT INTO city2 VALUES (NULL,’123456789′);
INSERT INTO city2 VALUES (NULL,’987654321′);

show create table ‘city2’

CREATE TABLE `city` (
`id` int(11) NOT NULL,
`title` varchar(255) default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=cp1251

zerkms

TDD infected

silent3250

Новичок

zed212

Новичок

Ребят подскажите не магу сделать в bd.txt русскую кодирвку стран в bd.txt `countries` какую я только кодировку не пробовал в место русских стран на сайте видно вот это . или эроглефы, вот пропись кодировки:

— Структура таблицы `countries`

CREATE TABLE `countries` (
`id` bigint(20) NOT NULL auto_increment,
`name` varchar(24) default NULL,
`code` bigint(20) default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=113 ;


— Дамп данных таблицы `countries`

INSERT INTO `countries` VALUES(1, ‘Россия’, 40);
INSERT INTO `countries` VALUES(2, ‘Италия’, 39);
INSERT INTO `countries` VALUES(8, ‘Англия’, 44);
INSERT INTO `countries` VALUES(14, ‘Азербайджан’, 994);
INSERT INTO `countries` VALUES(15, ‘Бахрейн’, 973);
INSERT INTO `countries` VALUES(17, ‘Бельгия’, 32);
INSERT INTO `countries` VALUES(19, ‘Бразилия’, 55);
INSERT INTO `countries` VALUES(21, ‘Польша’, 284);
INSERT INTO `countries` VALUES(22, ‘Румыния’, 673);
INSERT INTO `countries` VALUES(23, ‘Грузия’, 359);
INSERT INTO `countries` VALUES(27, ‘Чили’, 56);
INSERT INTO `countries` VALUES(28, ‘Китай’, 86);
INSERT INTO `countries` VALUES(30, ‘Cote d Ivoire’, 225);
INSERT INTO `countries` VALUES(31, ‘Крит’, 385);
INSERT INTO `countries` VALUES(32, ‘Кипр’, 357);
INSERT INTO `countries` VALUES(34, ‘Чехия’, 420);
INSERT INTO `countries` VALUES(35, ‘Дания’, 45);
INSERT INTO `countries` VALUES(36, ‘Египет’, 20);
INSERT INTO `countries` VALUES(37, ‘Литва’, 372);
INSERT INTO `countries` VALUES(38, ‘Эстония’, 251);
INSERT INTO `countries` VALUES(39, ‘Белоруссия’, 298);
INSERT INTO `countries` VALUES(40, ‘Украина’, 679);
INSERT INTO `countries` VALUES(41, ‘Финляндия’, 358);
INSERT INTO `countries` VALUES(42, ‘Франция’, 33);
INSERT INTO `countries` VALUES(43, ‘Джоржия’, 995);
INSERT INTO `countries` VALUES(44, ‘Германия’, 49);
INSERT INTO `countries` VALUES(45, ‘Гибралтар’, 350);
INSERT INTO `countries` VALUES(46, ‘Греция’, 30);
INSERT INTO `countries` VALUES(47, ‘Гонг конг’, 852);
INSERT INTO `countries` VALUES(48, ‘Венгрия’, 36);
INSERT INTO `countries` VALUES(49, ‘Индия’, 91);
INSERT INTO `countries` VALUES(50, ‘Япония’, 81);
INSERT INTO `countries` VALUES(51, ‘Иерусалим’, 2);
INSERT INTO `countries` VALUES(52, ‘Молдова’, 373);
INSERT INTO `countries` VALUES(53, ‘Нидерланды’, 31);
INSERT INTO `countries` VALUES(54, ‘Норвегия’, 47);
INSERT INTO `countries` VALUES(56, ‘Ю.А.Р’, 7);
INSERT INTO `countries` VALUES(57, ‘Саудовская Аравия’, 966);
INSERT INTO `countries` VALUES(59, ‘Испания’, 34);
INSERT INTO `countries` VALUES(60, ‘U.S.A’, 1);
INSERT INTO `countries` VALUES(61, ‘Канада’, 1);
INSERT INTO `countries` VALUES(62, ‘Австралия’, 61);
INSERT INTO `countries` VALUES(64, ‘Сингапур’, 65);

Читайте также:  Как настроить чувствительность мыши варзон

в чём ошибка может вы поможете в место Россия на сайте идёт . мне кажется ошибка идёт в структуре вот тут:
— Структура таблицы `countries`

CREATE TABLE `countries` (
`id` bigint(20) NOT NULL auto_increment,
`name` varchar(24) default NULL,
`code` bigint(20) default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=113 ;
но какая не пойму при импорте вот этого кода через Выполнить SQL-запрос(ы) к базе данных мне сам SQL выдаёт такие строки:
ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=113 ;# MySQL вернула пустой результат (т.е. ноль строк).

— Дамп данных таблицы `countries`

INSERT INTO `countries` VALUES(1, ‘Россия’, 40);# Затронута 1 строка.

INSERT INTO `countries` VALUES(2, ‘Италия’, 39);# Затронута 1 строка.

INSERT INTO `countries` VALUES(8, ‘Англия’, 44);# Затронута 1 строка.

INSERT INTO `countries` VALUES(14, ‘Азербайджан’, 994);# Затронута 1 строка.

INSERT INTO `countries` VALUES(15, ‘Бахрейн’, 973);# Затронута 1 строка.

INSERT INTO `countries` VALUES(17, ‘Бельгия’, 32);# Затронута 1 строка.

INSERT INTO `countries` VALUES(19, ‘Бразилия’, 55);# Затронута 1 строка. помогите выявить.

Источник

MySql автоинкремент не учитывает удаленные id элементы

У меня есть таблица a с varhar массивом на id в b таблице. К примеру (1,2,3,4,5,6). Когда в b таблице я удаляю 5 и 6 елемент(последние) то при добавлении новых элементов в b таблицу новый id создается не 7,8,9. а 5,6,7,8. и получается, что в табилице а 5 и 6 уже не на тот row. Можно конечно и массив в а подчищать, но можно ли сделать чтобы инкремент был уникален?

3 ответа 3

Вы столкнулись с некоторыми классическими проблемами, которые я по-быстрому опишу (и, возможно, у кого-то будет время расписать подробнее):

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

Это абсолютно нормально. Стоит подавить внутреннего перфекциониста и оставить зазоры как есть. Ничего страшного в этом не будет, диапазона значений стандартного int хватит с головой на любой проетк, кроме визуального дискомфорта тех немногих, которые будут отслеживать ID в адресной строке, это ничего не принесет.

В проекте требуется хранить список ссылок на сущности, поэтому я храню их в виде строки значений, разделенных запятой

Такой подход не даст вам нормально пользоваться реляционной БД. Правильным подходом в данном случае будет завести новую таблицу, в которой описывать связи.

Формально это описывается т.н. нормальными формами БД, про которые вы можете прочитать в википедии

Мне требуется обновлять ссылки на сущности по мере изменения их идентификаторов

Специально для этого был придуман механизм внешних ключей (foreign key), который позволяет производить базовый набор действий при изменении связанной сущности, например, запрещать удалять преподавателя, пока у него есть студенты, или наоборот, удалять запись о связи в случае удаления студента.

Источник

Adblock
detector