8.1SQL概述与数据库定义

简介: 8.1SQL概述与数据库定义

SQL的基本组成

1、数据定义语言。
2、交互式数据操纵语言。
3、事务控制。
4、嵌入式SQL和动态SQL
5、完整性。
6、权限管理

7、SQL语言中完成核心功能的9个动词:

(1)数据查询:Select

(2)数据定义:Create、Drop(删除)、Alter(修改)

(3)数据操纵:Insert(插入)、Update(更新)、Delete(删除)

(4)数据控制:Grant(授权)、Revoke(撤销授权)

SQL的数据类型

此处了解即可

表的创建、修改和删除

1、创建表

语句格式:CREATE TABLE <表名> (<列名><数据类型>[列级完整性约束条件]
[,<列名><数据类型>[列级完整性约束条件]]…
[,<表级完整性约束条件>]);
(注意分号表示该语句结束)

注:[ ]表示可选,< >表示必填。

如创建表S :create Table S (sno char(6));

1、实体完整性约束:主码唯一且不为空

(1)在列后面加 PRIMARY KEY

如表S的主码为sno create Tables S (sno char(10) primary key)

(2)在最后加PRIMARY KEY(属性名1,属性名2) //主码为属性组(两个或以上属性的组合)只能
用这种方法

2、参照完整性约束:

1)在列后面加 References 表名(属性名)

如表SC的外码sno参照s表中的sno:create table sc(sno references s(sno))

(2)在最后面加 ,有几个外码,就写几行。
Foreign Key(属性名) References 表名(属性名)

注:[ON DELETE[CASCADE|SET NULL]]
ON DELETE CASCADE 表示删除被参照关系的元组时,同时删除参照关系中的元组;
ON DELETE SET NULL表示删除被参照关系的元组时,将参照关系的相应属性值置为空值

3、属性值上的约束

(1)NULL:表示为空;NOT NULL表示不能为空;

(2)UNIQUE:表示取值唯一;

(3)NOT NULL UNIQUE:表示取值唯一且不为空,与属性列后面的PRIMARY KEY可互换;

(4)CHECK:限制列中值的取值范围。
如:CHECK (Sex='男' OR Sex='女'),CHECK (余额>=0),CHECK (年龄>=18 AND 年龄<=60),
CHECK (离职日期 > 入职日期)

例题;

例:建立一个供应商、零件数据库。其中关系供应商S(Sno,Sname,Status,City),关系零件P(Pno,Pname,Color,Weight,City)。该数据库要满足如下要求:

(1)供应商代码不能为空,且值是唯一的,供应商的名称也是唯一的。

(2)零件号不能为空,且值是唯一的;零件名不能为空。

(3)一个供应商可以供应多个零件,而一个零件可以由多个供应商供应。

Create Table S (Sno CHAR(5) NOT NULL UNIQUE,

                      Sname CHAR(30) UNIQUE,

                      Status CHAR(8),

                      City CHAR(20),

                      PRIMARY KEY(Sno)); //教材这里有错误(前面已经又NOT NULL UNIQUE)

Create Table P (Pno CHAR(6),

                      Pname CHAR(30) NOT NULL,

                      Color CHAR(8),

                      Weight NUMERIC(6,2),

                      City CHAR(20),

                      PRIMARY KEY(Pno));

Create Table SP (Sno CHAR(5),

                         Pno CHAR(6),

                         Status CHAR(8),

                         Qty NUMERIC(9),

                         PRIMARY KEY(Sno,Pno), //如果主键为属性组合,只能用这种方法

                         FOREIGN KEY(Sno) REFERENCES S(Sno),

                         FOREIGN KEY(Pno) REFERENCES P(Pno));

09年下午题:

某网上书店后台数据库的部分关系模式如下:

会员(会员编号,用户名,密码,姓名,地址,邮编,电话,消费额,积分)

图书(图书编号,类型名称,图书名称,作者,出版社,出版日期,ISBN,价格)

订单(订单编号,用户名,销售额,订购日期,出货日期)

订单明细(订单明细编号,订单编号,图书编号,数量)

问题1:

下面是创建订单关系的SQL语句,订单编号唯一识别一个订单,用户名为订购图书的会员用户名,且不能为空。要求订购日期不能大于出货日期。请将空缺补充完整。

Create Table 订单 (

                        订单编号 CHAR(6) (a) ,

                       用户名 VARCHAR(40) NOT NULL (b) ,

                       销售额 FLOAT,

                       订购日期 DATE NOT NULL,

                        出货日期 DATE (c) ;

解答: (a)NOT NULL UNIQUE 或 PRIMARY KEY
(b)REFERENCES 会员(用户名)
(c)CHECK (订购日期<=出货日期)

2、修改表

语句格式:ALTER TABLE <表名> [ADD <新列名><数据类型>[列级完整性约束条件]]
[DROP <完整性约束名>]
[Modify <列名><数据类型>]);
如:
ALTER TABLE S ADD Zap CHAR(6); //在表S中新增一列ZAP,该列的数据为空
ALTER TABLE S MODIFY Status INT; //将表S的Status属性的数据类型更改为INT
ALTER TABLE S ADD Constraint C_cno CHECK(......) //在表S中新增CHECK约束,取名为C_cno

