📖 前言:结构化查询语言(Structured Query Language,简称SQL)是关系数据库的标准语言,由于它具有功能丰富、使用方便灵活、语言简洁易学等突出的优点,因而深受计算机界和计算机用户的欢迎。1986年10月,美国国家标准局(ANSI)的数据库委员会批准将SQL作为数据库语言的美国标准,同年公布了标准SQL。此后不久,国际标准化组织(ISO)也做出了同样的决定。


①、综合统一
②、高度非过程化
③、面向集合的操作方式
④、以同一种语法结构提供多种使用方式
⑤、语言简洁,易学易用 ☆
SQL功能极强,完成核心功能只用了9个动词。
| SQL功能 | 动词 |
|---|---|
| 数据查询(DQL) | SELECT |
| 数据定义(DDL) | CREATE(增)、DROP(删)、ALTER(改) |
| 数据操纵(DML) | INSERT、UPDATE、DELETE |
| 数据控制(DCL) | GRANT(授权)、REVOKE(撤回权限) |
SQL支持关系数据库三级模式结构

基本表
存储文件
视图
SQL用户
SQL的数据定义功能:模式定义、表定义、视图和索引的定义
| 操作对象 | 创建 | 删除 | 修改 |
|---|---|---|---|
| 模式 | CREATE SCHEMA | DROP SCHEMA | |
| 表 | CREATE TABLE | DROP TABLE | ALTER TABLE |
| 视图 | CREATE VIEW | DROP VIEW | |
| 索引 | CREATE INDEX | DROP INDEX |
三要素:关系名(表名)、属性名(列名)、完整性约束
CREATE TABLE <表名>(
<列名> <数据类型>[ <列级完整性约束条件> ]
[,<列名> <数据类型>[ <列级完整性约束条件>] ]
………
[,<表级完整性约束条件> ]
);
如果完整性约束条件涉及到该表的多个属性列,则必须定义在表级上,否则既可以定义在列级也可以定义在表级。
❗ 转载请注明出处
作者:HinsCoder
博客链接:🔎 作者博客主页
PRIMARY KEY (唯一性)FOREIGN KEY ... REFERENCES ...UNIQUE (与主码约束的区别在于可以取空)NOT NULLCHECK域的概念用数据类型来实现属性时 需要指明其数据类型及长度常见的数据类型
| 类型 | 数据类型举例及缩写 | 说明 |
|---|---|---|
| 整数数据 | bigint、int、smallint、tinyint、bit | 前4个分别以8、4、2、1个字节表示,其中bit同C语言的bool,输入0以外的值均认为是1 |
| 精确数值数据 | decimal、numeric | 必须指定范围和精度:DECIMAL(p [,d])例:DECIMAL(10,2)(总体10位,小数点后2位)(其中,2可省略,这样就变成10位整数了) NUMERIC和DECIMAL相同注意:我们学过C语言的float其实是不精确的 |
| 浮点数值数据 | float、real | 分别是8个字节最大53位、4个字节最大24位 |
| 字符串数据 | char、varchar | 固定长度字符串,如CHAR(n),不足会用空格补上;可变字符串,尾部的空格会去掉 |
| 日期时间数据 | date、time、datetime | date:日期类型 DATE’yyyy-mm-dd’ 例: DATE ’ 2022-10-23 ’ time:时间类型 TIME ‘hh:mm:ss’ 例:TIME ’ 16 : 55 : 02 . 5 ’ datetime:日期时间类型 |
例1:建立一个学生“STUDENT”表。
CREATE TABLE Student
( Sno char(8) PRIMARY KEY, /*列级完整性约束*/
Sname varchar(10) NOT NULL,
Ssex char(2) NOT NULL DEFAULT('女'),
Sage smallint,
Smajor varchar(20) ,
Shometown varchar(24)
);
例2: 建立一个课程“Course”表。
CREATE TABLE Course
( Cno char(4) PRIMARY KEY,
Cname varchar(20) NOT NULL,
Cpno char(4), -- 先修课
Ccredit real,
FOREIGN KEY (Cpno) REFERENCES Course(Cno) -- 表级完整性约束条件, Cpno是外码,被参照表是Course
);
例3: 建立一个选修“SC”表,其中(Sno,Cno)为主码
CREATE TABLE SC
(Sno char(8) ,
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*/
);
CREATE TABLE SC
(Sno char(8) REFERENCES Student (Sno), /* 列级完整性约束条件*/
Cno char(4) REFERENCES Course(Cno), /* 列级完整性约束条件*/
Grade smallint,
PRIMARY KEY (Sno, Cno), /* 主码由两个属性构成,必须作为表级完整性进行定义*/
);
例子分析结果:
(1)主关键字的定义:有两种方法
① 列级的完整性约束,在属性及其类型后加上保留字PRIMARY KEY ;
② 表级的完整性约束,在列出关系模式的所有属性后,再附加一个声明:PRIMARY KEY (<属性1>[,<属性2>,…] 。
注意:当主关键字由一个属性列组成时,可采用上述两种方法定义,但是如果关键字由多个属性构成时,则必须采用第二种方法。
(2)外部关键字的定义
其格式为:REFERENCES <表名> <属性>
既可以定义在列级,也可以定义在表级。外键一定要有被参照表!
(3)关于缺省值
在定义属性时增加保留字DEFAULT和一个合适的值,例如: 年龄 SMALLINT DEFAULT 18
ALTER TABLE <表名>
[ ADD [COLUMN] <新列名>< 数据类型> [完整性约束]]
[ DROP [COLUMN] <列名>[RESTRICT | CASCADE]]
[ MODIFY [COLUMN] <列名><新数据类型>];
注意:在SQL Server中不支持MODIFY,用的是ALTER。
其中:
RESTRICT:删除该列是有限制的。CASCADE:删除该列没有限制。例4:在Student表中增加“总学分TotalCredit”属性,类型为INT型。
ALTER TABLE Student ADD TotalCredit INT;
需要说明的是,新增加的列不能定义为“NOT NULL”。基本表在增加一列后,原有元组在新增加的列上的值都被定义为空值(NULL)。
例5:在Student表中删除“籍贯Shometown”属性。
ALTER TABLE Student DROP Shometown;

注意:这条语句在MySQL里正常,但在SQL Server 会报错,需要在DROP后加上COLUMN。原因是系统无法区分要删除的是列还是完整性约束。
ALTER TABLE Student DROP COLUMN Shometown;
例6:在Student表中将主键(Sno)删去。
ALTER TABLE Student DROP Sno;
例7:在Student表中将“籍贯Shometown”属性的字符长度改为30。
ALTER TABLE Student Alter COLUMN Shometown CHAR(30);
修改原有的列定义时需要慎重,很可能会破坏不满足条件的数据,比如修改Student中属性籍贯Shometown的字符串长度由24变为18,表中超过18长度的字符串都会被截取,丢失信息。
DROP TABLE <表名>[RESTRICT|CASCADE];
这里引入一个概念:数据字典
- 数据字典是关系数据库管理系统内部的一组系统表,它记录了数据库中所有的定义信息,包括关系模式定义、视图定义、索引定义、完整性约束定义、各类用户对数据库的操作权限、统计信息等。
- 关系数据库管理系统在执行SQL的数据定义语句时,实际上就是在更新数据字典表中的相应信息。
- 在进行查询优化和查询处理时,数据字典中的信息是其重要依据。
例8:假设已经存在一个表,表名为“临时表”,现将其删除,并将与该表有关的其他数据库对象一起删除。
DROP TABLE 临时表 CASCADE;
例9:删除SC表
DROP TABLE SC
前面曾经提到过,不同的数据库产品对于SQL语言的支持会有所不同,SQL99有RESTRICT和CASCADE选项,含义与前面相同。目前居于主流的Oracle 9i数据库只有CASCADE选项,而SQL Server数据库这两个选项都没有。
建立索引的目的:加快查询速度
谁可以建立索引?
谁维护索引?
使用索引
RDBMS中索引一般采用B+树、HASH索引来实现
采用B+树,还是HASH索引 则由具体的RDBMS来决定
索引是关系数据库的内部实现技术,属于内模式的范畴
很多DBMS使用主键的概念建立主索引,一个表只能有一个主索引
CREATE INDEX语句定义索引时,可以定义索引是唯一索引、非唯一索引或聚簇索引,不同的DBMS略有区别
CREATE [UNIQUE] [CLUSTERED] INDEX <索引名>
ON <表名>(<列名>[<次序>][,<列名>[<次序>] ]…);
例10:为Student、Course和SC表建立索引。
CREATE INDEX STU_IDX_SNO ON Student (Sno);
CREATE INDEX COU_IDX_CNO ON Course (Cno);
CREATE INDEX SC_IDX_SNO_CNO ON SC (Sno, Cno);
DROP INDEX <索引名> ON <表名>;
DROP INDEX <表名>.<索引名>;
例11:删除SC表中在学号Sno和课程号Cno上建立的索引
SC_IDX_SNO_CNO。
DROP INDEX SC.SC_IDX_SNO_CNO
(1)记录少的表不适宜建立。
(2)索引列中有较多的不同的数据和空值时,会大大提高索引的性能。
(3)当查询要返回的数据很少时,索引可以优化你的查询(比较好的情况是少于全部数据的25%),否则,会加大系统开销。
(4)索引可以提高数据的返回速度,但会使更新操作变慢,因此不要对经常需要更新或修改的字段创建索引。
(5)在设计数据库的可用空间时要考虑索引所占用的空间。
(6)不要将索引与表存储在同一个驱动器上。
前置工作:创建数据库




导出数据到EXCEL:





【单选题】建立数据库三级模式的功能由SQL语言的________完成。
A、数据定义功能
B、数据操纵功能
C、数据查询
D、数据控制
【单选题】以下关于聚集索引和非聚集索引说法正确的是( )。
A、每个表只能建立一个非聚簇索引
B、每个表只能建立一个聚簇索引
C、一个表上不能同时建立聚集簇和非聚簇索引
D、以上都不对
【填空题】数据库语言包括____和数据操纵语言两大部分,前者负责描述和定义数据库的各种特性,后者说明对数据库进行的各种操作。
【填空题】
假设有两个关系:
Departments(Deptno, Dname, TotalNumber, Phone, Loc)
Employees(Eno, Ename, Eage, Sex, Salary, Deptno)
其中Employees表的Deptno值参照Departments表的Deptno,则Deptno为Employees表的外键,在SQL语句中用( )关键词定义该约束,用( )关键词表示该引用关系。
【判断题】可以在值为“null”的列上建立主键约束。( )
答案:1.A 2.B 3.数据定义语言 4.foreign key references 5.×
OK,以上就是本期知识点“SQL概述及数据定义”的知识啦~~ ,感谢友友们的阅读。后续还会继续更新,欢迎持续关注哟📌~
💫如果有错误❌,欢迎批评指正呀👀~让我们一起相互进步🚀
🎉如果觉得收获满满,可以点点赞👍支持一下哟~
❗ 转载请注明出处
作者:HinsCoder
博客链接:🔎 作者博客主页