我想通过SQL查询找出索引是否为UNIQUE.我正在使用SQLite 3.
我尝试了两种方法:
SELECT * FROM sqlite_master WHERE name = 'sqlite_autoindex_user_1'
Run Code Online (Sandbox Code Playgroud)
这将返回有关索引的信息("type","name","tbl_name","rootpage"和"sql").请注意,当SQLite自动创建索引时,sql列为空.
PRAGMA index_info(sqlite_autoindex_user_1);
Run Code Online (Sandbox Code Playgroud)
这将返回索引中的列("seqno","cid"和"name").
还有其他建议吗?
编辑:上面的示例是针对自动生成的索引,但我的问题是关于索引的一般情况.例如,我可以使用"CREATE UNIQUE INDEX index1 ON visit(user,date)"创建索引.如果我的新索引是UNIQUE,似乎没有SQL命令会显示.
我知道SQLite本身并不强制执行外键,但这不是我主要关注的问题.问题是:如果我宣布
CREATE TABLE invoice (
invoiceID INTEGER PRIMARY KEY,
clientID INTEGER REFERENCES client(clientID),
...
)
Run Code Online (Sandbox Code Playgroud)
sqlite至少会使用clientID是外键的信息来优化查询并自动索引invoice.clientID,还是这个约束是真正的无操作?
我有一个查询sqlite3数据库,它提供了排序数据.数据基于varchar列"名称" 列进行排序.现在当我进行查询时
select * from tableNames Order by Name;
Run Code Online (Sandbox Code Playgroud)
它提供这样的数据.
Pen
Stapler
pencil
意味着它正在考虑区分大小写的东西.我想要的方式如下
Pen
pencil
Stapler
那么我应该在sqlite3数据库中进行哪些更改以获得必要的结果?
与其他SQL版本相比,SQLite3使用动态类型而不是静态类型.在SQLite的网站上写着:
大多数SQL数据库引擎(除了SQLite之外的每个SQL数据库引擎,据我们所知)都使用静态,严格的类型.使用静态类型时,值的数据类型由其容器(存储值的特定列)确定.
SQLite使用更通用的动态类型系统.在SQLite中,值的数据类型与值本身相关联,而不是与其容器相关联.
在我看来,这正是你不想要的,因为它允许你存储整数列中的字符串.
页面继续:
... SQLite中的动态类型允许它执行传统的刚性类型数据库中无法实现的操作.
我有两个问题:
我尝试在Python中执行此sqlite3查询.我将代码减少到最小,sqlite.connect等工作.
column = 'Pron_1_Pers_Sg'
goal = 'gender'
constrain = 'Mann'
with con:
cur = con.cursor()
cur.execute("SELECT ? FROM Data where ?=?", (column, goal, constrain))
con.commit()
rows = cur.fetchall()
for element in rows:
values.append(element)
Run Code Online (Sandbox Code Playgroud)
这将返回一个空列表.如果我对字符串进行硬编码,它就可以工作并返回值.
public int getRecordsCount() {
String countQuery = "SELECT * FROM " + TABLE_LOGIN;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(countQuery, null);
if(cursor != null && !cursor.isClosed()){
cursor.close();
}
// return count
return cursor.getCount();
}
Run Code Online (Sandbox Code Playgroud)
我试图获取数据库中的总记录数,但数据库每次都会崩溃java.lang.IllegalStateException: attempt to re-open an already-closed object: android.database.sqlite.SQLiteQuery (mSql = SELECT * FROM login).请帮我解决错误
03-05 22:23:14.208: E/AndroidRuntime(4988): FATAL EXCEPTION: main
03-05 22:23:14.208: E/AndroidRuntime(4988): java.lang.IllegalStateException: attempt to re-open an already-closed object: android.database.sqlite.SQLiteQuery (mSql = SELECT * FROM login)
03-05 22:23:14.208: E/AndroidRuntime(4988): at android.database.sqlite.SQLiteClosable.acquireReference(SQLiteClosable.java:34)
03-05 …Run Code Online (Sandbox Code Playgroud) 我有查询,如果它们属于一个组,则连接字符串.
SELECT e.id,
ke.value,
re.value AS re_value,
GROUP_CONCAT(g.value,', ')
FROM entry e
INNER JOIN k_ele ke ON e.id = ke.fk
INNER JOIN r_ele re ON e.id = re.fk
INNER JOIN sense s ON e.id = s.fk
INNER JOIN gloss g ON s.id = g.fk
WHERE g.lang IS NULL
GROUP BY s.id
ORDER BY re_value
Run Code Online (Sandbox Code Playgroud)
但
GROUP_CONCAT(g.value,',')
给出了这个结果.
深情的关系,深情的关系,深情的关系,深情的关系,爱的关系,爱的关系,爱的关系,爱的关系
正如您所看到的,连接中存在重复.如何避免连接中的重复?
我希望我的用户能够重置应用程序,然后我需要重置我创建的SQLite数据库.我怎样才能做到这一点?我想重置数据库或删除并重新创建数据库.
我非常喜欢SQLite文档中的SQL语法图.

我发现这个图比MySQL文档中的等价物更容易理解
UPDATE [LOW_PRIORITY] [IGNORE] table_reference
SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ...
[WHERE where_condition]
[ORDER BY ...]
[LIMIT row_count]
Run Code Online (Sandbox Code Playgroud)
有谁知道MySQL和其他方言是否存在这样的图表?
在数据库仍处于联机状态时,如何在本机C#代码中备份sqlite数据库?所有在线备份api示例都是C代码.
sqlite ×10
android ×2
sql ×2
c# ×1
database ×1
duplication ×1
foreign-keys ×1
indexing ×1
mysql ×1
python ×1
sql-order-by ×1