Поиск по форуму поставил меня в тупик. Как вывести список таблиц в базе? Как узнать количество и названия столбцов в таблице? Спасибо.
Этот топик читают: Гость
Ответов: 87
Рейтинг: 1
|
|||
карма: 1 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
dimm666 писал(а): Как вывести список таблиц в базе?
dimm666 писал(а): Как узнать количество и названия столбцов в таблице?
Получить список команд, примененных при создании таблиц БД
|
|||
карма: 25 |
| ||
Голосовали: | Konst |
Разработчик
Ответов: 26115
Рейтинг: 2126
|
|||
dimm666, а справку читать не пробовал Синтаксис SQLite
------------ Дoбавленo в 11.00: Tad, хорошо бы это добро добавить в справку, я этого там тоже не нашел |
|||
карма: 22 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
nesco, да. Нужно будет сделать справочку по "хитрым" запросам.
------------ Дoбавленo в 11.45: Для тех кто не умеет пользоваться поисковиками. |
|||
карма: 25 |
|
Ответов: 87
Рейтинг: 1
|
|||
Спасибо!
|
|||
карма: 1 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
nesco писал(а): я этого там тоже не нашелИ этого там тоже нет (помнишь спор о rowid ?) ROWIDs and the INTEGER PRIMARY KEY Every row of every SQLite table has a 64-bit signed integer key that is unique within the same table. This integer is usually called the "rowid". The rowid is the actual key used in the B-Tree that implements an SQLite table. Rows are stored in rowid order. The rowid value can be accessed using one of the special names "ROWID", "OID", or "_ROWID_". If a column is declared to be an INTEGER PRIMARY KEY, then that column is not a "real" database column but instead becomes an alias for the rowid. Unlike normal SQLite columns, the rowid must be a non-NULL integer value. The rowid is not able to hold floating point values, strings, BLOBs, or NULLs. An INTEGER PRIMARY KEY column is an alias for the 64-bit signed integer rowid. |
|||
карма: 25 |
|
Разработчик
Ответов: 26115
Рейтинг: 2126
|
|||
Tad писал(а): помнишь спор о rowid ?Помню, и помню, что кто-то категорически был против применения в PRIMARY KEY значения Null, хотя, именно Null увеличивает значение ключа на единицу sqlite.org писал(а): CREATE TABLE t1(
a INTEGER PRIMARY KEY, b INTEGER ); With this table, the statement INSERT INTO t1 VALUES(NULL,123); is logically equivalent to saying: INSERT INTO t1 VALUES((SELECT max(a) FROM t1)+1,123); Видимо, кто-то не до конца прочитал FAQ |
|||
карма: 22 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
nesco писал(а): INTEGER PRIMARY KEY AUTOINCREMENT значения NullА вот слово AUTOINCREMENT совершенно лишнее. |
|||
карма: 25 |
|
Разработчик
Ответов: 26115
Рейтинг: 2126
|
|||
Tad писал(а): А вот слово AUTOINCREMENT совершенно лишнееВот я его и убрал. Хотя, оно совершенно не мешает, а только разрешает использовать ROWID и его клоны |
|||
карма: 22 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
nesco писал(а): а только разрешает использовать ROWID и его клоны------------ Дoбавленo в 17.22: Я там выше добавил ещё запрос для получения списка команд, примененных при создании таблиц БД |
|||
карма: 25 |
|
Разработчик
Ответов: 26115
Рейтинг: 2126
|
|||
Tad писал(а): ничего оно не разрешаетДа ладно, а это тогда что sqlite.org писал(а): If a column has the type INTEGER PRIMARY KEY AUTOINCREMENT then a slightly different ROWID selection algorithm is used. The ROWID chosen for the new row is at least one larger than the largest ROWID that has ever before existed in that same table. If the table has never before contained any data, then a ROWID of 1 is used. If the table has previously held a row with the largest possible ROWID, then new INSERTs are not allowed and any attempt to insert a new row will fail with an SQLITE_FULL error |
|||
карма: 22 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
Примерный перевод писал(а): Если колонка имеет тип INTEGER PRIMARY KEY AUTOINCREMENT тогда используется немного отличающийся алгоритм выбора ROWID.
ROWID, выбранный для новой строки, является по крайней мере на единицу больше чем наибольший ROWID, который когда-либо прежде существовал в той же самой таблице.Если таблица прежде никогда не содержала данных, то ROWID начинается с 1 . и т.д. и никакой ошибки при добавлении Пример:БД Elements.db таблица files CREATE TABLE files(id INTEGER PRIMARY KEY AUTOINCREMENT,name varchar(128),count int) начинается с rowid=21 Добавь запись - добавит rowid = 22 тихо, мирно без шума и пыли, что с AUTOINCREMENT, что без Твоя цитата , что sqlite.org писал(а) пять лет тому назад. Моя цитата самой последней свежести. Или мы думаем о разном, или ... |
|||
карма: 25 |
|
Разработчик
Ответов: 26115
Рейтинг: 2126
|
|||
Tad писал(а): пять лет тому назадСегодня читал, но может и старый алгоритм, черт его знает. Tad писал(а): Моя цитата самой последней свежестиА откуда ты ее взял, сам придумал, что ли |
|||
карма: 22 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
Зайди на официальный сайт SQLite и посмотри. Найдеш слово AUTOINCREMENT свисни ссылкой - хочу посмотреть.
Автор тоже понял, что писать "масло масленное" - абсурд, т.к. INTEGER PRIMARY KEY уже подразумевает уникальный номер, а проще всего последний увеличить на 1. Т.е. пресловутый AUTOINCREMENT ------------ Дoбавленo в 12.10: nesco, кстати о REPLACE Вот в этом примере, что ты привел CREATE TABLE t1(
команду:
a INTEGER PRIMARY KEY, b INTEGER ); INSERT INTO t1 VALUES(NULL,123); можно заменить на: REPLACE INTO t1 VALUES(NULL,123); и строка будет добавлена как обычно. А если вместо NULL четко задать а (которое INTEGER PRIMARY KEY) REPLACE t1 VALUES(35,999); то в строке с а=35 заменится старое значение 123 на новое 999 (визуально).В таблице старая запись, где а=35 будет удалена, а добавится новая с под тем же номером а=35 |
|||
карма: 25 |
|
Гость
Ответов: 17029
Рейтинг: 0
|
|||
Редактировалось 4 раз(а), последний 2022-09-20 01:48:59 |
|||
карма: 0 |
|
15