首先一个表是不能有两个主键的。但是可以有两个字段组合成一个主键,这就是为什么有时候表里为什么会有两个字段都有主键的标志,那是因为他们组合成了一个主键了。我们可以先删除了原来的主键再用类似下面SQL语句建立:
alter table 你的表名 add constraint pk_name primary key (字段1,字段2)
或者在表设计器里面按住ctrl选中要设置主键的两列再设置主键就OK了.
建立联合主键有两种方式:
一种是在建表时就写出,语句如下:
Create Table 表名 (字段名1 Int Not Null,
字段名2 nvarchar(13) Not Null Primary Key (字段名1, 字段名2),
字段名3????
字段名N???? )
另一种是在建表后更改,语句如下:
alter table 你的表名 add constraint pk_你的表名 primary key (字段1,字段2)
ALTER TABLE 表名 WITH NOCHECK ADD
CONSTRAINT [PK_表名] PRIMARY KEY NONCLUSTERED
(
[字段名1],
[字段名2]
)
创建联合主键还可以这样写:
create table huayunkeji_today(device_id int , year int, month int, day int, hour int, temperature float, humidity float,
primary key(device_id,year,month,day,hour))
扩展资料:
联合主键的使用情况及优点:
联合主键就是用2个或2个以上的字段组成主键。用这个主键包含的字段作为主键,这个组合在数据表中是唯一,且加了主键索引。
可以这么理解,比如,你的订单表里有很多字段,一般情况只要有个订单号bill_no做主键就可以了,但是,现在要求可能会有补充订单,使用相同的订单号,那么这时单独使用订单号就不可以了。
再使用个订单序列号bill_seq来作为区别。把bill_no和bill_seq设成联合主键。即使bill_no相同,bill_seq不同也是可以的。
Oracle:SQL>
CREATE
TABLE
test_tab
(
2
id
INT,
3
name
VARCHAR(10),
4
age
INT,
5
val
VARCHAR(10)
6
)
Table
created.
SQL>
ALTER
TABLE
test_tab
2
ADD
CONSTRAINT
pk_test_tab
PRIMARY
KEY(id)
Table
altered.
SQL
Server
麻烦一点
1>
CREATE
TABLE
test_tab
(
2>
id
INT,
3>
name
VARCHAR(10),
4>
age
INT,
5>
val
VARCHAR(10)
6>
)
7>
go
1>
ALTER
TABLE
test_tab
2>
ADD
CONSTRAINT
pk_test_tab
PRIMARY
KEY(id)
3>
go
消息
8111,级别
16,状态
1,服务器
HOME-BED592453C\SQLEXPRESS,第
1
行
无法在表
'test_tab'
中可为空的列上定义
PRIMARY
KEY
约束。
消息
1750,级别
16,状态
1,服务器
HOME-BED592453C\SQLEXPRESS,第
1
行
无法创建约束。请参阅前面的错误消息。
首先对
id
这个列,增加一个
NOT
NULL
约束,然后再设置为主键。
1>
ALTER
TABLE
test_tab
2>
ALTER
COLUMN
id
INT
NOT
NULL
3>
go
1>
ALTER
TABLE
test_tab
2>
ADD
CONSTRAINT
pk_test_tab
PRIMARY
KEY(id)
3>
go
MySQL
mysql>
CREATE
TABLE
test_tab
(
->
id
INT,
->
name
VARCHAR(10),
->
age
INT,
->
val
VARCHAR(10)
->
)
->
//
Query
OK,
0
rows
affected
(0.08
sec)
mysql>
ALTER
TABLE
test_tab
->
ADD
CONSTRAINT
pk_test_tab
PRIMARY
KEY(id)
->
//
Query
OK,
0
rows
affected
(0.14
sec)
Records:
0
Duplicates:
0
Warnings:
0
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)