数据库

数据库

数据库的表管理



数据完整性是指数据的精确性和可靠性:

一、域实体完整性,将行定义为特定表的唯一实体,通过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语句。


本文出自 “兰芷” 博客,转载请与作者联系!

数据库,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。