SQLite

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
839
Реакции
519
Помог
12 раз(а)
вопрос в следующем
есть код, написанный под mysql

Код:
CREATE TABLE IF NOT EXISTS test5 (ID int NOT NULL AUTO_INCREMENT, Login varchar(32) , Password varchar(32),  Logged int, PRIMARY KEY (ID)); SET NAMES utf8;
INSERT INTO test5 ( `Login` , `Password`, `Logged`) VALUES ( 'balbur' , 'balbur', '1');
SELECT * FROM test5
и такой же код для sqllite
Код:
CREATE TABLE IF NOT EXISTS test5 (ID int, Login varchar(32) , Password varchar(32), SteamID varchar(32), IP varchar(32), Logged int, LVL int, EXP int, SysTime int, PACKS int, PRIMARY KEY (ID));
INSERT INTO test5 (Login , Password, Logged) VALUES ( "balbur" , "balbur", "1");
select * from test5
1576824506809.png

проблема в том, что я получаю номер записи ( ID ) и работаю с ним как с уникальным идентификатором игрока. В Mysql он создается с каждой записью при помощи AUTO_INCREMENT + NOT_NULL, но sqlite нет такого понятия.
Подскажите код на автоматическое создание индексов для записей

а так же если есть какие-то нюансы при переходе с mysql на sqlite синтаксис, хотелось бы услышать ваши подсказки
по ТЗ мне нужно сделать переход между mysql/sqlite с помощью SQL_SetAffinity
 
Сообщения
1,291
Реакции
2,288
Помог
57 раз(а)
но sqlite нет такого понятия.
Как это нет?

Код:
    formatex( g_szQuery, chx(g_szQuery),
        "CREATE TABLE IF NOT EXISTS `%s` (\
            `%s` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE, \
            `%s` TEXT NOT NULL, \
            `%s` TEXT NOT NULL, \
            `%s` TEXT NOT NULL, \
            `%s` INTEGER NOT NULL DEFAULT 0, \
            `%s` INTEGER NOT NULL DEFAULT 0, \
            `%s` INTEGER NOT NULL DEFAULT 0, \
            `%s` INTEGER NOT NULL DEFAULT 0, \
            `%s` INTEGER NOT NULL DEFAULT 0, \
            `%s` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, \
            `%s` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00'\
        ); SELECT COUNT(*) FROM `%s`;",

        TABLE_NAME,

        g_szRowNames[ROW_ID],
        g_szRowNames[ROW_STEAMID],
        g_szRowNames[ROW_NAME],
        g_szRowNames[ROW_IP],
        g_szRowNames[ROW_KILLS],
        g_szRowNames[ROW_HS],
        g_szRowNames[ROW_POINTS],
        g_szRowNames[ROW_STREAK],
        g_szRowNames[ROW_ONLINE],
        g_szRowNames[ROW_FIRST_SEEN],
        g_szRowNames[ROW_LAST_UPDATE],

        TABLE_NAME
    );

fantom кажется говорил что sqlite сам создаёт какой-то скрытый столбец, где хранятся индексы записей. И мол создавать отдельный для этой цели не нужно. Но я не в курсе на этот счёт, надо раскуривать вопрос.
 
Сообщения
2,491
Реакции
2,794
Помог
61 раз(а)
https://www.sqlitetutorial.net/sqlite-autoincrement/
Я лично почти не пользовался sqlite, но в доке четко описано, что автоматически создается поле rowid. Можно отключить его создание. Также можно указать конкретное поле автоинкремент, но там же написано следующее
The AUTOINCREMENT keyword imposes extra CPU, memory, disk space, and disk I/O overhead and should be avoided if not strictly needed. It is usually not needed.
20 Дек 2019
Еще дополню ссилкой на офф доку:https://www.sqlite.org/lang_createtable.html#rowid. Где четко написано следующее
all rows within SQLite tables have a 64-bit signed integer key that uniquely identifies the row within its table. This integer is usually called the "rowid". The rowid value can be accessed using one of the special case-independent names "rowid", "oid", or "rowid" in place of a column name. If a table contains a user defined column named "rowid", "oid" or "rowid", then that name always refers the explicitly declared column and cannot be used to retrieve the integer rowid value.
А также еще инфа тут: https://www.sqlite.org/autoinc.html
 
Статус
В этой теме нельзя размещать новые ответы.

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу