Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: вопрос по id
 
 автор: sasha1133   (26.10.2009 в 16:22)   письмо автору
 
 

Когда создаешь в таблице поле id с ключом первичный и с функцией auto_increment, то при добавлении (INSERT) в таблицу новой строки, поле id автоматически заполняется значением, на 1 больше предыдущего id.
А когда удаляешь какую нибудь строку из середины таблицы, получается пропущенный id (например 1,2, 4, 5).
Вопрос: если добавить теперь в таблицу новый ряд, он поместиться в конец таблицы со значением id=6 или в середину со значением id=3?

И ещё, что значит значение ключа "первичный"?

И можно ли как нибудь сделать, чтобы id всегда шли подряд, то есть когда ряд удаляется, id автоматически перенумеровываются, чтобы не было пропусков?

Заранее спасибо!

  Ответить  
 
 автор: sasha1133   (26.10.2009 в 16:25)   письмо автору
 
   для: sasha1133   (26.10.2009 в 16:22)
 

Ещё забыл спросить, что значит когда создаешь базу данных в phpMyAdmin поле "сравнение"? И что в нём лучше выбирать (в базе будет хранится русский текст + немного английского)?

  Ответить  
 
 автор: psychomc   (26.10.2009 в 17:22)   письмо автору
 
   для: sasha1133   (26.10.2009 в 16:25)
 

кодировка. лучше выбрать ту же что и на вашем сайте

  Ответить  
 
 автор: sasha1133   (27.10.2009 в 00:19)   письмо автору
 
   для: psychomc   (26.10.2009 в 17:22)
 

а как лучше указать кодировку сайта?

  Ответить  
 
 автор: psychomc   (27.10.2009 в 10:46)   письмо автору
 
   для: sasha1133   (27.10.2009 в 00:19)
 

как удобнее

  Ответить  
 
 автор: ols   (26.10.2009 в 17:10)   письмо автору
 
   для: sasha1133   (26.10.2009 в 16:22)
 

Первичный ключ это поле, которое используется в качестве уникального идентификатороа записи данной таблицы

>Вопрос: если добавить теперь в таблицу новый ряд, он поместиться в конец таблицы со >>значением id=6 или в середину со значением id=3?
Станет 7, поскольку максимальный ключ равен 6.

>И можно ли как нибудь сделать, чтобы id всегда шли подряд, то есть когда ряд удаляется, id >автоматически перенумеровываются, чтобы не было пропусков?
Нет.

  Ответить  
 
 автор: sasha1133   (27.10.2009 в 00:49)   письмо автору
 
   для: ols   (26.10.2009 в 17:10)
 

Жалко что это так. Помойму это приведёт к тому, что значения id быстрее исчерпаются. А как будет работать mysql_fetch_array если будет пропущен id? или он вообще на id не смотрит.
Вообще думаю, может этот id сделать обычным полем, в который будет заноситься порядковый номер с помощью своего алгоритма. Посоветуйте, как лучше быть в ситуации, например когда выводится товары из базы данных, которые время от времени обновляются, удаляются и редактируются?

  Ответить  
 
 автор: Trianon   (27.10.2009 в 01:30)   письмо автору
 
   для: ols   (26.10.2009 в 17:10)
 

>Первичный ключ это поле, которое используется в качестве уникального идентификатороа записи данной таблицы
>
>>Вопрос: если добавить теперь в таблицу новый ряд, он поместиться в конец таблицы со >>значением id=6 или в середину со значением id=3?

>Станет 7, поскольку максимальный ключ равен 6.
Станет 7 , но не по этой причине.
Он станет 7, даже если перед этим удалили шестерку.

  Ответить  
 
 автор: sasha1133   (27.10.2009 в 02:44)   письмо автору
 
   для: Trianon   (27.10.2009 в 01:30)
 

Понятно. А есть ли способ определить порядковый номер ряда в таблице? То есть чтобы например пятый ряд он и был пятым, а не с каким нибудь id=7 ?

  Ответить  
 
 автор: Valick   (27.10.2009 в 06:53)   письмо автору
 
   для: sasha1133   (27.10.2009 в 02:44)
 

Вы просто никак не поймёте, id - это не порядковый номер строки, никогда им не был и не нужно его таковым пытаться сделать. Для образования порядка в таблице применяется сортировка(на этапе выборки из таблицы). Почитайте об уровнях нормализации таблиц и о связях между таблицами (связи - в этом и есть сила БД) А уже после этого решите нужно Вам чтобы пятый ряд оставался пятым или нет.

  Ответить  
 
 автор: Trianon   (27.10.2009 в 12:51)   письмо автору
 
   для: sasha1133   (27.10.2009 в 02:44)
 

логика реляционных БД основана на том, что их таблицам наплевать, как на порядок строк, так и на порядок столбцов.
Важны лишь сочетания значений в ячейках строк.

>поле id автоматически заполняется значением, на 1 больше предыдущего id.
Это не так. На самом деле поле id автоматически заполняется значением, которое еще никогда не применялось, посто для того чтобы создать уникальное такое сочетание.
Нарастание на единицу лишь простейший способ реализации такого поведения, но никак не механизм для нумерации рядов.

  Ответить  
 
 автор: sasha1133   (28.10.2009 в 01:11)   письмо автору
 
   для: Trianon   (27.10.2009 в 12:51)
 

Спасибо всем! *Ушёл учить матчасть)*

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования