|
|
|
| Когда создаешь в таблице поле id с ключом первичный и с функцией auto_increment, то при добавлении (INSERT) в таблицу новой строки, поле id автоматически заполняется значением, на 1 больше предыдущего id.
А когда удаляешь какую нибудь строку из середины таблицы, получается пропущенный id (например 1,2, 4, 5).
Вопрос: если добавить теперь в таблицу новый ряд, он поместиться в конец таблицы со значением id=6 или в середину со значением id=3?
И ещё, что значит значение ключа "первичный"?
И можно ли как нибудь сделать, чтобы id всегда шли подряд, то есть когда ряд удаляется, id автоматически перенумеровываются, чтобы не было пропусков?
Заранее спасибо! | |
|
|
|
|
|
|
|
для: sasha1133
(26.10.2009 в 16:22)
| | Ещё забыл спросить, что значит когда создаешь базу данных в phpMyAdmin поле "сравнение"? И что в нём лучше выбирать (в базе будет хранится русский текст + немного английского)? | |
|
|
|
|
|
|
|
для: sasha1133
(26.10.2009 в 16:25)
| | кодировка. лучше выбрать ту же что и на вашем сайте | |
|
|
|
|
|
|
|
для: psychomc
(26.10.2009 в 17:22)
| | а как лучше указать кодировку сайта? | |
|
|
|
|
|
|
|
для: sasha1133
(27.10.2009 в 00:19)
| | как удобнее | |
|
|
|
|
|
|
|
для: sasha1133
(26.10.2009 в 16:22)
| | Первичный ключ это поле, которое используется в качестве уникального идентификатороа записи данной таблицы
>Вопрос: если добавить теперь в таблицу новый ряд, он поместиться в конец таблицы со >>значением id=6 или в середину со значением id=3?
Станет 7, поскольку максимальный ключ равен 6.
>И можно ли как нибудь сделать, чтобы id всегда шли подряд, то есть когда ряд удаляется, id >автоматически перенумеровываются, чтобы не было пропусков?
Нет. | |
|
|
|
|
|
|
|
для: ols
(26.10.2009 в 17:10)
| | Жалко что это так. Помойму это приведёт к тому, что значения id быстрее исчерпаются. А как будет работать mysql_fetch_array если будет пропущен id? или он вообще на id не смотрит.
Вообще думаю, может этот id сделать обычным полем, в который будет заноситься порядковый номер с помощью своего алгоритма. Посоветуйте, как лучше быть в ситуации, например когда выводится товары из базы данных, которые время от времени обновляются, удаляются и редактируются? | |
|
|
|
|
|
|
|
для: ols
(26.10.2009 в 17:10)
| | >Первичный ключ это поле, которое используется в качестве уникального идентификатороа записи данной таблицы
>
>>Вопрос: если добавить теперь в таблицу новый ряд, он поместиться в конец таблицы со >>значением id=6 или в середину со значением id=3?
>Станет 7, поскольку максимальный ключ равен 6.
Станет 7 , но не по этой причине.
Он станет 7, даже если перед этим удалили шестерку. | |
|
|
|
|
|
|
|
для: Trianon
(27.10.2009 в 01:30)
| | Понятно. А есть ли способ определить порядковый номер ряда в таблице? То есть чтобы например пятый ряд он и был пятым, а не с каким нибудь id=7 ? | |
|
|
|
|
|
|
|
для: sasha1133
(27.10.2009 в 02:44)
| | Вы просто никак не поймёте, id - это не порядковый номер строки, никогда им не был и не нужно его таковым пытаться сделать. Для образования порядка в таблице применяется сортировка(на этапе выборки из таблицы). Почитайте об уровнях нормализации таблиц и о связях между таблицами (связи - в этом и есть сила БД) А уже после этого решите нужно Вам чтобы пятый ряд оставался пятым или нет. | |
|
|
|
|
|
|
|
для: sasha1133
(27.10.2009 в 02:44)
| | логика реляционных БД основана на том, что их таблицам наплевать, как на порядок строк, так и на порядок столбцов.
Важны лишь сочетания значений в ячейках строк.
>поле id автоматически заполняется значением, на 1 больше предыдущего id.
Это не так. На самом деле поле id автоматически заполняется значением, которое еще никогда не применялось, посто для того чтобы создать уникальное такое сочетание.
Нарастание на единицу лишь простейший способ реализации такого поведения, но никак не механизм для нумерации рядов. | |
|
|
|
|
|
|
|
для: Trianon
(27.10.2009 в 12:51)
| | Спасибо всем! *Ушёл учить матчасть)* | |
|
|
|