一、SQL的基本概念
-
SQL是Structured Query Language的简写,意思是结构化查询语言,是一种在数据库管理系统中查询或对数据库的数据进行更改的语言
-
SQL语言的分类:
-
数据定义语言DDL(Data Definition Language):定义逻辑结构,包括定义表,索引和视图,删除表、修改表、定义表。
-
数据查询语言DQL(Data Query Language):对数据库中各种数据对象进行查询。
-
数据操纵语言DML(Data Manipulation Language):用于改变数据库中的数据,包括插入、删除、修改。
-
数据控制功能DCL(Data Control Language):对表和视图的授权,完整性规则的描述以及事务开始和结束等控制语句。
-
-
特点:
-
综合统一(独立完成数期库生命周期中的全部活动,包括定义关系模式、录入数据、建立数规库、直询、更新、维护、数据库重构、数规库安全等)
-
高度非过程化(用户只需提出“做什么”,而不必指明“怎么做”)
-
面向集合的操作方式(SQL采用集合操作方式)
-
以同一种语法结构提供两种使用方式(SQL既是自含式语言,又是嵌入式语言,S0L语句能够藏入到高级语言程序中)
-
语言简洁,易学易用(SQL语言语法简单,接近英语口语,因此容易学习,也容易使用。)
-
二、SQL的基本语法
- 数据类型
数据类型 | 含义 |
---|---|
CHAR(n),CHARACTER(n) | 长度为n的定长字符串 |
VARCHAR(n),CHARACTERVARYING(n) | 最大长度为n的变长字符串 |
CLOB | 字符串大对象 |
BLOB | 二进制大对象 |
INT,INTRAGE | 长整数(4字节) |
SMALLINT | 短整数(2字节) |
BIGINT | 大整数(8字节) |
NUMBERIC(p,d) | 定点数,由p位数字(不包括符号、小数点)组成,小数点后面有d位数字 |
DECIMAL(p,d),DEC(p,d) | 同上 |
REAL | 取决于机器精度的单精度浮点数 |
DOUBLE PRECISION | 取决于机器精度的双精度浮点数 |
FLOAT(n) | 可选精度的浮点数,精度至少为n位数字 |
BOOLEAN | 逻辑布尔值 |
DATE | 日期,包含年、月、日,格式为YYYY-MM-DD |
TIME | 时间,包含一日的时、分、秒,格式为HH:MM:SS |
TIMESTAMP | 时间戳类型 |
INTERVAL | 时间间隔类型 |
-
模式定义与删除
-
语法:
CREATE SCHEMA <模式名> AUTHORIZATION <用户名>;
-
例子:为用户wang定义一个学生-课程模式S-T
CREATE SCHEMA "S-T" AUTHORIZATION wang;
-
模式定义+视图
CREATE SCHEMA <模式名> AUTHORIZATION <用户名> [<表定义子句>|<视图定义子句>|<授权定义子句>];
-
例子:
CREATE SCHEMA "Learn" AUTHORIZATION xiubai create table user(id int primary key, age int, name varchar(255));
-
删除:
DROP SCHEMA <模式名> <CASCADE|RESTRICT>
-
删除模式中,其中CASCADE和RESTRICT必须二选一,CASCADE(级联)删除模式的同时也把该模式所有的数据库对象删除;RESTRICT(限制),如该模式下有下属对象,比如表视图就拒绝这个删除语句的执行。
-
-
表的定义、删除、修改
- 定义
create table 表名( 字段名 类型 字段约束, 字段名 类型 字段约束, 字段名 类型 字段约束 ); 例子: create table user( name varchar(20), age int, sex char(1) );
- 删除
DROP TABLE <表名> [CASCADE|RESTRICT]; DROP TABLE Student CASCADE;
-
CASCADE,如果表有外键、视图、触发器的话,也会强行删除;RESTRICT恰恰相反。
-
修改
ALTER TABLE <表名> [ADD [COLUMN] <新列名><数据类型>[完整性约束]] [ADD <表级完整性约束>]
- 例子:
向Student表增加“入学时间”列,其数据类型为日期型
ALTER TABLE Student ADD S_entrance DATE;
- 例子:
将年龄的数据类型由字符串改为整数
ALTER TABLE Student ALTER COLUMN Sage INT;
-
索引的建立、删除与修改
-
数据量比较大的时候,查询耗时间长,建立索引可以有效减少消耗时间,可以建立在一列或多列上。
-
建立
CREATE [UNIQUE][CLUSTER] INDEX <索引名> ON <表名>(<列名> [<次序>][,<列名>[<次序>]]···);
- CLUSTER:聚簇索引,物理顺序与索引的逻辑顺序相同
- UNIQUE:唯一索引
CREATE UNIQUE INDEX Student ON Student(Sno);
- 删除
DROP INDEX <索引名>;
- 例子:删除Student表中Stusname索引
DROP INDEX Stusname;
- 修改
ALTER INDEX <旧索引名> RENAME TO <新索引名>;
- 例子:将SC表中SCno索引名改为SCSno
ALTER INDEX SCno RENAME TO SCSno;
-