数据库复合主键
⑴ 复合主键数据库怎样写
通过sql语句执行建立。又分两种,一是在建表语句中直接写,二是建表之后更改表结构。
在建表语句中直接写:
Create Table 表名 (字段名1 Int Not Null,
字段名2 nvarchar(13) Not Null Primary Key (字段名1, 字段名2),
字段名3…………
字段名N………… )
建表之后更改表结构:
CREATE TABLE 表名 (字段名1 Int Not Null,
字段名2 nvarchar(13) Not Null
字段名3…………
字段名N…………)
GO
ALTER TABLE 表名 WITH NOCHECK ADD
CONSTRAINT [PK_表名] PRIMARY KEY NONCLUSTERED
(
[字段名1],
[字段名2]
)
GO
⑵ 如何在sqlserver数据库表中建立复合主键
方法一:创建表之后,alter table table_name add primary key(字段1,字段2)
方法二:CREATE TABLE 表名 (字段名1 Int Not Null, 字段名2 nvarchar(13) Not Null 字段名3………… 字段名N…………) GO ALTER TABLE 表名 WITH NOCHECK ADD CONSTRAINT [PK_表名] PRIMARY KEY NONCLUSTERED ( [字段名1], [字段名2] ) GO
方法三:建表后,右键-->设计,选中作为符合主键的列,选中之后右击-->设为主键
⑶ 数据库中什么是复合键啊
就是多个字段作为主键
复合键最明显的优点是可以减少数据库表的数量。
然而,复合键的缺点却也是很明显的:
1.使得表与表之间的相互依赖性程度加深;
2.会出现更为复杂的约束、规则;
3.对用户更新数据的限制大大提高;
4.这样的数据库表设计,使得规范化程度最低(只能达到1NF),所以存在严重的数据冗余和更新异常问题等。
当然,可能还有很多... ...
总之,我认为对于复合键来说,其缺点大于优点,故此,数据库设计规范中都建议避免使用复合键!
仅为一孔之见,供参考!
⑷ 怎么设置两个主键在ACCESS数据库表中
创建复合主键
可以指定多个字段的组合用作表的主键,但是现在很
少这样做。这种主键通常称为复合主键。如图2-23 所示,
选择要在复合主键中包括的多个字段,然后单击" 工具"
功能区选项卡中的钥匙图标。当然,如果在表设计中这些
字段排列在一起会更有助于快速操作。
开发人员强烈感觉到主键应该由数据库中原本出现的
数据所组成时,这时才会使用复合主键。过去曾告诉所有
开发人员,每个表都应该有一个原本天生的主键。
现在很少使用复合主键的原因是: 开发人员已经认识到数据是很难预测的。即使用户承诺某
些字段的组合在表中决不会出现重复,但实际情况会与计划偏离。使用替代的主键〈如"自动编
号" ) 将袤的设计与表的数据分开。最后,使用原本天生的主键(也就是表中原本出现的数据〉的
问题在于数据集足够大时,选择作为表的主键的字段值很可能出现重复。
另外,使用复合主键时,维护表间的关系也变得越来越复杂,因为必须在包含相关数据的所
有表中复制字段。使用复合主键只会增加数据库的复杂性,而不会提高数据库的稳定性、完整性
或其他所需的特性。
⑸ SQL里面怎么设置复合主键
CREATE TABLE [UserRole] (
a INT NOT NULL,
b INT NOT NULL, c INT NOT NULL,
PRIMARY KEY(a,b)
) ;
这是在查询分析器里运行的。
如果手工建表的话,只需按住Ctrl键同时选择两个字段就可以设置复合主键了。
⑹ 关于数据库复合主键问题
如果项目比较小,鉴于userid的全局唯一性,是可以做主键的,但对于大型项目,由于表关系复杂,用有意义的具有可变性的字段作为主键是不合适的,建议使用无意义的id列作为主键,希望我的回答对你有所帮助,如果可以,不妨实践一下,会有你自己的体会。
⑺ 如何在数据库表中建立复合主键(即多个字段同时作为
(即多个字段同时作为主键)主键是数据库表的一个重要属性,建立主键可以避免表中存在完全相同的记录,也就是说主键在一张表中的记录值是唯一的。
建立主键有两种方法:一种是在数据库提供的GUI环境中建立,另一种是通过SQL语句执行建立,下面分别介绍。
1.在数据库提供的GUI环境中建立(以SQL7为例)。
输入表信息后按Ctrl键同时选中多行,然后点上面的主键按钮就行了。
2.通过SQL语句执行建立。又分两种,一是在建表语句中直接写,二是建表之后更改表结构。
在建表语句中直接写:
Create Table 表名 (字段名1 Int Not Null,
字段名2 nvarchar(13) Not Null Primary Key (字段名1, 字段名2),
字段名3…………
字段名N………… )
建表之后更改表结构:
CREATE TABLE 表名 (字段名1 Int Not Null,
字段名2 nvarchar(13) Not Null
字段名3…………
字段名N…………)
GO
ALTER TABLE 表名 WITH NOCHECK ADD
CONSTRAINT [PK_表名] PRIMARY KEY NONCLUSTERED
(
[字段名1],
[字段名2]
)
GO
例:
CREATE TABLE Student
(Son CHAR(12) PRIMARY KEY,
CREATE TABLE Course
(Con CHAR(4),
PRIMARY KEY (Con),
);
CREATE TABLE SC
(Sno CHAR(12),
Con CHAR(4),
PRIMARY KEY(Sno,Con),
FOREIGN KEY(Sno)REFERENCES Student(Sno),
FOREIGN KEY(Cno)REFERENCES Course(Cno));
⑻ 如何在数据库中定义复合主键急!!!
一般不定义复合主键
⑼ 数据库中复合主键如何查询,sql 语句如何写
zwb12340 说的就是错的
首先来说一下你的这两种写法
1.这一个比较快,其实这是把两个SQL 拼接成1个SQL,但是在拼接的时候使用了UNION ,这个过程会排序去重复,这一点上会影响性能。可以把UNION 改成UNION ALL,UNION ALL不会排序去重,可能效率会更好一点
2.这一个不会太快,因为使用in的话,默认是不使用索引的,那么这一个过程会全表扫描,那么就很慢了(我这里说的索引是默认的B+树索引,是自动屏蔽的,如果是BITMAP索引的话,是会使用的),
对于你这个问题的解决,我给以下几个意见
1.首先把UNION改成UNION ALL试一试,看效率怎么样
2.检查是否在proct上有没有索引,尽量建一个索引
3.如果以上两个改进之后,还没效果的话,可以在这个表上,基于proct建立分区表,使用分区表的话,那么效果会比较明显