只言片语

:D 获取中...


数据库之SQL语言(上)

(1)SQL的基本概念

SQL是Structured Query Language的缩写,意思是结构化查询语言,是一种在数据库管理系统中查询或对数据库库里面的数据进行更改的语言。

常见的数据库管理系统:关系型:MySql,OracleDatabase和SQL Server,非关系型:redis和mongoDB。不同数据库管理系统的SQL语言略有不同。

SQL语言包括:

1.数据定义语言DDL(Data Ddefinition Language)

SQL数据定义语言主要用来定义逻辑结构,包括定义基本表,试图和索引。

删除表,定义表和修改表。

2.数据库查询语言DQL(Data Query Language)

SQL的数据库查询语言主要用来对数据库中的各种数据对象进行查询。

3.数据操纵语言DML(Data Manipulation Language)

SQL的数据库操纵语言勇于改变数据库中的数据,包括插入,删除和修改。

4.数据控制功能DCL(Data Control Language)

SQL的数据操纵语言是对表和视图的授权(比如不同的用户被授予不同的数据库权限),完整性规则的描述以及事务开始和结束等控制语句。

SQL语言的特点:

1.综合统一(独立完成数据库生命周期中的全部活动,包括定义关系模式、录入数据,建立数据库、查询、更新、维护、数据库重构、数据库安全等)

2.高度非过程化(用户只需指明“做什么”,而不必指明“怎么做”)

3.面向集合的操作方式(SQL采用集合操作模式)

4.以同一种语法结构提供两种使用方式(SQL既是自含式语言,又是嵌入式语言,SQL语言能够嵌入到高级语言程序中。)

5.语言简洁,易学易用(SQL语言语法简单,接近英语口语,因此易学习也易使用)

(3)SQL的基本语法
0.SQL语言的基本数据类型(变量类型)
数据类型
含义
CHAR(n),CHARACTER(n) 长度为n的变长字符串
VARCHAR(n),CHARACTERVARYING(n) 最大长度为n的变长字符串
CLOB 字符串大对象
BLOB 二进制大对象
INT,INTEGER 长整数(4字节)
SMALLINT 短整数(2字节)
BIGINT 大整数(8字节)
NUMERIC(p,d) 定点数,由p位数字(不包括符号、小数点)组成,小数点后面有d位数字
DECIMAL(p,d),DEC(p,d) 同NUMERIC
REAL 取决于机器精度的单精度浮点数
DOUBLE PRECISION 取决于机器精度的双精度浮点数
FLOAT(n) 可选精度的浮点数,精度至少为n位
BOOLEAN 逻辑布尔量
DATE 日期,包含年月日,格式为YYYY-MM-DD
TIME 时间,包含一日的时分秒,格式为HH:MM:SS
TIMESTAMP 时间戳类型(毫秒)
INTERAVL 时间间隔类型
1.模式的定义&删除

模式定义:

1
2
3
4
CREATE SCHEMA <模式名> AUTHORIZATION <用户名>;

-- 如:为用户WANG定义一个学生-课程模式S-T
CREATE SCHEMA "S-T" AUTHORIZATION WANG;

模式定义+视图

1
2
3
4
CREATE SCHEMA <模式名> AUTHORIZATION <用户名> [<表定义子句>|<视图定义子句>|<授权定义子句>];

-- 如:创建模式 + 表定义子句
CREATE SCHEMA "learn" AUTHORIZATION zhangxu CREATE TABLE user(id INT PRIMARY KEY,age INT,name VARCHAR(255));

模式删除

1
2
3
4
5
6
DROP SCHEMA <模式名> <CASCADE|RESTRICT>
/*
删除模式,其中参数CASCADE和RESTRICT必须二选一
1.CASCADE是级联,删除模式的时候同时也把该模式的所有数据库对象删除
2.RESTRICT是限制,如果该模式下有下属对象,比如表视图,就拒绝这个删除语句的执行。
*/

SQL语言关键字并不区分大小写,比如:
创建表Student:
create table Student;
CREATE TABLE Student;
效果完全相同,但表名Student必须严格区分大小写,字段名和属性值同理。

2.表的定义,删除和修改

创建

1
2
3
4
5
6
7
8
9
CREATE TABLE 表名(字段名 类型 字段约束,字段名 类型);

-- 如
CREATE TABLE user(
id VARCHAR(20) PRIMARY KEY,
name VARCHAR(20),
age INT,
sec CHAR{1}
);

删除

1
2
3
4
5
DROP TABLE <表名> {RESTRICT|CASCADE};

-- CASCADE是如果表有外链,视图,触发器的话也会强行删除,RESTRICT相--- 反。
-- 如:删除Student表
DROP TABLE Student CASCADE;

修改

1
2
3
4
5
6
7
8
9
ALTER TABLE <表名> 
[ADD [COLUMN] <新列名> <数据类型> [完整性约束]]
[ADD [表级完整性约束]]

-- 如:想Student表中添加“入学时间”列,其数据类型为日期型。
ALTER TABLE Student ADD S_entrance DATA;

-- 将年龄的数据类型由字符型(假设原来的数据类型是字符型)改为整数。
ALTER TABLE Student ALTER COLUMN Sage INT;
3.索引的建立、修改和删除

数据量比较大的时候,查询耗时长,建立索引可以有效减少消耗时间。索引可以建立在一列或者多列上。前提是保证索引列是唯一。

创建

1
2
3
4
5
6
7
CREATE [UNIQUE] [CLUSTER] INDEX <索引名>
ON <表名>(<列名> [<次序>] [,<列名> [<次序>]] ...)

-- CLUSTER是聚簇索引
-- UNIQUE是唯一索引
-- 如:
CREATE UNIQUE INDEX Stusno ON Student(Sno);

修改

1
2
3
4
ALTER INDEX <旧索引名> RENAME TO <新索引名>

-- 如:将SC表的SCno索引名改为SCSno
ALTER INDEX SCno RENAME TO SCSno;

删除

1
2
3
4
DROP INDEX <索引名>

-- 如:删除Student表的Stusname索引
DROP INDEX Stusname;