3、删除表

语句格式:DROP TABLE <表名>
如:
DROP TABLE S; //表删除后,不再是数据库模式的一部分

索引的创建和删除

1、索引的概念

• 数据库中的索引与书籍中的索引类似,在一本书中,利用索引可以快速查找到所需信息,无须阅
读整本书。在数据库中,索引使数据库无须对整个表进行扫描,就可以在其中找到所需数据。
• 比如在字典中,我们按字母建立索引。在数据库中,索引是某个表中的一列或者若干列的值的集
合,和相应的指向表中物理标识这些值的数据页的逻辑指针清单。

2、索引的作用

(1)通过创建唯一索引,可以保证数据记录的唯一性。
(2)可以大大加快数据检索速度。
(3)可以加速表与表之间的连接,这一点在实现数据的参照完整性方面有特别的意义。
(4)在使用ORDER BY和GROUP BY子句中进行检索数据时,可以显著减少查询中分组和排序的时间。
(5)使用索引可以在检索数据的过程中使用优化隐藏器,提高系统性能。
索引分为聚集索引和非聚集索引。聚集索引是指索引表索引项的顺序与表中记录的物理顺序一致的
索引。

3、建立索引:

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

• 次序:ASC(升序)或DESC(降序),默认为升序。
• UNIQUE:表明此索引的每一个索引值只对应唯一的数据记录。
• CLUSTER:表明要建立的索引是聚簇索引,索引项的顺序是与表中记录的物理顺序一致的索引组织。

如:
CREATE UNIQUE INDEX S_Sno on S(Sno); //在表S的Sno列上建立索引S_Sno,默认为升序
CREATE UNIQUE INDEX P_Pno on P(Pno); //在表P的Pno列上建立索引P_Pno,默认为升序
CREATE UNIQUE INDEX J_Jno on J(Jno); //在表J的Jno列上建立索引J_Jno,默认为升序
CREATE UNIQUE INDEX SPJ_NO on SPJ(Sno ASC,Pno DESC,Jno ASC);
//在表SPJ上建立索引SPJ_NO,属性Sno按升序,Pno按降序,Jno按升序

4、删除索引

语句格式:DROP INDEX <索引名>

例:DROP INDEX StudentIndex; //删除索引StudentIndex

视图的创建和删除

1、创建视图

语句格式:CREATE VIEW 视图名(列表名)
                                    AS SELECT 查询子句
                                   [WITH CHECK OPTION];
• 视图的创建中,必须遵循如下规定:
(1)子查询可以是任意复杂的SELECT语句,但通常不允许含有ORDER BY子句和DISTINCT短语。

(2)WITH CHECK OPTION表示对UPDATE,INSERT,DELETE操作时保证更新、插入或删除的行满足视图定义中的谓词条件(即子查询中的条件表达式)
(3)组成视图的属性列名或者全部省略或者全部指定。如果省略属性列名,则隐含该视图由SELECT子查询目标列的主属性组成。

例:学生关系模式S(Sno,Sname,Sage,Sex,SD,Email,Tel),建立计算机系(CS表示计算机系)学生的视图,并要求进行修改、插入操作时保证该视图只有计算机系的学生。
CREATE VIEW CS_STUDENT //创建视图CS_STUDENT
                                         AS SELECT Sno,Sname,Sage,Sex //选择学号、姓名、年龄、性别列
                                         FROM Student //从学生表中查询
                                         Where SD='CS' //选择系名等于“CS”的行
                                         WITH CHECK OPTION; //以后对该视图进行修改、插入操作时DBMS
                                          会自动加上SD='CS'的条件,保证视图中只有计算机系的学生

3、删除视图

语句格式:DROP VIEW 视图名
如:DROP VIEW CS_STUDENT //删除视图CS_STUDENT

【题】 某大型集团公司的数据库的部分关系模式如下:员工表:EMP(Eno,Ename,Age,Sex,Title),各属性分别表示员工工号、姓名、年龄、性别和职称级别,其中性别取值为“男”“女”;公司表:COMPANY(Cno,Cname,City),各属性分别表示公司编号、名称和所在城市;工作表:WORKS(Eno,Cno,Salary),各属性分别表示职工工号、工作的公司编号和
工资。有关关系模式的属性及相关说明如下:(1)允许一个员工在多家公司工作,使用身份证号作为工号值。(2)工资不能低于1500元。

【问题1 1】请将下面创建工作关系的SQL语句的空缺部分补充完整,要求指定关系的主码、外码,以及工资不能低于1500元的约束。

