数据库复习笔记

写在最前,

写文章的初衷只是为了复习与记录自己的成长,笔者本人也还是学生,文章中难免会出现许多问题与错误,文章内容仅供参考,有不足的地方还请大家多多包涵并指正,谢谢~

使用Transact-SQL命令创建和管理数据表 

数据表结构的创建 
在SQL Server中,每个数据库中最多可以创建200万个表,用户创建数据库表时,最多可以定义1024列,也就是可以定义1024个字段。

数据表结构创建步骤
第一步设置数据表的结构
第二步设置表完整性约束

利用Transact-SQL语句中的create命令创建表

语法形式如下:
CREATE TABLE <表名>
(
 <字段名> <数据类型>[列级完整性约束条件] 
[,<字段名> <数据类型>[列级完整性约束条件] …]
[,<表级完整性约束条件>]
)

关于创建表时运用约束的说明 
(1)空值约束(NULL or NOT NULL)
空值NULL约束决定属性值是否允许为空值(NULL)。NULL表示没有输入任何内容,它不是零和空白,不允许为空值则用NOT NULL表示。

--例如:设置属性teacher允许为空值。
CREATE TABLE t
(
 teacher char(8) NULL
)

(2)主键约束(primary key constraint)
主健约束要求主健属性取值必须唯一,一个表只能包含一个主健约束。如果没有在主健约束中指定CLUSTERED或NONCLUSTERED,并且没有为UNIQUE约束指定聚集索引,则将对该主健约束用CLUSTERED。

主键约束SQL的语法形式如下:

[CONSTRAINT  约束名] PRIMARY KEY [CLUSTERED|NONCLUSTERED](列名[,…n])

--例如:在执行创建产品信息表的操作时,指定产品编号为主键值。
CREATE TABLE products
(
    id char(10) NOT NULL,
    name char(20) NOT NULL,
    price money,
    quantity  smallint  NULL,
    CONSTRAINT  pk_products  PRIMARY KEY CLUSTERED (id)
)
--此例的主健名称是pk_products,在products表中关于id建立了一个索引排序。

(3)唯一性约束(unique constraint)
唯一性约束用于指定一个或者多个列的组合的值具有唯一性,以防止在列中输入重复的值。 

创建唯一性约束SQL语句:
[CONSTRAINT  约束名] UNIQUE [CLUSTERED|NONCLUSTERED](列名[,…n]) 

--例:
CREATE TABLE student1
(sno char(8),
sname char(16),
constraint pk_student primary key(sno),
constraint uniq_student unique(sname)) 

(4)检查约束(check constraint)
使用检查约束时,应该注意以下几点:

① 一个列级检查约束只能与限制的字段有关;一个表级检查约束只能与限制的表中字段有关。
② 一个表中可以定义多个检查约束。
③ 每个CREATE TABLE语句中每个字段只能定义一个检查约束。
④ 在多个字段上定义检查约束,则必须将检查约束定义为表级约束。
⑤ 检查约束中不能包含子查询。

创建检查约束SQL语法格式为:
CONSTRAINT  constraint_name
CHECK  [NOT FOR REPLICATION] (logical_expression) 


--例如:创建一个职工信息表,其中输入性别字段值时,只能接受“F”或者“M”,并且为phonenum字段创建检查约束,限制只能输入类似01080798654之类的数据,而不能随意输入其他数据。
create table employee(
Id char(8),
name char(8) CHECK(NAME LIKE ‘[A-C,a-c][A-Z,a-z][A-Z][A-Z]’),
sex char(2) default ‘F’,
phonenum char(13),
constraint chk_sex check(sex in (’F’,’M’)),
Constraint chk_phonenum check(phonenum like ‘(010)[8,9][0-9][0-9][0-9] [0-9][0-9][0-9][0-9]’))

(5)外部键约束
外部键约束用于强制参照完整性,提供单个字段或者多个字段的参照完整性。当使用外部键约束时,应该考虑以下几个因素:

① 外部键约束提供了字段参照完整性。
② 外部键从句中的字段数目和每个字段指定的数据类型必须和REFERENCES从句中的字段相匹配。
③ 外部键约束不能自动创建索引,需要用户手动创建。
④ 一个表中最多可以有31个外部键约束。
⑤ 在临时表中,不能使用外部键约束。
⑥ 主键和外部键的数据类型必须严格匹配。

外键约束SQL的语法形式如下:
[CONSTRAINT  约束名] FOREIGN KEY (外键列名)REFERENCES 参照表(参照列名) 

外键约束主要用来维护两个表之间的一致性关系。外键的建立主要是通过将一个表的主键所在列包含在另一个表中,这些列就是另一个表的外键。

外键的作用不只是对输入自身的数据进行限制,同时也限制了对主键所在表的数据进行修改
用户无法对主键里的数据进行修改和删除,除非事先删除或修改外键引用的数据。

--例如:学生表S(SNO,SNAME,)中的SNO是S表的主健,课程表C(CNO,CNAME,)中的CNO是C表的主健,而学习表SC(SNO,CNO,GRADE)中的SNO、CNO是SC表的主健,并且SNO和CNO又分别相对于S表和C表是SC表的外健。则创建SC表的SQL语句如下:
CREATE TABLE SC (
SNO CHAR(10) NOT NULL,
CNO CHAR(6) NOT NULL,
GRADE TINYINT DEFAULT NULL,
CONSTRAINT PK_SC PRIMARY KEY ( SNO,CNO ),
CONSTRAINT FK_SC FOREIGN KEY ( SNO ) REFERENCES Student(Sno),
FOREIGN KEY ( CNO ) REFERENCES Course(Cno)
)

数据表结构创建实例
(1)创建表并包含完整性约束定义。 

CREATE TABLE 课程表
( 课号 CHAR(6) NOT NULL,
  课名 VARCHAR(30) NOT NULL,
  学分 INT CHECK(学分>=1 and 学分<=5),
  教材名称 VARCHAR(30),
  编著者 CHAR(8),
  出版社 VARCHAR(20),
  版号 VARCHAR(20),
  定价 money,
  CONSTRAINT PK_课程表_课号  PRIMARY KEY(课号),
  CONSTRAINT CK_课程表_课号  CHECK(课号 LIKE 'C[0-9][0-9][0-9][0-9][0-9]'))

数据表结构的管理 
1.修改数据表结构
表结构创建以后,在使用的过程中经常会发现原来创建的表可能存在结构、约束等方面的问题,在这种情况下,需要对原表进行修改。如果用创建一个新表的方法替换原表,将造成表中数据的丢失,而通过修改表则可以在保留表中原有数据的基础上修改表结构,打开、关闭或删除已有约束,或增加新的约束等。
使用SQL命令修改表。

语法格式:
ALTER TABLE <表名>
    ADD<新列名><数据类型>[完整性约束]
    |ALTER COLUMN 列名 新类型
    |DROP COLUMN 列名
    |ADD PRIMARY KEY(列名[,…])
    |ADD FOREIGN KEY(列名) REFERENCES 表名(列名)
    |ADD CONSTRAINT 约束名….
    |DROP CONSTRAINT 约束名 

--【例2】将教学管理数据库中的学生表的属性性别的长度改为2。 
其SQL语句的程序清单如下:

USE 教学管理      --打开教学管理数据库
GO
ALTER TABLE 学生表
ALTER COLUMN 性别 CHAR(2)   --修改属性列性别
--【例3】向教学管理数据库中的学生表增加属性入学时间,其数据类型为日期型,增加年龄属性,其类型为整型,取值为13~70。

USE 教学管理
GO
ALTER TABLE 学生表 
ADD  入学时间  DATETIME,
        年龄 INT 
      CONSTRAINT CK_学生表_年龄 CHECK(年龄>=13 AND 年龄<70)  

2.数据表结构的删除

SQL命令的一般格式为:
DROP  TABLE  <表名>

写在最后,

因本系列文章主要为复习,故重点关注数据库概念知识与理论知识,涉及使用对象资源管理器操作数据库的内容就不再赘述,笔记仅作为参考,若读者发现内容有误请私信指正,谢谢~

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你代码有bug!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值