(三)数据库笔记:SQL

本笔记是我在学习《数据库系统概论(第5版)》所记,提取课本重点,加上我自己的理解



1.SQL概述(P75)

1.1发展

标准大致页数发布日期
SQL/861986年10月
SQL 89 (FIPS 127-1)120页1989年
SQL/92622页1992年
SQL 99 (SQL 3)1700页1999年
SQL 20033600页2003年
SQL 20083777页2006年
SQL 20112010年

目前,没有一个数据库系统能支持SQL标准的所有概念和特性

1.2基本概念和特点

SQL是一个综合的、功能极强同时又简洁易学的语言。

SQL同样支持三级模式结构,其中,外模式包括若干视图和部分基本表,模式包括若干基本表,内模式包含若干存储文件

SQL相关动词:

SQL功能动词
数据查询SELECT(选择)
数据定义(对于表)CREATE(创建),DROP(删除), ALTER(修改)
数据操纵(对于表中数据)INSERT(插入), UPDATE(更新), DELETE(删除)
数据控制GRANT, REVOKE

特点包括:

  1. 综合统一

    SQL集数据定义语言、数据操纵语言、数据控制语言的功能于一体
    非关系模型(层次模型、网状模型)的数据语言一般都分为:

    1. 模式数据定义语言( Schema Data Definition Language,模式DDL)
    2. 外模式数据定义语言( Subschema Data Definition Language,外模式DDL或子模式DDL)。
    3. 数据存储有关的描述语言( Data Storage Description Language,DsDL)。
    4. 数据操纵语言( Data Manipulation Language,DML)
  2. 高度非过程化

    使用SQL语言时,只需要提出“做什么”,不需要了解内部操作即可得到结果,自动完成

  3. 面向集合的操作方式

  4. 以同一种语法结构提供多种使用方式

  5. 语言简洁,易学易用


2.数据的定义(P80)

共四个部分如下:

重点是表的相关操作

2.1模式

2.1.1创建

创建语句:

CREATE SCHEMA <模式名> AUTHORIZATION <用户名>

如果没有指定<模式名>,那么<模式名>隐含为<用户名>

定义一个模式,相当于C++中的命名空间,即可以在后面进一步创建基本表等

语句:
CREATE SCHEMA <模式名> AUTHORIZATION <用户名> [<表定义子句>|<视图定义子句>|<授权定义子句>];
例:

为用户 ZHANG创建一个模式"TEST",并且在其中定义一个表"TAB1"。
CREATE SCHEMA TEST AUTHORIZATION ZHANG
CREATE TABLE TAB1(COLI SMALLINT,
COL2 INT,
COL3 CHAR(20),
COL4 NUMERIC(10, 3),
COL5 DECIMAL(5, 2)

​ );

2.1.2删除

删除语句:

DROP SCHEMA <模式名> <CASCADE| RESTRICT> ;

两个删除模式:

CASCADE:级联,表示删除模式时,将旗下的数据库对象(表等)一同删除

RESTRICT:限制,表示删除时,若旗下有数据库对象(表等),则拒绝删除


2.2基本表(P82)

2.2.1创建

创建语句:

CREATE TABLE <表名> (<列名><数据类型>[列级完整性约束条件]
[,<列名><数据类型>[列级完整性约束条件]]

····
[ ,<表级完整性约束条件>]);

  • 逗号是用来区分不同的列,最后一个后面不用逗号
  • 结束后加分号;

列级完整性约束条件(5个):

名称关键字说明
主键PRIMARY KEY直接跟在后面即可
唯一UNIQUE直接跟在后面即可,表示取唯一值
检查CHECK
默认DEFAULT跟在后面,后面在加上默认的值
非空/空值NOT NULL / NULL表名不能取空值/只能取空值

例如:

建立一个“学生”表 Student:
CREATE TABLE Student
(Sno CHAR(9) PRIMARY KEY,
Sname CHAR(20) UNIQUE,
Ssex CHAR(2) NOT NULL,
Sage SMALLINT DEFAULT 18,
Sdept CHAR(20)
);

表级完整性约束条件(4个):

名称关键字说明
主键PRIMARY KEY直接跟在后面即可
唯一UNIQUE直接跟在后面即可,表示取唯一值
检查CHECK
外键FOREIGN KEY见下例

建立学生选课表SC
CREATE TABLE SC
(Sno CHAR(9),
Cno CHAR(4).
Grade Smallint
PRIMARY KEY(Sno,Cno), //主码由两个属性构成,必须作为表级完整性进行定义
FOREIGN KEY (Sno) REFERENCES Student(Sno),
//伸表级完整性约束条件,Sno是外码,被参照表是 Student
FOREIGN KEY(Cno) REFERENCES Course(Cno)
//表级完整性约束条件,Cno是外码,被参照表是 Course
);

数据类型:

数据类型含义
CHAR(n), CHARACTER(n)长度为n的定长字符串
VARChAR(n),
CHARACTERVARYING(n)
最大长度为n的变长字符串
CLOB字符串大对象
BLOB二进制大对象
INT, INTEGER长整数(4字节)
SMALLINT短整数(2字节)
BIGINT大整数(8字节)
NUMERIC(p,d)定点数,由p位数字(不包括符号、小数点)组成,小数点后面有d位数字
DECIMAL(p,d), DEC(p,d)同NUMERIC
DOUBLE PRECISION取决于机器精度的双精度浮点数
REAL取决于机器精度的单精度浮点数
FLOAT(n)可选精度的浮点数,精度至少为n位数字
BOOLEAN逻辑布尔量
DATE日期,包含年、月、日,格式为 YYYY-MM-DD
TIME时间,包含一日的时、分、秒,格式为 HH: MM: SS
TIMESTAMP时间戳类型
INTERVAL时间间隔类型

2.2.2修改

修改语句:

ALTER TABLE<表名>
ADD [ COLUMN]<新列名><数据类型>[完整性约束]]
ADD <表级完整性约束>]
DROP [ COLUMN] <列名> [ CASCADE|RESTRICT]]
[ DROP CONSTRAINT<完整性约束名>[ RESTRICT| CASCADE]]
[ ALTER COLUMN<列名><数据类型>];

  • ADD添加新列、新的列级完整性约束条件、新的表级完整性约束条件
  • DROP COLUMN:删除表中的列,也有两种删除模式同上
  • DROP CONSTRAINT:删除指定完整性约束性条件,也有两种删除模式同上
  • ALTER COLUMN:修改原有列定义,包括列名、数据类型

2.2.3删除

删除语句:

DROP TABLE<表名> [ CASCADE|RESTRICT]];

同样有两种删除模式,CASCADE:级联,RESTRICT:限制


2.3视图(略)

2.4索引的创建、删除、修改(P87)

当表的数据量比较大时,查询操作会变得比较耗时,建立索引能够加快查询速度

数据库索引包括很多种:顺序文件上的索引、B+树索引、散列(hash)索引、位图索引等。

  • 顺序文件上的索引是针对按指定属性值升序或降序存储的关系,在该属性上建立一个顺序索引文件,索引文件由属性值和相应的元组指针组成。

  • B+树索引是将索引属性组织成B+树形式,B+树的叶结点为属性值和相应的元组指针。B+树索引具有动态平衡的优点。

  • 散列索引是建立若干个桶,将索引属性按照其散列函数值映射到相应桶中,桶中存放索引属性值和相应的元组指针。散列索引具有查找速度快的特点。

  • 位图索引是用位向量记录索引属性中可能出现的值,每个位向量对应一个可能值。

索引虽然能够加速数据库查询,但需要占用一定的存储空间,所以要适当建立索引。
不同的关系数据库管理系统支持的索引类型不尽相同

2.4.1创建

创建语句:
CREATE [UNIQUE] [CLUSTER] INDEX<索引名>
ON <表名> (<列名> [<次序>] [ ,<列名> [<次序>] ]…) ;

  • <表名>是要建索引的基本表的名字。索引可以建立在该表的一列或多列上,各列名之间用逗号分隔
  • 用<次序>指定索引值的排列次序,可选ASC(升序)DESC(降序)默认值为ASC
  • UNIQUE:表明此索引的每一个索引值只对应唯一的数据记录
  • CLUSTER:表示要建立的索引是聚簇索引。

例如:

CREATE UNIQUE INDEX Stusno ON Student(Sno);

给表Student建立索引Stusno,且按列Sno的升序排列

2.4.2修改

修改语句:

ALTER INDEX <旧索引名> RENAME TO <新索引名>;

进行改名操作

2.4.3删除

删除语句:

DROP INDEX <索引名>;


3.数据查询(见笔记(四))


4.数据的更新

4.1插入数据

插入格式为:
INSERT
INTO <表名> [(<属性列1>[,<属性列2>]…)]
VALUES (<常量1> [,<常量2>]…);

values 语句是对表中属性列进行赋值,不能赋值需要跳过的,使用NULL

<表名>后面可以给出属性列,也可以不给出,则指全部的值

比如:

插入一条选课记录(201215128,1):
INSERT
INTO SC(Sno, Cno)
VALUES (‘201215128’,‘1’);

插入子查询结果

语句格式为:
INSERT
INTO<表名>[(<属性列1>[,<属性列2>…])
子查询;

同前面,子查询得出的属性个数必须与属性列个数相同,否则报错

附:表的复制

  1. SELECT

    SELECT * INTO FROM [WHERE <条件>]

    • 目标表不存在时,创建一个
    • 这样复制是包括模式等完全复制过去
  2. INSERT

    INSERT INTO SELECT * FROM

    • 只是复制数据
    • 只能对已存在表(existed-table)操作,否则报错

4.2修改数据

修改操作又称为更新操作,其语句格式为
UPDATE <表名>
SET <列名>=<表达式> [,<列名>=<表达式>]…
[WHERE <条件>];

  • 注意SET语句中可以使用表达式
  • WHERE省略后表示要修改表中全部元组
  • WHERE语句可以使用子查询

4.3删除数据

删除格式为
DELETE
FROM <表名>
[WHERE<条件>]

  • DELETE只删除数据,不同于DROP
  • WHERE省略后表示要删除表中全部元组
  • WHERE语句可以使用子查询

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

空名_Noname

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

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

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

打赏作者

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

抵扣说明:

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

余额充值