SQLServer数据库的表管理

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
简介:

4-SQLServer数据库的表管理

一、表的基本概念

Ø表是包含数据库中所有数据的数据对象,表定义是一列集合

Ø数据在表中的组织方式与在电子表格中相似,都是按行和列的格式组织的

Ø每一行代表一条唯一记录,每一列代表记录中的一个字段

1)、数据完整性

数据完整性是指数据的精确性和可靠性,它是应防止数据库中存在不符合语义规定的数据和防止因错误信息的输入/输出造成无效操作或错误信息而提出的

1、实体完整性

Ø实体完整性将定义为特定表的唯一实体

Ø实体完整性通过unque(唯一)索引,unque约束或Primary key(主键)约束,强制表的标识符列或主键的完整性

2、域完整性

Ø域完整性指特定的有效性

Ø可以强制域完整性限制类型(通过使用数据类型)、限制格式(通过使用check约束和规则)或限制可能值的范围(通过使用foreign key约束、check约束、Default定义、Not Null定义和规则)

3、引用完整性

Ø输入或删除行时,引用完整性保留表之间定义的关系

Ø引用完整性通过foreign key(外键)和check(检查)约束,以外键与主键之间或外键与唯一键之间的关系为基础

Ø引用完整性确保键值在所有表中一致

4、用户定义完整性

Ø用户定义完整性命名您可以定义不属于其他任何完整性类别的特定业务规则,所有完整性类别都支持用户定义完整性

2)、主键

Ø主键唯一标识表中的行数据,一个主键值对应一行数据

Ø主键由一个或多个字符段组成,其值具有唯一性,不允许取空值(Null),一个表只能有一个主键

Ø如果主键由多个列组成,则其中一列将允许重复值,但是主键中所有列的值各种组合必须是唯一的

二、使用SSMS操作数据表

ØSQL Server中的每个数据库最多可以存储20亿个表,每个表可以有1024

Ø表的行数据及总大小仅受可用存储空间的限制,每行最多可以存储8060字节

1)、数据类型

Ø数据类型是数据的一种属性,用于指定对象可保存的数据的类型,如整数数据、字符数据、货币数据、日期和时间数据、二进制字符串等

Ø数据类型类别:“精准数字、近似数字、日期和时间、字符串、unicode字符串、二进制字符串、其他数据类型”

【精准数字】

int:整数数据类型,几乎所有数值型的数据都可以使用这种数据类型,可以存储c 从-(-2147483648)到(2147483648)之间的整数,它占用了4个字节的空间。

bigint:存储数据值超过int数据类型支持范围,可以存储-之间的数值,它点用了8个字节的空间

smallint存储一些常限定在特定范围内的数值类型数据,可以存储从--32768)到32768)之间的整数,它占用了1个字节的空间

tinyint在存储有限数目的数值时很有用,存储从0255之间的数值,它占用1个字节的空间

bit整型数据,其值只能是01Null(空值)。它只能存储只有两种可能值的数据,如“yesno”,“Falceonoff

decimal小数,用来存储从--1的固定精度和范围的数值型数据。使用它必须指定范围和精度。‘范围’是小数据点左右所能存储的数字的总位数。‘精度’是小数点右边存储的数字的位数

numericnumeric在功能上等介于decimal

money用来表示钱和货币值。精确到货币单位的万分之一。它占用了8个字节空间,从-922337203685477.5808922337203685477.5807之间

sumallmoneysmallmoney在功能上等价于money。从-214748.3648214748.3647之间

【近似数字】

float:用于表示浮点数值数据的大致数值数据类型。浮点数据为近似值,因此,并非数据类型范围内的所有数值都能精确地表示。表示值在-1.79E+308到1.79E+308之间的任意数

real:用于表示浮点数值数据的大致数值数据类型。表示值在-3.40E+38到3.40E+38之间的浮点数

【日期和时间】

date用来表示日期。它占用了3个字节空间,存储从公元元年1月1日到公元9999年12月31日间所有的日期数据

time用来表示一天中的某个时间。它占用了5个字节空间

datetime用来表示日期和时间。它占用了8个字节空间。存储从1753年1月1日到9999年12月31日间所有的日期和时间数据

datetime2可将datetime2视作现有datetime类型的扩展。其数据范围更大,默认的小数精度更高

datetime offset用来表示日期和时间。与datetime2相比,增加了时区

smalldatetime用来表示从1900年1月1日到2079年6月6日的日期和时间,精确到一分钟,该数据类型占用了4个字节空间

【字符串】

char:用于存储固定长度,非Unicode(统一,全球通用)字符数据。它包含了8000个字符

varchar用于存储可变长度,非Unicode字符数据。它包含了-1或大约20亿个字符

text用于存储大量的非Unicode字符型数据。包含-1或大约20亿个字符

【Unicode字符串】

nachar用于存储定长Unicode字符型数据。Unicode用双字节结构来存储每个字符,而不是用单字节(普通文本中的情况)。它允许大量的扩展字符。该数据类型使用的字节在空间上增加了一倍。

nvarchar用于存储变长Unicode字符型数据。该数据类型使用的字节在空间上增加了一倍

ntext用于存储大量的Unicode 字符型数据。该数据类型使用的字节在空间上增加一倍

【二进制字符串】

binary:可存8000字节长的定长二进制数据。当输入表的内容接近相同的长度时,应该使用这种数据类型

varbinary可存8000字节长的变长的二进制数据。当输入表的内容大小可变时,应该使用这种类型数据

image用于存储变长的二进制数据,最大可达-1或大约20亿字节

2)、默认值

