3.1 数据库操作语言SQL
数据库操作语言SQL
也就是结构化查询语言(Structured Query Language,SQL),所有的数据库系统都支持该语言。
此外,SQL语句还可以嵌套在许多程序设计编程语言中。
SQL发展历程
- IBM公司研发
- 后被美国国家标准(ASNI)进行规范
- 最后被ISO进行规范成为国际标准。
特点
(1)一体化:SQL命令集可以完成关系数据库中的所有操作,包括数据定义、、数据库管理等。
(2)使用方式灵活:它既可以直接以交互命令方式操作数据库,也可以嵌入到程序设计语言(如C、Java)中编程操作数据库。
(3)非过程化:SQL对数据库的操作,不像程序设计语言的过程操作,而直接将操作命令提交DBMS执行。使用 时只需要告诉DBMS“做什么”,而不需要告诉它“怎么做”。
(4)语言语法简单:SQL的操作语句不多,其语句命令的语法也较简单。语句命令接近英语,用户使用容易。
可进行的操作类型
(1)数据定义语言(Data Definition Language,DDL):创建、删除
(2)数据操纵语言 (Data Manipulation Language,DML):对数据库中的数据表或视图进行数据插入、数据删除、数据更新等处理。。
(3)数据查询语言 (Data Query Language,DQL):查询数据。
(4)数据控制语言(Data Control Language,DCL):控制用户访问权限。
(5)事务处理语言 Transaction Process Language,TPL):数据库事务的编程处理。。
(6)游标控制语言 (Cursor Control Language,CCL):类型语句用于数据库游标结构的使用。
数据类型
-
varchar(n) 、char(n) 可变长度字符串、不变的
-
numeric(p,d)
- 定点数类型,可以表示小数
- p为总数,d为小数有几个
- 如3.14 (3,2)
-
浮点数real double(n,d)
-
money货币
-
日期date
-
integer
-
numeric
-
serial
-
date
-
boolean
-
time
3.1数据定义语句(DDL)
功能
用于创建与维护数据库对象
包含的数据库对象:如数据库、数据库表、索引、视图、触发器、存储过程等
分类:三类
- CREATE 创建
- ALTER 修改
- DROP 删除
创建 CREATE
创建一个数据库,按照默认参数创建DB1
CREATE DATABASE DB1;
当然也可以指定拥有者
CREATE DATABASE DB1 OWNER Owner1
创建一个表
每一行从左到右: 列名字、数据类型、完整性约束。
CREATE TABLE Student
(
StudentID char(13) PRIMARY KEY,
StudentName varchar(10) NOT NULL,
StudentGender char(2) NULL,
BirthDay date NULL,
Major varchar(30) NULL,
StudentPhone char(11) NULL
);
修改ALTER
——增删改查!
数据库改名
ALTER DATABASE DB1 RENAME TO DB2
以及
ALTER DATABASE <数据库名> CONNECTION LIMIT connlimit;
ALTER DATABASE <数据库名> RENAME TO <新数据库名>;
增加列
ALTER TABLE Student
ADD Email varchar(20);
删除列
ALTER TABLE STUDENT
DROP COLUMN SNAME;
删除Student表中的外键约束,可以使用如下语句
ALTER TABLE STUDENT DROP CONSTRAINT student_emp_fk;
需注意:DROP TABLE 不能直接删除由 FOREIGN KEY 约束引用的表。
只有先删除FOREIGN KEY约束或引用的 表后,才能删除本表。
删除 DROP
删除数据库
DROP DATABASE DB1;
删除表
注意: 如果某表包含了参照完整性约束,直接执行DROP TABLE 语句,将会报错。要先删除这个外键或其依赖的表
DROP TABLE STUDENT;
删除某列
DELETE FROM STUDENT
WHERE SNAME = '小明';
关键词
也就是列的最后一列,用于限定给出的值,也就是约束条件。
- 列约束关键词
- RIMARY KEY
- NOT NULL
- NULL
- UNIQUE
- CHECK
- DEFAULT
- 表约束关键词 CONSTRAINT
- 表约束定义外键 CONSTRAINT
- 表约束定义代理键 CONSTRAINT、Serial
CHECK与ALTER
ALTER TABLE project
ADD CONSTRAINT project_check_dates
CHECK (start_date< end_date);
列约束关键词
例:创建一个课程表
CREATE TABLE Course
(
CourseID char(4) PRIMARY Key
CourseName varchar(20) NOT NULL UNIQUE,
CourseType varchar(10) NULL CHECK(CourseType IN(’基础课’,’专业’,’选修’)),
TestMethod char(10) NOT NULL DEFAULT ’闭卷考试’
);
定义复合键 CONSTRAINT
定义由多个列构成的复合主键,则需要使用表约束关键词CONSTRAINT。
例:创建一个课程安排表
CREATE TABLE Plan
(
CourseID char(4) NOT NULL,
TeacherID char(4) NOT NULL,
CourseRoom varchar(30) NOT NULL,
CONSTRAINT CoursePlan_PK PRIMARY Key(CourseID,TeacherID)
);
该约束定义(CourseID,TeacherID)复合键作为Plan表的主键。
定义外键 CONSTRAINT
两个表的对应相同属性列要一致
本表中的外键列取值参照关联表的主键列值。
【例】创建选课注册表(Register)
需要定义本表外键列,并参照其关联表的主键列
CREATE TABLE Register
(
CourseRegID serial NOT NULL,
CoursePlanID int NOT NULL,
StudentID char(13),
Note varchar(30),
CONSTRAINT CourseRegID_PK PRIMARY Key(CourseRegID),
CONSTRAINT CoursePlanID_FK FOREIGN Key(CoursePlanID)
REFERENCES Plan(CoursePlanID)
ON DELETE CASCADE,
CONSTRAINT StudentID_FK FOREIGN KEY(StudentID)
REFERENCES Student(StudentID)
ON DELETE CASCADE
);
这里的ON DELETE CASCADE 表示如果删除了父记录,那么所有子记录也会被删除。
REFERENCES是参考的意思。
定义代理键 CONSTRAINT、Serial
定义代理键:CONSTRAINT和Serial(自动递增序列数据类型)
同时自动在该表所在 Schema中创建一个序列,该序列为代理键提供值。
如:Plan表创建中使用CoursePlanID设置为代理键,并为主键。
CREATE TABLE Plan
(
CoursePlanID serial NOT NULL,
CourseID char(4) NOT NULL,
TeacherID char(4) NOT NULL,
CourseRoom varchar(30),
CourseTime varchar(30),
Note varchar(50),
CONSTRAINT CoursePlan_PK PRIMARY Key(CoursePlanID)
);
索引
好处:
①可以大大加快数据的检索速度
② 可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。
开销:
①创建索引和维护索引要耗费时间,这种时间会随着数据量的增 大而增加。
②索引需要占物理空间,除了数据库表占数据空间之外,每一个索引还要占一定的物理空间。
③当对表中 数据进行增加、删除和修改时,索引也需要进行动态维护,这样会降低数据的维护速度。
创建索引
【例】在学生信息表(Student)中,为出生日期BirthDay列创建索引
CREATE INDEX BirthDay_Idx ON Student (BirthDay);
需要说明:CREATE INDEX语句所创建的索引,其索引值可能会有重复值。如果在应用中不允许有重复索引值,
则需要使用如下创建唯一索引的SQL语句格式:
CREATE UNIQUE INDEX <索引名> ON <表名>;
索引对象修改SQL语句
【例】索引更名
ALTER INDEX BirthDay_Idx RENAME TO BDay_Idx
索引删除
DROP INDEX BirthDay_Idx;