3.1表结构和数据类型

3.1.1表和表结构

  • 表结构。组成表的各列的名称及数据类型,统称为表结构。
  • 记录。每个表包含了若干行数据,它们是表的“值”,表中的一行称为一个记录。因此表是记录的有限集合。
  • 字段。每个记录由若干个数据项构成,将构成记录的每个数据段称为字段。
  • 空值。空值(null)通常表示未知、不可用或将在以后添加的数据。若一个列允许为空值,则向表中输入记录值时可不为该列给出具体值;而一个列若不允许为空值,则在输入时必须给出具体值。
  • 关键字。若表中记录的某一字段或字段组合能唯一标识记录,则称字段或字段组合为候选关键字(Candidate Key)。若一个表有多个候选关键字,则选定其中一个为主关键字(Primary Key),也称为主键。当一个表仅有唯一的一个候选关键字时,该候选关键字就是主关键字。

3.1.3表结构设计

创建表的实质就是定义表结构,设置表和列的属性。在创建表之前,先要确定表的名称、表的属性,同时确定表所包含的列名、列的数据类型、长度、是否可为空值、约束条件、默认值设置、规则及所需索引、哪些列是主键、哪些列是外键等,这些属性构成表的结构。

1.创建表 CREATE TABLE

CREATE TABLE [数据库名.[架构名].|架构名.]表名
(<列定义>......[<表约束>]
)   ......<列定义>=
列名 数据类型                     /*指定列名、列的数据类型*/
[FILESTREAM]                      /*指定FILESTREAM的属性*/
[COLLATE 排序名]                 /*指定排序规则*/
[NULL | NOT NULL]                 /*指定是否为空*/
[[CONSTRAINT 约束名]                  DEFAULT 常量表达式            /*指定默认值*/
]
|[IDENTITY[(初值,增量)][NOT FOR REPLICATION]]      /*指定列为标识列*/
[ROWGUIDCOL]                                       /*指定列为全局标识符列*/
[<列约束>...]                                       /*指定列的约束*/  

说明:

a.FILESTREAM:允许以独立文件的形式存放大对象数据,而不是像以往一样将所有的数据都保存到数据文件中。

b.NULL | NOT NULL:NULL表示列可以取空值,NOT NULL表示列不可以取空值。

c.DEFAULT 常量表达式:为所在的列指定默认值,默认值“常量表达式”必须是一个常量值、标量函数或NULL值。DEFAULT定义可适用于除定义timestamp或带identity属性的列以外的任何列。

d.IDENTITY:指出该列为标识符列,为该列提供唯一的、递增的值。“初值”是标识字段的起始值,默认为1,“增量”是标识增量,默认值为1.如果为IDENTITY指定了NOT FOR REPLICATION选项,则复制代理执行插入时,标识列中的值将不会增加。

e.ROWGUIDCOL:表示新列是行的全局唯一标识符列,ROWGUIDCOL属性只能指派给uniqueidentifier列。该属性并不强制列中所存储值的唯一性,也不会为插入到表中的新行自动生成值。

f.<列约束>:列的完整性约束,指定主键、替代键、外键等。若指定该列为主键,则使用PRIMARY KEY关键字。

示例:

USE test1
GO
CREATE TABLE xsb1
(学号     char(6)         NOT NULL PRIMARY KEY,姓名     char(8)         NOT NULL,性别     bit             NULL DEFAULT 1,出生时间 date            NULL,专业     char(12)        NULL DEFAULT '计算机',总学分        int             NULL DEFAULT 0,备注       varchar(500)    NULL
)
GO  

2.修改表结构:ALTER TABLE

ALTER TABLE [数据库名.[架构名].|架构名.]表名
{ALTER COLUMN 列名{...}                            /*修改已有列的属性*/|ADD                                              /*添加列*/   {<列定义>|列名 AS 表达式 [PERSISTED[NOT NULL]]         /*定义计算列*/|<表约束>}[,...]|DROP{[CONSTRAINT]约束名                            /*删除约束*/  [WITH(<删除聚集约束选项>...)]|COLUMN 列名                                  /*删除列*/ }[,...]|[WITH{CHECK|NOCHECK}]{CHECK|NOCHECK}CONSTRAINT{ALL|约束名}......
}