Ø如果插入行时没有为列指定值,默认值则指定列中使用什么值

Ø默认值可以是计算结果为常量的任何值

3)、标识符列

Ø对于每个表,均可创建一个包含系统生成的序号值的标识符列,该序号值以唯一方式标识表中的每一行

Ø可以使用标识符列在表中创建自动递增标识号,所以标识符列习惯上又叫自增列,只能为每个表创建一个标识符列

【标识符列的特点】

a)列的数据类型为不带小数的数值类型

b)在进行插入(insert)操作时,该列的值由系统按一定规律生成,不允许为空值

c)列值不重复,具有标识表中每一行的作用,每个表只能有一个标识列

【标识列的指定内容】

a)类型(type):标识符列类型必须是数值类型,如decimalintbignittiynyintsmallintnumeric。当选择decimalnumeric时,小数位数必须为0

b)种子(Seed):指派给表中第一行的值,默认为1

c)递增量(increment):想邻两个标识值之间的增量,默认值为1

4)、检查约束

Ø通过限制列可接受的值,CHECK约束可以强制域的完整性

Ø可以通过任何基于逻辑运算符返回TRUEFALSE的逻辑(布尔)表达式,创建CHECK约束

Ø例如:限制从0-200之间的年龄数值

age >= 0  and  age <= 200

5)、管理表

创建表、修改表结构、删除表

三、使用T-SQL语句操作数据表

1)、插入数据

insert [into]  表名  [列名]  values <值列表>

                  #[into]是可选项,可以省略

                  #表名是必须的,而表的列名是可选的

                  #多个列名和多个值列表用逗号分隔

【举例:向student表中插入一行数据】

insrt  into  student (姓名,身份证号,成绩) values (‘王兰’,’123456’,’90’)

2)、更新数据

update  <表名>  set <列名=更新值> [where  <更新条件>]

                  #set后面可以紧随多个数据列的更新值,不限一个

                  #where子句是可选的,用来限制条件。如果不限制,则整个表的所有数据行被更新

【举例:向student表中王兰的成绩为95,添加备注为“学习好”】

update  student  set  成绩=’95’,备注=’学习好’,where 姓名=’王兰’

3)、删除数据

1、使用delete语句删除表中的数据

delete from  <表名>  [where <删除条件>]

【举例:删除student表中学生王兰的记录】

delete  from  student where  姓名=’王兰’

【举例:删除student表中所有的记录】

delete from  student  

《注意》

delete……from……是删除整条记录,不会只删除单个字段,所以在delete不能出现字段名。

2、使用Truncate  Table语句删除表中的数据

truncate  table  <表名>

【Truncate与Delete的区别】

a)TruncateTable不带where子句,只能将整个表数据清空,Delete可以带where子句,允许按条件删除某些记录

b)TruncateTable不记录事务日志,而Delete无论删除多少记录,都会每删除一行就记录一条事务日志。所以Truncate 删除数据后是无法通过事务日志恢复的

c)TruncateTable删除表中所有行,标识符列会重置为0。而Delete不会重置标识符列。

d)TruncateTable不能用于有外键约束引用的表,这种情况下,需要使用Delete语句



本文转自甘兵 51CTO博客,原文链接:http://blog.51cto.com/ganbing/1209546,如需转载请自行联系原作者


相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
相关文章
|
20天前
|
SQL 数据库
数据库数据恢复—SQL Server数据库报错“错误823”的数据恢复案例
SQL Server附加数据库出现错误823,附加数据库失败。数据库没有备份,无法通过备份恢复数据库。 SQL Server数据库出现823错误的可能原因有:数据库物理页面损坏、数据库物理页面校验值损坏导致无法识别该页面、断电或者文件系统问题导致页面丢失。
87 12
数据库数据恢复—SQL Server数据库报错“错误823”的数据恢复案例
|
15天前
|
SQL 关系型数据库 MySQL
创建包含MySQL和SQLServer数据库所有字段类型的表的方法
创建一个既包含MySQL又包含SQL Server所有字段类型的表是一个复杂的任务,需要仔细地比较和转换数据类型。通过上述方法,可以在两个数据库系统之间建立起相互兼容的数据结构,为数据迁移和同步提供便利。这一过程不仅要考虑数据类型的直接对应,还要注意特定数据类型在不同系统中的表现差异,确保数据的一致性和完整性。
25 4
|
29天前
|
SQL 存储 数据管理
SQL Server数据库
SQL Server数据库
42 11
|
1月前
|
SQL 安全 数据库
基于SQL Server事务日志的数据库恢复技术及实战代码详解
基于事务日志的数据库恢复技术是SQL Server中一个非常强大的功能,它能够帮助数据库管理员在数据丢失或损坏的情况下,有效地恢复数据。通过定期备份数据库和事务日志,并在需要时按照正确的步骤恢复,可以最大限度地减少数据丢失的风险。需要注意的是,恢复数据是一个需要谨慎操作的过程,建议在执行恢复操作之前,详细了解相关的操作步骤和注意事项,以确保数据的安全和完整。
65 0
|
2月前
|
SQL 存储 调度
|
2月前
|
SQL 安全 数据库
|
2月前
|
SQL 存储 监控
|
SQL 数据库
如何快速备份还原Sql Server 数据库
备份数据库 选择你要备份的数据库,鼠标右键单击,选择任务-备份   弹出备份数据库窗口,选择添加    弹出选择备份目标窗口,点击浏览,选择存放备份数据库的目录,输入文件名,后缀名输入.bak,点击确定,确定,备份完成     还原数据库  鼠标右键单击数据库,选择还原文件和文件   ...
1349 0