Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.11.2017, 15:18   #1
gryllus
Пользователь
 
Регистрация: 27.08.2017
Сообщений: 99
По умолчанию AUTO_INCREMENT или ...

Доброго времени суток!

Изучаю MySQL и соответственно постоянно сталкиваюсь с вопросами, что конечно естественно и вот сейчас вопрос))):

Создавая таблицу в базе данных в самом начале столкнулся с таким при создании колонки с ID часто ставят атрибут AUTO_INCREMENT

Код:
CREATE  TABLE person
-> (person_id AUTO_INCREMENT
который каждый следующий ID увеличивает на один.

И гуляя по просторам интернета встретился с такой записью

Код:
CREATE TABLE person
-> (person_id SMALLINT UNSIGNED
где диапазон без знаковых чисел.

Для чего так? Ведь в первом и втором случае каждый ID будет уникальным или нет?


"Если человек не понимает твои мечты – он не твой человек."

Дмитрий Гринберг
gryllus вне форума Ответить с цитированием
Старый 17.11.2017, 15:26   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Почему оно будет уникальный? AUTO_INCREMENT и UNSIGNED не гарантируют такого. AUTO_INCREMENT - просто удобен, когда вам для ИДа достаточен простой номер записи.
p51x вне форума Ответить с цитированием
Старый 17.11.2017, 15:42   #3
gryllus
Пользователь
 
Регистрация: 27.08.2017
Сообщений: 99
По умолчанию

Спасибо!

[QUOTEПочему оно будет уникальный?][/QUOTE]
...но ведь при внесении новой записи с указание существующего номера ID MySQL будет ругаться(у меня в теории)))).

Цитата:
AUTO_INCREMENT - просто удобен, когда вам для ИДа достаточен простой номер записи.
...значит UNSIGNED когда надо какое-то другое значение, например: 1001? И это число не будет меняться автоматом?
gryllus вне форума Ответить с цитированием
Старый 17.11.2017, 15:54   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
но ведь при внесении новой записи с указание существующего номера ID MySQL будет ругаться(у меня в теории)))).
Если на поле не весит ограничение на уникальность, то не будет. Ни AUTO_INCREMENT, ни ID в имени не делает это автоматически.

Цитата:
значит UNSIGNED когда надо какое-то другое значение, например: 1001?
Нет. Это значит, только беззнаковость поля.

Цитата:
И это число не будет меняться автоматом?
Если вы не укажите AUTO_INCREMENT для этого поля, не повесите тригер или ... то да, автоматом меняться не будет.

AUTO_INCREMENT и UNSIGNED это не об одном и том же, это не взаимозаменяемы/взаимопротивопоставляемые вещи.
p51x вне форума Ответить с цитированием
Старый 17.11.2017, 16:14   #5
gryllus
Пользователь
 
Регистрация: 27.08.2017
Сообщений: 99
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Если на поле не весит ограничение на уникальность, то не будет. Ни AUTO_INCREMENT, ни ID в имени не делает это автоматически.
...ограничение на уникальность - это первичный ключ?

Цитата:
Нет. Это значит, только беззнаковость поля.
...во втором случае у меня в примере не просто UNSIGNED стоит, а SMALLINT UNSIGNED))) или это ни чего не меняет?

Цитата:
AUTO_INCREMENT и UNSIGNED это не об одном и том же, это не взаимозаменяемы/взаимопротивопоставляемые вещи.
...AUTO_INCREMENT и SMALLINT UNSIGNED то же противопоставляемые вещи?

Спасибо!
gryllus вне форума Ответить с цитированием
Старый 17.11.2017, 16:32   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
ограничение на уникальность - это первичный ключ?
https://www.w3schools.com/sql/sql_unique.asp

Цитата:
во втором случае у меня в примере не просто UNSIGNED стоит, а SMALLINT UNSIGNED))) или это ни чего не меняет?
Угу, диапазон значений.