a.表名:要修改的表名。

b.ALTER COLUMN子句:修改表中指定列的属性,“列名”给出要修改的列。

c.ADD子句:向表中增加新列,新列的定义方法与CREATE TABLE命令中定义列的方法相同。一次可以添加多个列,中间用逗号隔开。

d.DROP子句:从表中删除列或约束。(删除列之前,必须先删除基于该列的所有索引和约束)。

e.WITH子句:[WITH{CHECK|NOCHECK}]指定表中的数据是否用新添加的或重新启用的FOREIGN KEY或CHECK约束进行验证。ALL关键字指定启用或者禁用所有的约束。

ALTER COLUMN 列名
{类型名[(精度[,位数])][COLLATE 排序名][NULL | NOT NULL]......
}

f.类型名:为被修改列的新数据类型。当要修改成数值类型时,可以使用(精度[,位数])分别指定数值的精度和小数的位数。

g.[NULL | NOT NULL]:表示将列设置为是否为空,设置成NOT NULL时要注意表中该列是否有空数据。

示例:

USE test1
GO
ALTER TABLE xsb1ADD 入学时间  date
GO

3.删除表:DROP TABLE

DROP TABLE [数据库名.[架构名].|架构名.]表名[,...][;]

其中表名是要被删除的表的名称

4.插入记录 INSERT

INSERT [TOP (表达式)[PERCENT]]
[INTO] 表名|视图名
[(列表)]
VALUES (DEFAULT|NULL|表达式...)             /*指定列值*/
|DEFAULT VALUES                             /*强制新行包含为每个列定义的默认值*/ 

说明:

a.表名:被操作的表的名称。前面可以指定数据库名和架构名

b.视图名:被操作的视图名称

c.列表:需要插入数据列的列表,包含了新插入行的各列的名称。如果只给表的部分列插入数据时,需要用“列列表”指出这些列。

d.VALUES子句:包含各列需要插入的数据清单,数据的顺序要与列的顺序相对应。若省略“列列表”,则VALUES子句给出每一列(除IDENTITY属性和timestamp类型以外的列)的值。

e.DEFAULT VALUES:该关键字说明向当前表中所有列均插入其默认值。此时,要求所有列均定义列默认值。

示例:

USE test1
GO
INSERT INTO xsb1VALUES('191301','王林',1,'1990-02-10','计算机',50,NULL),('191302','王林林',0,'1992-03-11','软件工程',52,'三好学生')
GO

5.修改记录:UPDATE

UPDATE [TOP(表达式)[PERCENT]]
{表名|视图名}
SET{列名=表达式,...}                            /*赋予新值*/
[FROM<表源>...]
[WHERE<查找条件>  | ...]                        /*指定条件*/
......

a.SET子句:用于指定要修改的列或变量名及其新值。

b.FROM子句:指定用表来为更新操作提供数据。

c.WHERE子句:WHERE子句中的<查找条件>指明只对满足该条件的行进行修改,若省略该子句,则对表中的所有行进行修改。

示例:

USE test1
GO
UPDATE xsb1SET 备注='外校互认学分课程',总学分=总学分+3WHERE 学号='191301'
GO

6.删除记录:DELETE/TRUNCATE TABLE

删除负荷条件的记录

DELETE [TOP (表达式) [PERCENT]]
[FROM 表名|视图名 | <表源>]
[WHERE <查找条件> |...]                       /*指定条件*/ 

a.[TOP (表达式) [PERCENT]]:指定将要删除的任意行数或任意行的百分比。

b.FROM子句:说明从何处删除数据

c.WHERE子句:删除操作指定条件。若省略WHERE子句,则DELETE语句将删除所有数据。

示例:

USE test1
GO
DELETEFROM xsb1WHERE 总学分 = 0
GO

删除表的所有记录

TRUNCATE TABLE 表名

说明:

