数据库
数据库
四 数据库的表管理
数据完整性是指数据的精确性和可靠性:
一、域实体完整性,将行定义为特定表的唯一实体,通过UNIQE(唯一)索引,UNIQE约束或主键约束,强制表的标识符列或主键的完整性。
二、完整性,指定特定列的项的有效性。
三、引用完整性,输入或删除行时,引用完整性保留表之间定义的关系。引用完整性确保键值在所有表中保持一致,这类一致性要求不使用不存在的值,如果一个键值发生更改,则整个数据库中,对该键值的所有引用都要进行一致的更改。
注意:强制引用完整性时,防止用户执行以下操作:
1.在主表中没有关联行的情况下在相关表中添加或更改行;
2.在主表中更改值(可导致相关表中出现孤立行);
3.在有匹配的相关行的情况下删除主表中的行。
四、用户定义完整性
SQL Server 中的每个数据库最多可以存储20亿个表,每个表可以有1024列,表的行数及总大小仅受可用存储空间的限制,每行最多可以存储8086字节。创建表时必须指定表名、列名及数据类型等信息。
主键:用于唯一标识表中的行数据;
由一个或多个字段组成;
具有唯一,不允许取空值;
一个表中只能有一个主键。
数据类型是数据的一种属性,用于指定对象可保存的数据的类型:
l 精准数字可以分为九种数据类型。
Int 这是SQL Server中的主要整数数据类型,占用4
字节,可以存储-231到231之间的数。
Bigint 超过int支持范围存储-263到263,占8个字节
Smallint 存储一些常限定在特定范围内的数值型数据,占
用2个字节,支持范围-215到215
Tinyint 存储有限数目的数值,从1到255之间的整数,
占用1个字节
Bit 属于整型数据,其值只能是0、1或NULL(空值)。
这种数据类型用于存储只有两种可能值的数据,
如yes或no,true或false,on或off
Money 用来表示钱和货币,精确到货币单位的万分之
一,占8个字节。范围是-922 337 203 685 477.5
808到922 337 203 685 477.5808
Smallmoney 用来表示钱和货币,精确到货币单位的万分之
一,占8个字节。范围是-214 748.3648到214
748.3648
Decimal/numeric 用来存储从-1038-1到1038 -1的固定精度和范围的数值型数据,使用这种数据类型时,必须指定范围和精度,范围是小数点左右所能存储的数字的总位数,精度是小数点右边存储的数字的位数。
l 近似数可以分为两种数据类型。
Float 用于表示浮点数值数据的大致数值数据类型,浮点 数据为近似值 。范围是-1.79E+308到1.79E+308
Real 用于表示浮点数值数据的大致数值数据类型,范围更大,占4个字节-3.40E+308到3.40E+308
注意:E一般表示10的幂,例如,1.79E+308的含义为:E是底数为10,+308是指数为308,E+308是指10的308次方。1.79E+308是指1.79E*10308
l 日期和时间可以分为六种数据类型
Date 用来表示日期,占3个字节
Time 用来表示一天中的某个时间,不能感知时区且基于
24小时制度,占用5个字节
Datetime 表示日期和时间,占用8个字节
Datetime2 datetime的扩展,范围更广,并具有可选用户
定义的精度
Datetimeoffset 表示日期和时间,与datetime2比,增
加了时区
Smalldatetime 用来表示1900-1-1到2079-6-6日间的
日期和时间,精确到一分钟,占4个字节
l 字母串可以分为三种数据类型
Char 用于存储固定长度,非Unicode字符数据,当定义
此类型时,必须指定列长,当总能知道要存储的数据的长度时,此数据类型很有用,最多8000个字符
Varchar用于存储可变长度,非Unicode字符数据,它与
Char的最大区别是,存储的长度不是列长,而是数据的长度,最多含221个字符
Text 用于存储大量的非Unicode字符数据,有大约
20亿字符
Unicode字符串可以分为三种数据类型
Nchar 用于存储定长Unicode字符数据,Unicode用双节
字结构来存储每个字符,而不是单个字节,它允许
大量的扩展字符,该数据使用字节在空间上增加了
一倍。
Nvarchar 用于存储变长Unicode字符数据,该数据使用字
节在空间上增加了一倍。
Ntext 用于
存储大量的非Unicode字符数据,该数据使
用字节在空间上增加了一倍。
l 二进制字符串分为三种数据类型
Binary 用于存储可达8000字长的定长的二进制数据,
当输入表的内容接近相同长度时,使用这种数据 类型
Varbinary 用于存储可达8000字长的变长的二进制数据,
当输入表的内容大小可变时,应当使用这种数据类型
Image 用于存储变长的二进制数据,最长达20亿字节
默认值:
如果插入行没有为指定值,默认值则指定列中使用什么值
可以是常量,内置函数或数学表达式
标识符列
包含系统自动生成的序号值打的标识符,特点如下;
1. 列的值由系统按一定规律生成,不允许空值;
2. 列值不重复,唯一标识表中每一行;
3. 每个表只能有一个标识列
创建标识符列(自增列)
2 类型(type):必须是数值类型,如 decimal,int,numeric,smallint,bigint,tinyint
2 种子(seed):指派给表中第一行的值,默认为1
2 递增量(increament):相邻两个标识值之间的增量,默认为1.
检查约束
v 限制列可接受的值
v 通过逻辑表达式创建(CHECK)约束
例如,限制“成绩”列的取值范围为 0 ~ 100
逻辑表达式:成绩 >= 0 and 成绩 <= 100
管理表
一、创建表
1.打开SSMS,然后展开数据库class,右击“表”,然后在弹出的快捷菜单中选择“新建表”
2.输入第一列的列名为“学生编号”,数据类型选择“int”,由于该列需要设置为标识符列,所以不允许为空,取消选中“允许NULL值”
3.为该列设置标识规范。选择该列“(是标识)”,标识增量和标识种子分别设为“1”
4.分别新建列“姓名”、“身份证号”、“所在班级”、“成绩”、“备注”
5.由于要求输入成绩的时候,其值必须为0-100,则可以在“成绩”列设置CHECK约束。即在其快捷菜单中选择“CHECK约束”
6.在打开的“CHECK约束”对话框中,单击“添加”按钮,然后在“(常规)”文本框中输入“表达式”为“成绩>=0 and 成绩<=100”,在标识文本框中设置“名称”为“CK_Table_成绩”
7.设置主键。右击“身份证号码”,在弹出的快捷菜单中选择“设置主键”,可以将该列设置为“主键”,主键列的右边会显示“黄色钥匙”图标
8.设置完成后,保存该表。右击表名,在弹出的快捷菜单中选择“关闭”,系统提示“保存对以下各项更改吗”,选择“是”,然后输入表名。在SSMS中可以看到新建完成的表.
二、编辑表
右击表名,选择“编辑前200行”
三、修改表结构
右击表名,在弹出的快捷菜单中选择“设计”
四、删除表
右击表名,在弹出的快捷菜单中选择“删除”
使用T-SQL语句操作数据表
一、插入数据
使用insert语句将数据插入到表中,格式如下:
Insert into 表名 (列名)values (值列表)
例如:insert into lanzhi (姓名,身份证号,所在班级,成绩) values (‘王兰’,’142225199307215521’,2,90)
Into是选的,可以省略
表名是必须的,而表的列名是可选的,如果省略,(值列表)中顺序与数据表中字段顺序保持一致
多个列名和多个值列表用逗号分割
SQL语句的执行一般在查询窗口进行,单击SSMS中的“新建查询”,可以新建一个查询窗口,选择数据库,输入T-SQL语句。
在SSMS中单击“√”,系统会检查输入的T-SQL语句是否存在语法错误,之后会显示分析结果,如果无误,单击“执行”,可以执行该语句。打开表,可以看到刚刚新插入的数据记录。
在插入数据时,需要注意:
每次插入一整行数据,不可能只插入半行或几列数据;
数据值的数目必须与列相同,每个数据值的数据类型、精度和小数位数也必须与相应的列匹配;
Insert语句不能为标识符列指定值,因为它的值是自动增长的;
对于字符类型的列,当插入数据时,用单引号引起来;
如果在设计表的时候指定某列不允许为空值,则该列必须输入数据,否则将报告错误信息;
插入的数据项要求符合检查约束的要求;
尽管可以不指定列名,但是应养成好习惯,明确指定插入的列和对应的值。
二、更新数据
使用update语句更新表中的数据,格式如下:
Update 表名 set 列名=‘更新值’ where 更新条件
例如:更改lanzhi表中学生王兰的成绩为88,备注为“勤奋好学”
update lanzhi set 成绩=’95’,备注=’勤奋好学’,where 姓名=’王兰’
Set后面可以紧随多个数据列的更新值,不限一个
Where字句是可选的,用来限制条件,如果不限制,则整个表的所有数据都将被更新。
三、删除数据
使用delete删除表中的数据,格式如下:
Delete from 表名 where 条件
例如:删除lanzhi表中学生王兰的记录
Delete from lanzhi where 姓名=王兰
删除lanzhi表中所有记录
Delete from lanzhi
注意:delete后不能出现字段名,如,delete列名from 表名
使用Truncate Table 语句删除表中的数据
Truncate table 用来删除表中的所有行,功能上它类似于没有where子句的delete语句,格式如下:
Truncate table 表名
Truncate与delete的区别:
1. Truncate table不带where子句,只能将整个表数据清空,而delete可以带where子句,允许按条件删除某些记录;
2. Truncate table 不记录事务日志,删除数据后无法通过事务日志恢复,delete无论删除多少记录,都会每删除一行就记录一条事务日志;
3. Truncate table删除表中所有行,标识符列会重置为0,而delete不会重置标识符;
4. Truncate table 不能用于有外键约束的引用的表。这种情况下需要使用delete语句。
本文出自 “兰芷” 博客,转载请与作者联系!
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。