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. 域完整性
    是指数据库表中的列必须满足某种特定的数据类型或约束。其中,约束又包括强制域完整性、限制类型、限制格式或限制可能值的范围。
  3. 参照完整性
    用于描述实体之间的联系。
    参照完整性一般是指多个实体(表)之间的关联关系。
    一般用外码实现。对于外码,一般应符合如下要求:1或者值为空;2或者等于其所引用的关系中的某个元组的主码值.
    外码:取作本表(子表)属性之一的外表(父表,主表)主码。
    主码值先在主表中生成,后在子表中引用
  4. 用户自定义的完整性
    也称为域完整性或语义完整性。
    按应用语义,属性数据有:1.类型与长度限制:方便计算机操作;2.取值范围限制:防止属性值与应用语义矛盾

约束

约束(Constraint)是Microsoft SQL Server 提供的自动保持数据库完整性的一种方法。约束就是限制,定义约束就是定义可输入表或表的单个列中的数据的限制条件

约束类型

完整性类型

描述

约束对象

默认值约束

域完整性

当使用INSERT插入语句时,若已定义默认值时列没有提供指定值,则将该默认值插入记录中


检查约束

域完整性

指定某一列可接受的值


主键约束

实体完整性

每行记录的唯一标识,确保用户不能输入重复值,并自动创建索引,提高性能。该列不允许使用空值


唯一约束

实体完整性

在列集内强制执行值的唯一性,防止出现重复值,表中不允许有两行的同一列包含相同的非空值。


外键约束

参照完整性

定义一列或几列,其值与本表或其他表的主键或UNIQUE列相匹配

表与表之间

  1. 主键约束
    用于指定表的一列或几列的组合唯一标识表,即能在表中唯一地指定一行记录,这样的一列或列的组合称为表的关键。定义主键约束的列,其值不可为空、不可重复;每个表中只能有一个主键。主键约束也称为实体完整性约束。
CREATE TABLE<表名>
(<列名><列属性><约束名>
PRIMARY KEY 
)
  1. 外键约束
    两表中有共同列,则将两表中共同列一各定义为主关键字,另一个定义为外关键字将两个表关联起来。结果为当向含有外关键字的表中插入数据时,如果该列插入的列值在里一个表中的主关键字列不存在,则系统会拒绝插入数据。
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:主键列名

外键并不一定要与相应的主键同名

  1. 唯一约束
    用于指定非主键的一个列或多个列的组合值具有唯一性,以防止在列中输入重复的值
    惟一约束与主键约束的区别 。
    惟一性约束指定的列可以有NULL 属性。但主键约束所在的列则不允许;
    一个表中可以包含多个惟一约束,而主键约束则只能有一个;
添加唯一约束
ADD CONSTRAINT 约束名 UNIQUE(列名)
  1. 检查约束
    实际上是验证字段输入内容的规则,表示一个字段的输入内容必须满足CHECK约束的条件,若不满足,则数据无法正常输入。可以对每个列设置CHECK约束。检查约束也称为用户自定义完整性。
    在创建的表中添加检查约束
ALTER TABLE 表名
ADD CONSTRAINT 约束名 CHECK(logical_expression)
--logical_expression可以表示为条件
--如年龄大于18:
Sage>=18
  1. 默认约束
    默认值约束(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

主键约束和唯一性约束实现实体完整性,外键约束实现参照完整性,默认值约束和检查约束实现域完整性。

数据表中的数据的操作

  1. 插入记录
    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语句,是修改表中数据的语句。(表中的值)