关系数据库

Posted 木白星枝

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关系数据库相关的知识,希望对你有一定的参考价值。

一.关系数据库基本概念及SQL语言基础
1.关系数据库基本概念
(1)关系:整个二维表
(2)关系名:表格名称
(3)元组:行数据(记录)
(4)属性:列数据(字段)
(5)属性名:列名称(字段名)
(6)主键:唯一确定元组的属性组(关键字)
(7)域:属性的取值范围
(8)码:也称为码键。表中的某个属性组,它可以唯一确定一个元组。
2.SQL语言的分类
(1)DQL(数据查询语言)select
(2)DML(数据操作语言)insert,update,delete
(3)DDL(数据定义语言)create,alter,drop
(4)DCL(数据控制语言)grant,revoke
(5)TCL(事物控制语句)SAVEPOINT,ROLLBACK,SETTRANSACTION,COMMIT
3.
(1)域:域是一组具有相同数据类型的值的集合。
(2)候选码:若关系中的某一属性组的值能唯一地标识一个元组,而其子集不能,则称该属性组为候选码。
(3) 主码:若一个关系有多个候选码,则选定其中一个为主码。
(4)候选码的各个属性称为主属性或码属性。不包含在任何候选码中的属性称为非主属性或非码属性。
(5)全码:关系模式的所有属性是这个关系模式的候选码,称为全码。

二.关系数据库基本概念及SQL语言基础
1.SQL的数据定义语句
操作对象      |        操作方式                       
                    |        创建                       |   删除                   |    修改   
模式            |      Create Schema        |Drop Schema        |      
表               |      Create Table             |Drop Table             |Alter Table 
视图            |       Create View           |Drop View                |      
索引            |       Create Index          |Drop Index                |Alter Index    
2.常用数据类型
字符串 
Char[(n)]  :长度为n字符的定长字符串。            
Varchar[(n)] :最长n字符的变长字符串,Oracle常Varchar2。      
Nchar[(n)]:长度为n字符的定长区域字符串。         
Nvarchar[(n)]:最长 n 字符的变长区域字符串,Oracle 使用Nvarchar2。

整数

 Int[eger]  :4字节整数。                        
 Smallint  :2字节整数。                      
Bigint         :8字节整数。                     
Dec[imal](p, s):共p位十进制数字,其中小数点后s位。  
精确数       
Numeric(p, s) :至少p位十进制数字,其中小数点后至少s位。         
Float(n)        :指定了精度(n位二进制尾数)的浮点数。        

近似数

Real                       :IEEE 754单精度浮点数,相当于Float(24)。         
Double Precision    :IEEE 754双精度浮点数,相当于Float(53)。       

日期     

Date         :日期,含年、月、日,默认格式为yyyy-mm-dd。          
Time          :时间,含时、分、秒,默认格式为hh:mm:ss。     
 
大对象      

Clob          :字符串大对象,MSSQL使用Varchar(Max)。        
Blob          :二进制大对象,MSSQL使用Varbinary(Max)。       

二.定义基本表
1.定义基本表
(1)基本语法
    Create Table 表名 
    (   列名 数据类型 [列级约束, ...], 
        ... 
        [表级约束, ...] 
    ); 
样例1:

Create Table Student 
(    Sno Char(9) Primary Key, -- 列级约束, 主码 
     Sname Varchar(20) Not Null, -- 列级约束, 不能取空值 
     Sex Nchar(1) Default '男', -- 默认值 
     Age Smallint Check(Age Between 0 And 100), 
      -- 列级约束, 0 <= Age <= 100 
     Dept Varchar(20), 
     Check(Sex In('男', '女')) -- 表级约束, Sex只能是'男'或'女' 
); 
 
样例2:

Create Table Course 
(    Cno Smallint Primary Key, 
     Cname Varchar(40) Unique, -- 取值唯一 
     Pno Smallint, -- 先修课 
     Credit Smallint, 
     Foreign Key(Pno) References Course(Cno) 
     -- 表级约束, Pno是外码, 被参照表是Course, 被参照列是Cno 
); 