a.使用TRUNCATE TABLE语句删除了指定表中的所有行,但表结构及其列、约束、索引等保持不变,而新行标识所用的计数值重置为该列的初始值。如果要保留标识计数值,则要使用DELETE语句。

b.“TRUNCATE TABLE”和“DELETE TABLE”二者均为删除表中的全部行。但TRUNCATE TABLE比DELETE速度快,且使用的系统和事务日志资源少。

DELETE语句每次删除一行,并在事务日志中为所删除的每一行记录一项。而TRUNCATE TABLE通过释放存储表数据所用的数据页来删除数据,

并且只在事务日志中记录页的释放。

对由外键(FOREIGN KEY)约束引用的表,不能用TRUNCATE TABLE删除数据,而应该用不带WHERE子句的DELETE删除。另外,TRUNCATE TABLE语句也不能用于参与了索引视图的表。

c.表记录删除后不能恢复

d.如果删除表记录的同时删除表结构,则使用“DROP TABLE 表名”命令

7.同步记录 :MERGE

MERGE [TOP (表达式)[PERCENT]]
[INTO] 目标表 [ [AS] 别名]
USING <表源>
ON <连接条件>
[WHEN MATCHED [AND<查找条件>]THEN {UPDATE SET <set子句>|DELETE}]
[WHEN NOT MATCHED  [BY TARGET] [AND<查找条件>]THEN INSERT [(列列表)]{VALUES(值列表)|DEFAULT VALUES}]
[WHEN NOT MATCHED BY SOURCE [AND<查找条件>]THEN {UPDATE SET <set子句>|DELETE}]

说明:

a.目标表:指定要更新数据的表或视图。AS子句用于为表定义别名。

b.USING子句:指定用于更新的源数据表。

c.ON子句:指定在<表源>与目标表进行连接时所遵循的条件

d.WHEN MATCHED子句:表示在应用了ON子句的条件后,目标表存在与源表匹配的行时,对这些行在THEN子句中指定修改或删除的操作。THEN子句中,UPDATE SET<set子句>用于修改满足条件的行,DELETE关键字用于删除满足条件的行。另外还可以使用AND<查找条件>指定任何有效的查找条件。

e.WHEN NOT MATCHED [BY TARGET]子句:指定对于源表中满足ON子句中条件的每一行,如果该行与目标中的行不匹配,则向目标表中插入该行数据。要插入的数据在THEN关键字后的INSERT子句中指定。一个MERGE语句只能有一个WHEN NOT MATCHED子句。

f.WHEN NOT MATCHED BY SOURCE子句:指定对于目标表中与源表应用了ON子句中条件后返回的行不匹配,但满足其他查找条件的所有行,根据THEN关键字后的子句进行修改或删除。

一个MERGE语句最多可以有两个WHEN MATCHED子句或两个WHEN NOT MATCHED BY SOURCE子句。如果制定了两个相同的子句,则第一个子句必须同时带一个AND<查找条件>子句,而且其中一个必须指定UPDATE操作,另一个必须指定DELETE操作,另外MERGE语句必须以分号结尾。

示例:创建xsb3,表结构用于xsb1相同,进行同步

MERGE INTO xsb3USING xsb1 ON xsb3.学号=xsb1.学号WHEN MATCHEDTHEN UPDATE SET xsb3.姓名=xsb1.姓名,xsb3.性别=xsb1.性别,xsb3.出生时间=xsb1.出生时间,xsb3.专业=xsb1.专业,xsb3.总学分=xsb1.总学分,xsb3.备注=xsb1.备注WHEN NOT MATCHED THEN INSERT VALUES(xsb1.学号,xsb1.姓名,xsb1.性别,xsb1.出生时间,xsb1.专业,xsb1.总学分,xsb1.备注)WHEN NOT MATCHED BY SOURCETHEN DELETE;

