SQL基础整理
- 数据表的创建和管理
- 数据表的概述
- 创建学生选课数据库的数据表
- 管理学生选课数据库的数据表
- 学生选课数据库数据的完整性
- 约束
- 数据表中的数据的操作
数据表的创建和管理
数据表的概述
1.表的基本概念
数据库中的表是组织和管理数据库的基本单位,数据保存在表中,数据库的管理和开放都依赖于表特性如下
- 表是组织和管理数据的基本单位
- 表是由行和列组成的二维结构
- 表中的一行称为一条记录,表中的一列称为一个字段
2.数据类型
3.列的为空性
没有输入的值,未知或未定义。可接受为空也可以拒绝为空。
创建学生选课数据库的数据表
使用CREATE TABLE语句如
USE 学生选课 --数据库名
GO
CREATE TABLE Cours( --创建课程表
Cno char(6) NOT NULL,
Cname char(20) NOT NULL,
Credit tinyint,
Semester tinyint)
GO
CREATE TABLE SC --创建选课表
(Sno char(5) NOT NULL,
Cno char(6) NOT NULL,
Grade tinyint)
GO
)
管理学生选课数据库的数据表
1.查看表结构
数据表的属性,表结构,表中数据
2.修改数据表
使用ALTER TABLE语句
ALTER TABLE <表名>
--改变列的数据类型
ALTER COLUMN <列名> <新的类型>[NULL| NOT NULL]
--添加列
ADD <新列名> <数据类型> [完整性约束]
--删除列
DROP COLUMN <列名>
--删除数据表
DROP TABLE 表名
--重命名数据表
sp_rename '原表名','新表名'
学生选课数据库数据的完整性
数据完整性是指数据的精确性和可靠性。主要用于保证数据库中数据的质量。
- 实体完整性
实体完整性是保证关系中的每个元组都是可识别的和惟一的。 而且表中不允许存在如下的记录:
无主码值的记录 主码值相同的记录 - 域完整性
是指数据库表中的列必须满足某种特定的数据类型或约束。其中,约束又包括强制域完整性、限制类型、限制格式或限制可能值的范围。 - 参照完整性
用于描述实体之间的联系。
参照完整性一般是指多个实体(表)之间的关联关系。
一般用外码实现。对于外码,一般应符合如下要求:1或者值为空;2或者等于其所引用的关系中的某个元组的主码值.
外码:取作本表(子表)属性之一的外表(父表,主表)主码。
主码值先在主表中生成,后在子表中引用 - 用户自定义的完整性
也称为域完整性或语义完整性。
按应用语义,属性数据有:1.类型与长度限制:方便计算机操作;2.取值范围限制:防止属性值与应用语义矛盾
约束
约束(Constraint)是Microsoft SQL Server 提供的自动保持数据库完整性的一种方法。约束就是限制,定义约束就是定义可输入表或表的单个列中的数据的限制条件。
约束类型 | 完整性类型 | 描述 | 约束对象 |
默认值约束 | 域完整性 | 当使用INSERT插入语句时,若已定义默认值时列没有提供指定值,则将该默认值插入记录中 | 列 |
检查约束 | 域完整性 | 指定某一列可接受的值 | 列 |
主键约束 | 实体完整性 | 每行记录的唯一标识,确保用户不能输入重复值,并自动创建索引,提高性能。该列不允许使用空值 | 行 |
唯一约束 | 实体完整性 | 在列集内强制执行值的唯一性,防止出现重复值,表中不允许有两行的同一列包含相同的非空值。 | 行 |
外键约束 | 参照完整性 | 定义一列或几列,其值与本表或其他表的主键或UNIQUE列相匹配 | 表与表之间 |
- 主键约束
用于指定表的一列或几列的组合唯一标识表,即能在表中唯一地指定一行记录,这样的一列或列的组合称为表的关键。定义主键约束的列,其值不可为空、不可重复;每个表中只能有一个主键。主键约束也称为实体完整性约束。
CREATE TABLE<表名>
(<列名><列属性><约束名>
PRIMARY KEY
)
- 外键约束
两表中有共同列,则将两表中共同列一各定义为主关键字,另一个定义为外关键字将两个表关联起来。结果为当向含有外关键字的表中插入数据时,如果该列插入的列值在里一个表中的主关键字列不存在,则系统会拒绝插入数据。
CREATE TABLE <表名>
(列名 数据类型 为空性
FOREIGN KEY REFERENCES ref_table (ref_column)
)
--创建表时,定义与列定义无关的表级外键约束
CONSTRAINT 约束名
FOREIGN KEY column_name [] REFERENCES ref_table[]
--例如重新创建选课表
CREATE TABLE SC(
Sno char(5) NOT NULL FOREIGN KEY REFERENCES Student(Sno),
Cno char(6) NOT NULL FOREIGN KEY REFERENCES Course(Cno),
PRIMARY KEY(Sno,Cno)
)
-- 第二种
CREATE TABLE SC(
Sno char(5) NOT NULL PRIMARY KEY,
Cno char(6) NOT NULL PRIMARY KEY,
CONSTRAINT FK_Student FOREIGN key (Sno) REFERENCES Student (Sno),
CONSTRAINT FK_Course FOREIGN KEY(Cno) REFERENCES Course (Cno)
)
( 其中,参数说明如下。
REFERENCES:参照。
ref_table:主键表名,要建立关联的被参照表的名称。)
ref_column:主键列名
外键并不一定要与相应的主键同名
- 唯一约束
用于指定非主键的一个列或多个列的组合值具有唯一性,以防止在列中输入重复的值
惟一约束与主键约束的区别 。
惟一性约束指定的列可以有NULL 属性。但主键约束所在的列则不允许;
一个表中可以包含多个惟一约束,而主键约束则只能有一个;
添加唯一约束
ADD CONSTRAINT 约束名 UNIQUE(列名)
- 检查约束
实际上是验证字段输入内容的规则,表示一个字段的输入内容必须满足CHECK约束的条件,若不满足,则数据无法正常输入。可以对每个列设置CHECK约束。检查约束也称为用户自定义完整性。
在创建的表中添加检查约束
ALTER TABLE 表名
ADD CONSTRAINT 约束名 CHECK(logical_expression)
--logical_expression可以表示为条件
--如年龄大于18:
Sage>=18
- 默认约束
默认值约束(DEFAULT)用于确保域完整性,它提供了一种为数据表中任何一列提供默认值的手段。
使用默认值约束时应注意
(1)默认约束值只能应用于INSERT语句,且定义的值碧血与该列的数据类型和精度一致
(2)在每一列上只能有一个默认值约束。如果有多个默认值约束,则系统将无法确定在该列上使用哪一个约束
(3)不能定义在指定了IDENTITY属性或数据类型为timestamp的列上,这些列系统会自动提供
(4)允许使用一些系统函数提供的值
CONSTRAINT 约束名 DEFAULT constant_expression FOR 列名
--如在表中,将性别列设定默认值为男
USE PD
GO
ALTER TABLE Student
ADD CONSTRAINT def_ssex DEFAULT '男' FOR Ssex
主键约束和唯一性约束实现实体完整性,外键约束实现参照完整性,默认值约束和检查约束实现域完整性。
数据表中的数据的操作
- 插入记录
INSERT语句通常有两种形式:一种是插入一条记录;另一种是插入子查询的结果,一次可以插入多条记录。
INSERT语句语法插入一条记录
INSERT [INTO] 表名 [(column_list)]
VALUES ( { DEFAULT |NULL |expression }[,...n] )
插入多条记录
INSERT [INTO] 表名 [(column_list)]
SELECT column_list FROM table_list
WHERE search_condition
2.修改记录
UPDATE 表名
SET column_name=value [,column_name=value]
[FROM table_name]
[WHERE condition ]
如将所有成绩上调20%
USE 学生选课
GO
UPDATE SC SET Grade=Grade*1.2
column_name
:修改的列名value
:指出更新应取的值FROM table_name
:指出使用的表condition
:条件
3.删除记录
DELETE [FROM] 表名
[WHERE condition]
其中,condition指定删除行的条件。
如删除学号001的学生
DELETE Student
WHERE Sno='001'
UPDATE和ALTER的区别:
ALTER 是DDL语句,是修改数据库中对象(表,数据库,视图。。)的语句。(表的结构)
UPDATE是DML语句,是修改表中数据的语句。(表中的值)