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;
posted @   Dinesaw  阅读(372)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示