第二章 关系数据库标准语言 SQL
一.SQL概述
1.SQL:
(1..数据定义:用于定义数据库的逻辑结构、包括定义表、视图和数据库以及索引
(2..数据操纵:包括插入、修改和删除数据的操作
(3.数据查询
(4.数据控制:包括对数据的安全性控制、完整性规则的描述以及对事务的控制语句
2.SQL的主要特点
综合统一
高度非过程化
面向集合的操作方式
以同一种语法结构提供两种使用方式:
(1.)自含式语言可以使用交互命令,适用于终端用户、应用程序员和DBA
(2.)嵌入式语言使其嵌入在高级语言(JAva,Python等)使用,供应用程序员开发应用程序。
3.SQL的基本概念:
SQL支持的数据库的三级模式结构:外模式、模式、内模式
对应的数据库对象是:视图、基本表、和基本表的索引
模式:也称为概念模式,是数据库中全体数据的逻辑结构和特征的描述,综合了所有用户的数据需求,并将其有机地结合成一个逻辑整体,具有最小冗余
一个数据库只有一个·模式
定义模式时不仅要定义数据的逻辑结构,如数据由哪些数据项构成,数据项的名字、类型
取值范围等,而且要求定义数据之间的联系、与数据相关的安全性、完整性要求;
DBMS提供模式描述语言定义模式
外模式也称为子模式,是数据库用户(或应用程序员)能够看见和使用的局部数据的逻辑结构和特征的描述、
对应数据库用户的数据视图。
外模式通常是模式的子集
一个模式可有多个外模式
外模式是保证数据库安全性的一个有力措施,每个用户只能看见和访问所对应的外模式的数据,数据库中其余数据是不可见的。
DBMS提供外模式描述语言来定义外模式
内模式:
内模式也称为存储模式,它是对数据物理结构和存储方式的描述,是数据在数据库内部的表示方式
一个数据库只有一个内模式
内模式记录了模式数据对应的数据(表)空间和存储模式(两者一般同名)以及访问路径,RDBMS据此向操作系统(OS)发出读取文件记录的命令,OS的文件管理系统将其映射成真正的物理访问。
存储文件的物理文件结构对用户是透明的。
DBMS提供内模式描述语言定义内模式
二.数据定义
1.数据库的创建与管理
Mysql提供了对数据库管理的语句,包括创建数据库、修改数据库、删除数据库等
(1)创建数据库
格式:
例子:
例如:创建一个名为jwgl的数据库,要求该数据库为utf8编码:
create database|schema if not exists jwql
default character set ='utf8'
(2)修改该数据库:
alter database jwql charsctre set utf8
(3)删除数据库
drop database jwql
2.表的创建和管理
数据表是数据库中非常重要的对象,对数据表的操作也使用DDL语句,包括对表的创建、修改、和删除以及添加表的约束等。
(1.)创建表
(2)数值类型数据
由数字字符(0~9)小数点和正负号组成
主要有
注意:关于NULL的说明
NULL值不是一种数据类型,也与0.空字符串和空格不同,不能参与大小或者相等比较,但排序优先于其他数据;
SQL语言中允许不填写元组的某个属性的值,这时属性的值为空值。空值有三种含义:
一种是该属性应该有一个值,但目前不知道它的具体值
第二种是该属性不应该有值
第三种是由于某种原因不便于填写
(2)修改表
(3.)删除基本表
3.表索引的创建和管理
(1)什么是索引
访问数据库数据的两种方法:
表扫描法/使用索引
索引是按着索引表达式(索引关键字)使数据表中数据记录有序的一种技术、类似于书的目录。
谁可以建立索引?--数据库管理员或表的属主(即建立表的人)
谁维护索引?--关系数据库管理系统自动完成·
使用索引--关系数据库管理系统自动选择合适的索引作为存取路径,用户不必也不能显示地选择索引
(2)索引的作用
加快数据的检索速度
创建唯一性索引,保证数据记录的唯一性
实现表与表之间的参照完整性
加速表与表之间的连接
在使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间。
(3)索引的代价
创建索引需要占用磁盘空间并且花费一定时间
索引会减慢数据修改速度
(4)索引的分类
按数据的存储结构分:聚集索引/非聚集索引
按数据的唯一性分:唯一索引/非唯一索引
按键列的个数分:单列索引/多列索引(复合索引、多重索引)
聚集索引:是指索引项的顺序与表中记录的物理顺序一致的索引组织
一个表中只能有一个聚集索引(Mysql中的聚集索引无法控制)
非聚集索引:非聚集索引并不改变数据表的存储顺序,而是建立一个·由指针构成的索引文件,这些指针逻辑上按照索引关键字的值进行排序。索引文件和表文件分别存储。
可为一个数据表建立多个非聚集索引,每个索引决定了该数据表记录的一种逻辑顺序
Mysql中提到:一个表中最多16个索引,最大索引长度256字节
唯一索引:唯一索引表示表中每一个索引值只对应唯一的数据记录,这与表中PRIMARY KEY 的特性类似,但又有区别:
当表中有被设置为UNIQUE的字段时,Mysql会自动建立一个非聚集的唯一性索引。
当表中有PRIMARY KEY的字段时,Mysql会建立一个聚集索引。
此外,唯一索引在一个表中可建多个,且值可为NULL
复合索引(多重索引)
复合索引是将两个字段或多个字段组合建立的索引,而单独的字段允许有重复的值。
如:(班级,性别,学号)注意:多重索引的索引·的顺序不能随意更改
(5)索引的建立
(6)修改索引
(7)索引的删除
小结:改变表中的数据(如增加或者删除数据)使,索引会自动更新。
索引建立后,在查询使用该列时,系统将可能自动使用索引进行查询
索引数目最多可达到16/249个,但索引越多,更新数据的速度越慢
对于仅用于查询的表可在频繁查询的列上多建索引,对于数据更新频繁的表则应该少建索引
4.数据更新
1.插入操作:
2.修改操作