sqlserver 如何把一列分为一行显示_SQL server问题总结01

30f0d8fb34e53f7a85edb5620b446005.png

SQL server版本: S QL server 2019

1.主键

bfae2f308b50480b85163cac4c6108bb.png

什么是主键:

看一下官方文档的解释

表通常具有包含唯一标识表中每一行的值的一列或一组列。 这样的一列或多列称为表的主键 (PK),用于强制表的实体完整性。 由于主键约束可保证数据的唯一性,因此经常对标识列定义这种约束。

如果为表指定了主键约束, 数据库引擎 将通过为主键列自动创建唯一索引来强制数据的唯一性。 当在查询中使用主键时,此索引还允许对数据进行快速访问。 如果对多列定义了主键约束,则一列中的值可能会重复,但来自主键约束定义中所有列的值的任何组合必须唯一。

如下图所示, Purchasing.ProductVendor 表中的 ProductIDVendorID 列构成了针对此表的复合主键约束。 这确保了 ProductVendor 表中的每个行都具有 ProductID 和 VendorID 的一个唯一组合************。 这样可以防止插入重复的行。

99189621466e846dc346b866431b705f.png

  • 一个表只能包含一个主键约束。

  • 主键不能超过 16 列且总密钥长度不能超过 900 个字节。

  • 由主键约束生成的索引不会使表中的索引数超过 999 个非聚集索引和 1 个聚集索引。

  • 如果没有为主键约束指定聚集或非聚集索引,并且表中没有聚集索引,则使用聚集索引。

  • 在主键约束中定义的所有列都必须定义为不为 Null。 如果没有指定为 Null 性,则参与主键约束的所有列的为 Null 性都将设置为不为 Null。

  • 如果在 CLR 用户定义类型的列中定义主键,则该类型的实现必须支持二进制排序。

大概意思就是设置为主键的一列每个数据都是唯一的,当需要表示唯一地址或ID时会用到

摘抄一段CSDN 用户harbor1981的一段解释:

关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键 
比如  
学生表(学号,姓名,性别,班级) 
其中每个学生的学号是唯一的,学号就是一个主键 
课程表(课程编号,课程名,学分) 
其中课程编号是唯一的,课程编号就是一个主键 
成绩表(学号,课程号,成绩) 
成绩表中单一一个属性无法唯一标识一条记录,学号和课程号的组合才可以唯一标识一条记录,所以 学号和课程号的属性组是一个主键 成绩表中的学号不是成绩表的主键,但它和学生表中的学号相对应,并且学生表中的学号是学生表的主键,则称成绩表中的学号是学生表的外键 
同理 成绩表中的课程号是课程表的外键

外键(FK)是用于建立和加强两个表数据之间的链接的一列或多列。通过将保存表中主键值的一列或多列添加到另一个表中,可创建两个表之间的链接。这个列就成为第二个表的外键

2.标识列:

标识规范:

09748bcf1fb253927a20d1134fbfad25.png

a0390ca64caeba3eeed0934511d751df.png

当一个列在标识规范下的(是标识)属性设为“是”,那这一列就成了标识列

先看一下官方文档对标识规范下的选项的定义:

标识指示列是否为表的标识列。 可能的值包括 TrueFalse

标识种子指示标识列的初始行值。

标识增量“标识增量”属性指定在 Microsoft SQL Server 为插入的行生成标识值时,在现有的最大行标识值基础上所加的值****。

标识列和主键作用相似,当表的数据插入时会自动生成一条对应的标识列内的数据,也就是这波数据的一个ID号,可以用这个标识列的数据来表示这波数据,举个例子:班里来了位新同学,他的信息都在档案里,那么他的年龄,性别,身高,户籍等信息录入档案后给他分配个学号,这个学号就是在标识列内的数据,年龄性别等数据就是表里的其他列存储的数据,每个同学的信息在这个表内都有唯一的一个学号(标识列内的一个号码)对应,一个表只能有一个标识列,就像身份证号码,只有这具有唯一性的一串数字表示你是你

标识增量和标识种子比较好解释,标识列的数据具有自增性,种子就是你ID号起始的地方,增量是下一个ID号加多少,例如上图我设置的标识增量55,种子10001,那么往这个表插入一组数据后他的标识号(ID)为10056,再插一组就是10111,依次类推

3.标识规范的是标识选项无法修改的解决办法:

当(是标识)变灰无法将“否”改为“是”时,请检查当前列的数据类型是否为int,“默认值或绑定”选项后是否有设置默认值

当这一列做标识时需:数据类型为int,默认值为空才可以

4.执行查询时报错:

在SQL Server Management Studio中新建查询

select SCOPE_IDENTITY() from tb_User

执行时报错

错误提示:提示对象名 'tb_User' 无效

改为前面加上数据库名,格式为:数据库名.dbo.tb_User

例  select SCOPE_IDENTITY() from db_ZDHYXXZ.dbo.tb_User

问题解决

9ad8f07c75cb7a3082a8f06d6fe7b6b5.gif

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值