列名 userid 不明确。 表结构_SQL-Server(三)表的创建和操作相关推荐

  1. dbvisualizer 查表结构_Sql语句查看表结构

    快速查看表对的就说明,及表字段描述及字段类型 1 --表描述 2 SELECTtbs.name 表名,ds.value 描述3 FROMsys.extended_properties ds4 LEFT ...

  2. cte公用表表达式_SQL Server公用表表达式(CTE)

    cte公用表表达式 什么是通用表表达式 (What is a Common Table Expression ) A Common Table Expression, also called as C ...

  3. 用sql改oracle表结构,SQL server 表结构转Oracle SQL脚本

    SQL server 表结构转Oracle SQL脚本 /****** Object: StoredProcedure [dbo].[getOracle] Script Date: 2019/7/25 ...

  4. oracle转换表结构,SQLServer表结构转换成Oracle表结构

    /******************** * function:sqlserver 表结构转换成Oralce 表结构,不支持索引以及自动增长 **********************/ --取消 ...

  5. 列名 userid 不明确。 表结构_那些你不知道的表结构设计思路

    ERP表结构的设计--第9篇 用日志记录"开源软件"的诞生 赤龙ERP开源地址: 点亮星标,感谢支持,与开发者交流 kzca2000 码云: https://gitee.com/r ...

  6. cte公用表表达式_SQL Server中的CTE; 查询公用表表达式

    cte公用表表达式 Common table expressions (CTEs) in SQL Server provide us with a tool that allows us to des ...

  7. sql删除表结构_SQL删除表

    sql删除表结构 In a real-time situation, there are scenarios when we would like to remove the table from t ...

  8. sql php修改mysql结构_sql怎么修改表内容

    sql修改表内容的方法:可以通过执行[update 表名 set 列名1=值,列名2=值 where 条件;]命令来修改.使用该命令可以修改单表中一行单列或者多列数据. sql中修改表的内容有以下三种 ...

  9. HTML(表结构,关联三个小练习)

    千里之行始于足下,不知不觉我也不知道学习了IT有些时间了,小编此篇博客为练习处理,希望帮助到一些和我一样的小白,不多说,上干货. 练习1.用表结构,构造出下图的银行汇款单. <!DOCTYPE ...

最新文章

  1. php 500 内部服务器错误,php 500 - 内部服务器错误的解决方法
  2. 干货|神经网络及理解反向传播
  3. 【百度分享】以太网卡TSO技术浅析
  4. VMware vSphere 虚拟化简介
  5. WebSocket服务器端的日志重复打印问题
  6. C++学习之路 | PTA乙级—— 1078 字符串压缩与解压 (20 分)(精简)
  7. 地平线开源轻量级、有效可变组卷积的人脸识别网络VarGFaceNet
  8. 进行java环境设置的原因_java环境变量的设置原因
  9. HardSoft-Viewer PHP_index.php
  10. 入行AI,从何做起—光环飞马网直播课回顾
  11. Bailian4077 出栈序列统计【卡特兰数】(vijos P1122)
  12. HDU 1285 拓普排序 基本模板例题 确定比赛名次
  13. FFmpeg总结(十)用ffmpeg进行在视频中加水印图、加gif图
  14. 正则表达式-2-正则表达式实战1
  15. 有关计算机学的心得体会,关于计算机学习心得体会大全
  16. 用flash MX 制作 flash video
  17. dede采集简单好用的织梦采集
  18. 拿php做个日历,分享如何用PHP制作日历(附代码)
  19. mac 如何安装 wget
  20. 军团要塞2无限子弹服务器,【图片】教大家创建tf2服务器(互联网的)小白版~【军团要塞吧】_百度贴吧...

热门文章

  1. (十七)spring cloud微服务分布式云架构-eureka 基础
  2. array variable used in printf function
  3. spring security3.x学习(15)_扩展JdbcDaoImpl。
  4. C#操作存储过程,输入参数,返回结果
  5. 关于Ip地址分配规则(IPV4)
  6. linux ext3下删除mysql数据库的数据恢复案例
  7. 华为机试HJ24:合唱队
  8. securecrt遇到一个致命的错误且必须关闭_淄博plc维修西门子plcs7-200致命错误7强制数据永久存储区错误...
  9. EMC测试仪器_智芯文库 | 单片机系统EMC测试和故障排除
  10. 测试监控系列:使用vb批量统计nmon结果