sql server 无法创建主键

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql server 无法创建主键相关的知识,希望对你有一定的参考价值。

- 无法创建索引“PK_Access_Mess”。
CREATE UNIQUE INDEX 终止,因为发现对象名称 'dbo.Access_Mess' 和索引名称 'PK_Access_Mess' 有重复的键。重复的键值为 (1)。
无法创建约束。请参阅前面的错误消息。

请问这怎么改呀... 用T-SQL怎么改呢? 谢谢...!

参考技术A 该表的该字段有重复纪录
你把数据删了 就可以创建了
作为主键的字段不可心有重复项!!!
又要数据不丢失,又要建立主键,那就只有把数据导出,然后建立好主键之后,再用Insert into 导入该表,重复的情况你试试就知道会有什么问题了
参考技术B 把这个表的数据全部移到一个临时表中,再把这个数据表重新建一下,再把数据insert into 回来不就可以了吗? 参考技术C 该表的该字段有重复纪录

你把数据删了 就可以创建了本回答被提问者采纳

在SQL SERVER 中对表不能设置主键

“t1”表
- 无法创建索引“PK_t1”。
因为发现对象名称 'dbo.t1' 和索引名称 'PK_t1' 有重复的键,所以 CREATE UNIQUE INDEX 语句终止。重复的键值为 (1)。
无法创建约束。请参阅前面的错误消息。
语句已终止。、

怎么处理 解决

数据库主键是指表中一个列或者列的组合,其值能够唯一的标识表中的每一个行。这样的一列或者多列成为表的主键,通过它可以强制表的实体完整性。当创建或者更改表时可以通过定义PRIMARY KEY约束来创建主键,一个表只能有一个主键约束,而且主键约束中的列不能是空值,由于主键约束确保唯一数据,所一经常来定义标识列。
主键的作用 1、 主键是用于唯一标识数据库表中一行数据的。2、 作为一个可以被外键有效引用的对象。
主键的设计原则 1、 主键应当是对用户没有意义的,比如说用户登陆一个系统的时候的登录id;而这种情况就不可能了:“学生表”需要支持这样的需求“学生注销后,可以重新激活自己的信息,而且还要保持自己的号码跟原来的一直”,这样的话主键就不能满足要求了。2、 唯一性。3、 非空性:主键的值是不可重复的,也不可以为空。4、尽量不要更新主键。实际上,因为主键除了惟一地标识一行之外,再没有其他的用途了,所以也就没有理由去对它更新。如果主键需要更新,则说明主键应对用户无意义的原则被违反了。注意:这项原则对于那些经常需要在数据转换或多数据库合并时进行数据整理的数据并不适用。5、主键不应包含动态变化的数据,如时间戳、创建时间列、修改时间列等。6、主键应当有计算机自动生成。如果由人来对主键的创建进行干预,就会使它带有除了惟一标识一行以外的意义。一旦越过这个界限,就可能产生认为修改主键的动机,这样,这种系统用来链接记录行、管理记录行的关键手段就会落入不了解数据库设计的人的手中。
创建主键--在创建表时就可以对字段加上约束:
create table Student(StudentNo int PRIMARY KEY IDENTITY(1,1), --加主键约束,还有标识列属性(两者构成实体完整性)StudentName nvarchar(15) not null, --加非空约束,不加"not null" 默认为:可以为空StudentSchool text(20) FOREIGN KEY REFERENCES SchoolTable(SchoolName), --加外键约束,格式:FOREIGN KEY REFERENCES 关联的表名(字段名)StudentAge int DEFAULT ((0)), --加默认值约束StudentSex nvarchar(2) CHECK(StudentSex=N'男' or StudentSex=N'女') --加检查约束,格式:check (条件表达式))
参考技术A 你要设置主键,首先要保证这个字段里的值全部unique。所以你要么清空表,要么删除重复键值。 参考技术B 已经有重复的数据了,无法创建,要先把重复的数据删除了。
或是再加上其他的字段一起做主键。本回答被提问者和网友采纳
参考技术C 你要创建主键的列里有重复性的内容,删除重复内容就可以创建了

以上是关于sql server 无法创建主键的主要内容,如果未能解决你的问题,请参考以下文章

sql server 无法创建主键

sql server 主键与外键约束无法创建

SQL Server基本概念

SQL Server 中的“键”是啥意思?主键和外键是啥?

在SQL SERVER 中对表不能设置主键

字段属性--主键