Цитата:
AUTO_INCREMENT и SMALLINT UNSIGNED то же противопоставляемые вещи?
Вы читать разучились или не знаете, что значит "НЕ"?
p51x вне форума Ответить с цитированием
Старый 17.11.2017, 17:05   #7
gryllus
Пользователь
 
Регистрация: 27.08.2017
Сообщений: 99
По умолчанию

Цитата:
ограничение на уникальность - это первичный ключ?
Цитата:
Уникальное ограничение SQL
Ограничение Unique гарантирует, что все значения в столбце различны.

Ограничения уникального и первичного ключей обеспечивают гарантию уникальности столбца или набора столбцов.

Ограничение первичного ключа автоматически имеет уникальное ограничение.

Тем не менее можно иметь много уникальных ограничений для каждой таблицы, но только одно ограничение первичного ключа для каждой таблицы.
Спасибо!)))

Цитата:
Угу, диапазон значений.
Без знаковый диапазон значений - здесь имеется ввиду, что числа в данном поле не могут быть отрицательными и можно задать любое значение в рамках диапазона?

Цитата:
Вы читать разучились или не знаете, что значит "НЕ"?
...извините за мылился взор)))!

Цитата:
AUTO_INCREMENT и SMALLINT UNSIGNED
AUTO_INCREMENT понятно (вы объяснили), а SMALLINT UNSIGNED именно в ID зачем? Зачем нужен такой большой диапазон в ID?

"Работай над очищением твоих мыслей. Если у тебя не будет дурных мыслей, не будет и дурных поступков."

Конфуций
gryllus вне форума Ответить с цитированием
Старый 17.11.2017, 17:45   #8
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от gryllus Посмотреть сообщение
а SMALLINT UNSIGNED именно в ID зачем? Зачем нужен такой большой диапазон в ID?
UNSIGNED потому что обычно ID не отрицательные.
А где вы увидели большой непонятно, скорее наоборот. Если это список сотрудников в компании, то наверно хватит. А если например список клиентов магазина — то не факт.
https://dev.mysql.com/doc/refman/5.7...ger-types.html
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 17.11.2017, 17:49   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от gryllus Посмотреть сообщение
а SMALLINT UNSIGNED именно в ID зачем? Зачем нужен такой большой диапазон в ID?
Это шутка?

тип SMALLINT Unsigned (см. доку)
от 0 до 65535

поверьте мне, 65 тысяч - это мелочь для реальных задач.
ну, чтобы не быть голословным. вот в этой теме человек выложил XLS файл с транзакциями по продажам. за 10 дней там >51 тысячи записей.
Вот теперь и прикиньте, сколько записей будет за 1 месяц, за 1 год, за несколько лет...

или возьмите данный форум.
Вот ваша тема имеет идентификатор 1708581
значит, в БД должно быть ID соответствующего размера.

Последний раз редактировалось Serge_Bliznykov; 17.11.2017 в 17:54.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.11.2017, 18:33   #10
gryllus
Пользователь
 
Регистрация: 27.08.2017
Сообщений: 99
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
А где вы увидели большой непонятно, скорее наоборот. Если это список сотрудников в компании, то наверно хватит. А если например список клиентов магазина — то не факт.
...я видел эти диапазоны))), но не думал, что на столько))).

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Вот ваша тема имеет идентификатор 1708581
значит, в БД должно быть ID соответствующего размера.
...понял, спасибо?

Вот теперь предельно ясно для чего нужны задаваемые диапазоны чисел SMALLINT и остальные другие в ID.

Спасибо большое во многом меня просветили в этой теме даже между строк.

"Невозможно победить того, кто не сдается."
gryllus вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
auto_increment kilogram SQL, базы данных 8 28.06.2012 09:54
MySQL, dbExpress, auto_increment davidoff_pk БД в Delphi 5 25.01.2012 11:01
Не работает auto_increment SwiP SQL, базы данных 4 06.05.2011 20:41
Не работает auto_increment insense PHP 14 18.06.2010 19:18
Auto_Increment D-Snaker PHP 1 21.08.2009 20:34