CREATE TABLE WORKS(
                 Eno CHAR(10) (a) ,
                Cno CHAR(4) (b) ,
                Salary int (c) ,
               PRIMARY KEY (d) ,
);

答:a:reference EMP(Eno)

b:reference COMPANY(Cno)

c:CHECK(salary>=1500)  注意大于等于的符号

d:(Eno,Cno)

【问题2】(1)创建女员工信息的视图FemaleEMP,属性有Eno、Ename、Cno、Cname和Salary,请将下面SQL语句的空缺部分
补充完整。
CREATE (e)

e:Female Emp(Eno,Ename,Cno,Cname,salary) 理解2-(3)的概念


相关文章
|
3天前
|
SQL 安全 数据库
基于SQL Server事务日志的数据库恢复技术及实战代码详解
基于事务日志的数据库恢复技术是SQL Server中一个非常强大的功能,它能够帮助数据库管理员在数据丢失或损坏的情况下,有效地恢复数据。通过定期备份数据库和事务日志,并在需要时按照正确的步骤恢复,可以最大限度地减少数据丢失的风险。需要注意的是,恢复数据是一个需要谨慎操作的过程,建议在执行恢复操作之前,详细了解相关的操作步骤和注意事项,以确保数据的安全和完整。
9 0
|
7天前
|
前端开发 C# 设计模式
“深度剖析WPF开发中的设计模式应用:以MVVM为核心,手把手教你重构代码结构,实现软件工程的最佳实践与高效协作”
【8月更文挑战第31天】设计模式是在软件工程中解决常见问题的成熟方案。在WPF开发中,合理应用如MVC、MVVM及工厂模式等能显著提升代码质量和可维护性。本文通过具体案例,详细解析了这些模式的实际应用,特别是MVVM模式如何通过分离UI逻辑与业务逻辑,实现视图与模型的松耦合,从而优化代码结构并提高开发效率。通过示例代码展示了从模型定义、视图模型管理到视图展示的全过程,帮助读者更好地理解并应用这些模式。
19 0
|
7天前
|
SQL 数据处理 数据库
|
7天前
|
SQL 存储 调度
|
7天前
|
SQL 安全 数据库
|
7天前
|
Java 数据库连接 数据库
告别繁琐 SQL!Hibernate 入门指南带你轻松玩转 ORM,解锁高效数据库操作新姿势
【8月更文挑战第31天】Hibernate 是一款流行的 Java 持久层框架,简化了对象关系映射(ORM)过程,使开发者能以面向对象的方式进行数据持久化操作而无需直接编写 SQL 语句。本文提供 Hibernate 入门指南,介绍核心概念及示例代码,涵盖依赖引入、配置文件设置、实体类定义、工具类构建及基本 CRUD 操作。通过学习,你将掌握使用 Hibernate 简化数据持久化的技巧,为实际项目应用打下基础。
21 0
|
7天前
|
SQL 存储 监控
|
7天前
|
SQL 数据库 Java
HQL vs SQL:谁将统治数据库查询的未来?揭秘Hibernate的神秘力量!
【8月更文挑战第31天】Hibernate查询语言(HQL)是一种面向对象的查询语言,它模仿了SQL的语法,但操作对象为持久化类及其属性,而非数据库表和列。HQL具有类型安全、易于维护等优点,支持面向对象的高级特性,内置大量函数,可灵活处理查询结果。下面通过示例对比HQL与SQL,展示HQL在实际应用中的优势。例如,HQL查询“从员工表中筛选年龄大于30岁的员工”只需简单地表示为 `FROM Employee e WHERE e.age &gt; 30`,而在SQL中则需明确指定表名和列名。此外,HQL在处理关联查询时也更为直观易懂。然而,对于某些复杂的数据库操作,SQL仍有其独特优势。
14 0
|
7天前
|
Java UED 开发者
当错误遇上Struts 2:一场优雅的异常处理盛宴,如何让错误信息成为用户体验的救星?
【8月更文挑战第31天】在Web应用开发中,异常处理对确保用户体验和系统稳定性至关重要。Struts 2 提供了完善的异常处理机制,包括 `exception` 拦截器、`ActionSupport` 类以及 OGNL 表达式,帮助开发者优雅地捕获和展示错误信息。本文详细介绍了 Struts 2 的异常处理策略,涵盖拦截器配置、错误信息展示及自定义全局异常处理器的实现方法,使应用程序更加健壮和用户友好。
|
7天前
|
测试技术 Java
全面保障Struts 2应用质量:掌握单元测试与集成测试的关键策略
【8月更文挑战第31天】Struts 2 的测试策略结合了单元测试与集成测试。单元测试聚焦于单个组件(如 Action 类)的功能验证,常用 Mockito 模拟依赖项;集成测试则关注组件间的交互,利用 Cactus 等框架确保框架拦截器和 Action 映射等按预期工作。通过确保高测试覆盖率并定期更新测试用例,可以提升应用的整体稳定性和质量。
16 0
下一篇
DDNS