SQLite 多列主键
在 SQLite 中指定多于 1 列的主键的语法是什么?
What is the syntax for specifying a primary key on more than 1 column in SQLite ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
在 SQLite 中指定多于 1 列的主键的语法是什么?
What is the syntax for specifying a primary key on more than 1 column in SQLite ?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(9)
根据
CREATE TABLE
上的文档,特别是table-constraint
,它是:According to the documentation on
CREATE TABLE
, specificallytable-constraint
, it's:是的。 但请记住,此类主键允许在两列中多次出现 NULL 值。
像这样创建一个表:
现在这可以正常工作,没有任何警告:
Yes. But remember that such primary key allow
NULL
values in both columns multiple times.Create a table as such:
Now this works without any warning:
基本:
如果您的列是其他表的外键(常见情况):
Basic :
If your columns are foreign keys of other tables (common case) :
主键字段应声明为非空(这是非标准的定义
主键的特点是它必须是唯一的且不为空)。 但下面是一个很好的做法
任何 DBMS 中的所有多列主键。
Primary key fields should be declared as not null (this is non standard as the definition
of a primary key is that it must be unique and not null). But below is a good practice for
all multi-column primary keys in any DBMS.
从 SQLite 3.8.2 版开始,显式 NOT NULL 规范的替代方案是“WITHOUT ROWID”规范: [1 ]
“WITHOUT ROWID”表具有潜在的效率优势,因此可以考虑的一个不太冗长的替代方案是:
例如,在 sqlite3 提示符处:
<代码>
sqlite> 插入 t 值(1,null,3);
错误:NOT NULL 约束失败:t.c2
Since version 3.8.2 of SQLite, an alternative to explicit NOT NULL specifications is the "WITHOUT ROWID" specification: [1]
"WITHOUT ROWID" tables have potential efficiency advantages, so a less verbose alternative to consider is:
For example, at the sqlite3 prompt:
sqlite> insert into t values(1,null,3);
Error: NOT NULL constraint failed: t.c2
以下代码在 SQLite 中创建一个以2 列作为主键的表。
解决方案:
The following code creates a table with 2 column as a primary key in SQLite.
SOLUTION:
另外,您还可以将两列主键设为
唯一
和自动增量键主
。 就像这样:https://stackoverflow.com/a/6157337In another way, you can also make the two column primary key
unique
and the auto-increment keyprimary
. Just like this: https://stackoverflow.com/a/6157337PRIMARY KEY (id, name)
对我不起作用。 相反,添加一个约束就完成了这项工作。PRIMARY KEY (id, name)
didn't work for me. Adding a constraint did the job instead.