用SQL语句创建一个临时表,建立主键约束,并验证主键约束是不是可以被修改。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用SQL语句创建一个临时表,建立主键约束,并验证主键约束是不是可以被修改。相关的知识,希望对你有一定的参考价值。
只要写脚本就好了,麻烦各位了
create table #temp(id int identity(1,1) primary key,name nvarchar(6))insert #temp (name)
select 'aa'
union all
select 'bb'
select * from #temp
update #temp set id=11 where id=1
消息
消息 8102,级别 16,状态 1,第 2 行
无法更新标识列 'id'。
结论:临时表可以有主键约束,但不能被更新追问
谢谢回答
追答不客气 解决了你的问题后 采纳就好
参考技术A qq479075557的答案稍有偏颇,《结论:临时表可以有主键约束,但不能被更新》不对。
无法更新标识列 'id',是因为创建的字段是自增列。
如果标识列 'id'不是自增列,同样可以更新。
试试下面的脚本。。。。
create table #temp(id int primary key,name nvarchar(6))
insert #temp (id,name)
select 1,'aa'
union all
select 2,'bb'
select * from #temp
update #temp set id=11 where id=1
在SQL SERVER 中对表不能设置主键
“t1”表
- 无法创建索引“PK_t1”。
因为发现对象名称 'dbo.t1' 和索引名称 'PK_t1' 有重复的键,所以 CREATE UNIQUE INDEX 语句终止。重复的键值为 (1)。
无法创建约束。请参阅前面的错误消息。
语句已终止。、
怎么处理 解决
主键的作用 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语句创建一个临时表,建立主键约束,并验证主键约束是不是可以被修改。的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server创建 学号 性别 课程编号 check约束 主键约束 UNIQUE约束