样例3:

Create Table Learn 
(    Sno Char(9), 
     Cno Smallint, 
     Grade Smallint Check(Grade Between 0 And 100), 
      -- 列级约束, 0 <= Grade <= 100 
     Primary Key(Sno, Cno), 
     -- 主码由两个属性构成, 必须定义为表级约束 
     Foreign Key(Sno) References Student(Sno), 
     -- 表级约束, Sno是外码, 被参照表是Student 
     Foreign Key(Cno) References Course(Cno) 
     -- 表级约束, Cno是外码, 被参照表是Course 
); 


(2)模式与表
 
定义基本表时如果需要指定它所属的模式, 通常使用的方法是在表名中显式给
模式名,即使用“模式名.表名”的形式指定表名。 

Create Table "S-T".Student(...); -- Student所属的模式是S-T 


2.删除基本表

    Drop Table 表名;

3.修改基本表

    基本语法

    Alter Table 表名 

    [Add 列名 数据类型 [列级约束]] | 

    [Add [Constraint 约束名] 表级约束] | 

    [Alter Column 列名 数据类型] | 

    [Drop Column 列名] | 

    [Drop Constraint 约束名]; 

选项说明 

?  Add子句用于增加新列和相应的列级完整性约束条件。 

?  Add Constraint子句用于增加新的表级完整性约束条件,不指定约束名时需省略    Constraint。 

?  Alter Column (Oracle使用Modify) 子句主要用于修改现有列的数据类型。 
 
?  Drop Column子句用于删除指定的列。 

?  Drop Constraint子句用于删除指定的完整性约束条件。 

样例:
(1)向Student表增加“入学时间”列,数据类型为日期。 

Alter Table Student Add Entrance Date; 

如果基本表已有数据,则新增加的列取空值。 

(2)将年龄改为整数类型。 

Alter Table Student Modify Age Int; 

(3)增加学生姓名必须取唯一值的约束条件。 

Alter Table Student Add Constraint Uq_Sname Unique(Sname); 

(4)删除Student表中的“入学时间”列。 

Alter Table Student Drop Column Entrance; 

(5)删除学生姓名必须取唯一值的约束条件。 

Alter Table Student Drop Constraint Uq_Sname; 


4.完整性约束


(1)主键。主键约束的基本语法为 

[Constraint 约束名] Primary Key   -- 列级 

[Constraint 约束名] Primary Key(列名, ...)   -- 表级 

(2)非空。非空约束的基本语法为 

[Constraint 约束名] Not Null   -- 列级 

(3)唯一。表的一列或多列的组合内容必须唯一。唯一约束的基本语法为 

[Constraint 约束名] Unique -- 列级 

[Constraint 约束名] Unique(列名, ...)   --表级 

(4)检查。定义表的一列或多列的一个约束条件,使表的每一列内容必须满足
该条件(空值除外)。检查约束的基本语法为 

[Constraint 约束名] Check(约束条件)   -- 列级 

[Constraint 约束名] Check(约束条件)   -- 表级

(5)外键。外键约束的语法为(其中的表名是要引用的表名)
 
-- 第1种, 若子记录存在, 则拒绝删除主记录 

[Constraint 约束名] Foreign Key(列名, ...) 
References 表名(列名, ...) 

-- 第2种, 若子记录存在, 则删除主记录时, 级联删除子记录 

[Constraint 约束名] Foreign Key(列名, ...) 
References 表名(列名, ...) On Delete Cascade 

-- 第3种, 若子记录存在, 则删除主记录时, 子记录置空 

[Constraint 约束名] Foreign Key(列名, ...) 
References 表名(列名, ...) On Delete Set Null

以上是关于关系数据库的主要内容,如果未能解决你的问题,请参考以下文章

关于价格的小学问:价格锚点/尾数定价

r 科学计数法限制尾数小数点

阶乘尾数0的个数

Poj2099 整除的尾数

组成原理-数据浮点数的编码与运算

C语言 浮点数的阶码和尾数的长度是有限制的,超过的部分该如何处理?会有啥影响?