java主键可以包含多列吗,SQLite主键在多列上

在SQLITE的1个以上的列上指定主键的语法是什么?

#1楼

主键字段应声明为非null(这是非标准的,因为主键的定义是它必须唯一且不能为null)。 但是下面是对任何DBMS中所有多列主键的一种良好做法。

create table foo

(

fooint integer not null

,foobar string not null

,fooval real

,primary key (fooint, foobar)

)

;

#2楼

从SQLite版本3.8.2开始,显式NOT NULL规范的替代方法是“ WITHOUT ROWID”规范:[ 1 ]

NOT NULL is enforced on every column of the PRIMARY KEY

in a WITHOUT ROWID table.

“ WITHOUT ROWID”表具有潜在的效率优势,因此,可以考虑的一个较简单的选择是:

CREATE TABLE t (

c1,

c2,

c3,

PRIMARY KEY (c1, c2)

) WITHOUT ROWID;

例如,在sqlite3提示符下: sqlite> insert into t values(1,null,3); Error: NOT NULL constraint failed: t.c2 sqlite> insert into t values(1,null,3); Error: NOT NULL constraint failed: t.c2

#3楼

基本:

CREATE TABLE table1 (

columnA INTEGER NOT NULL,

columnB INTEGER NOT NULL,

PRIMARY KEY (columnA, columnB)

);

如果您的列是其他表的外键(常见情况):

CREATE TABLE table1 (

table2_id INTEGER NOT NULL,

table3_id INTEGER NOT NULL,

FOREIGN KEY (table2_id) REFERENCES table2(id),

FOREIGN KEY (table3_id) REFERENCES table3(id),

PRIMARY KEY (table2_id, table3_id)

);

CREATE TABLE table2 (

id INTEGER NOT NULL,

PRIMARY KEY id

);

CREATE TABLE table3 (

id INTEGER NOT NULL,

PRIMARY KEY id

);

#4楼

是。 但是请记住,这样的主键在两列中都允许NULL值多次。

这样创建一个表:

sqlite> CREATE TABLE something (

column1, column2, value, PRIMARY KEY (column1, column2));

现在这可以正常工作而不会发出任何警告:

sqlite> insert into something (value) VALUES ('bla-bla');

sqlite> insert into something (value) VALUES ('bla-bla');

sqlite> select * from something;

NULL|NULL|bla-bla

NULL|NULL|bla-bla

#5楼

换句话说,您还可以使两列主键为 unique ,而自动递增键为primary 。 就像这样: https : //stackoverflow.com/a/6157337

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值