Вверх ↑
Этот топик читают: Гость
Ответов: 87
Рейтинг: 1
#1: 2009-06-05 10:01:00 ЛС | профиль | цитата
Поиск по форуму поставил меня в тупик. Как вывести список таблиц в базе? Как узнать количество и названия столбцов в таблице? Спасибо.
карма: 1

0
Ответов: 16884
Рейтинг: 1239
#2: 2009-06-05 10:46:19 ЛС | профиль | цитата
dimm666 писал(а):
Как вывести список таблиц в базе?


select name from sqlite_master 

dimm666 писал(а):
Как узнать количество и названия столбцов в таблице?


PRAGMA table_info(имя таблицы)

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

Select sql from sqlite_master

карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
1
Голосовали:Konst
Разработчик
Ответов: 26115
Рейтинг: 2126
#3: 2009-06-05 10:49:41 ЛС | профиль | цитата
dimm666, а справку читать не пробовал Синтаксис SQLite
------------ Дoбавленo в 11.00:
Tad, хорошо бы это добро добавить в справку, я этого там тоже не нашел
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#4: 2009-06-05 11:40:34 ЛС | профиль | цитата
nesco, да. Нужно будет сделать справочку по "хитрым" запросам.
------------ Дoбавленo в 11.45:
Для тех кто не умеет пользоваться поисковиками.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 87
Рейтинг: 1
#5: 2009-06-05 11:53:27 ЛС | профиль | цитата
Спасибо!
карма: 1

0
Ответов: 16884
Рейтинг: 1239
#6: 2009-06-05 16:52:07 ЛС | профиль | цитата
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
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26115
Рейтинг: 2126
#7: 2009-06-05 17:05:51 ЛС | профиль | цитата
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

0
Ответов: 16884
Рейтинг: 1239
#8: 2009-06-05 17:10:39 ЛС | профиль | цитата
nesco писал(а):
INTEGER PRIMARY KEY AUTOINCREMENT значения Null
Ну не я, во всяком случае. Потому что именно я, на чей-то вопрос "КАК" - ответил "NULL".
А вот слово AUTOINCREMENT совершенно лишнее.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26115
Рейтинг: 2126
#9: 2009-06-05 17:16:33 ЛС | профиль | цитата
Tad писал(а):
А вот слово AUTOINCREMENT совершенно лишнее

Вот я его и убрал. Хотя, оно совершенно не мешает, а только разрешает использовать ROWID и его клоны
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#10: 2009-06-05 17:19:33 ЛС | профиль | цитата
nesco писал(а):
а только разрешает использовать ROWID и его клоны
ничего оно не разрешает. Это рудимент от первых разработок блоков управления БД.
------------ Дoбавленo в 17.22:
Я там выше добавил ещё запрос для получения списка команд, примененных при создании таблиц БД

карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26115
Рейтинг: 2126
#11: 2009-06-05 17:26:25 ЛС | профиль | цитата
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

0
Ответов: 16884
Рейтинг: 1239
#12: 2009-06-05 18:11:16 ЛС | профиль | цитата
Примерный перевод писал(а):
Если колонка имеет тип 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
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26115
Рейтинг: 2126
#13: 2009-06-05 18:27:13 ЛС | профиль | цитата
Tad писал(а):
пять лет тому назад

Сегодня читал, но может и старый алгоритм, черт его знает.
Tad писал(а):
Моя цитата самой последней свежести

А откуда ты ее взял, сам придумал, что ли
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#14: 2009-06-05 18:38:44 ЛС | профиль | цитата
Зайди на официальный сайт 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
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Гость
Ответов: 17029
Рейтинг: 0
#15: 2009-08-10 02:23:50 правка | ЛС | профиль | цитата


Редактировалось 4 раз(а), последний 2022-09-20 01:48:59
карма: 0

0
15
Сообщение
...
Прикрепленные файлы
(файлы не залиты)