【进击的数据库小白】--SQL数据定义

关系数据库标准语言SQL

文章目录

  • 关系数据库标准语言SQL
    • 1.SQL语法特点
      • 1.1集多种数据库语言于一体
      • 1.2面向集合的操作方式
    • 2.SQL数据类型
      • 2.1字符串类型
      • 2.2数值类型
      • 2.3日期和时间类型
      • 2.4其他常用类型
    • 3.符号约定(用于解释语言成分)
    • 4.模式的定义与删除
      • 4.1创建模式
      • 4.2删除模式
    • 5.创建、修改和删除基本表
      • 5.1创建基本表
        • 5.1.1列约束定义
        • 5.1.2表约束定义
        • 5.1.3【举例-创建教师表】
      • 5.2修改基本表
      • 5.3删除基本表
    • 6.建立和删除索引
        • 6.1创建索引
        • 6.2删除索引

1.SQL语法特点

SQL 是一种基于关系代数和关系演算的非过程化语言(它指定用户对数据进行哪些操作,而不指定如何去操作数据,即非过程化)。

1.1集多种数据库语言于一体

从SQL功能来看,有5种语言子集:
(1)DDL( Data Definition Language,数据定义语言):定义、修改、删除数据模式,通常包括 CREATE TABLE、 ALTER TABLE、 DROP TABLE等操作。
(2)DQL( Data Query Language,数据查询语言):查询数据。DQL指的是以SELECT命令开始的SQL语句,对数据表中的数据进行投影、选择、连接等操作
(3)DML(Data Manipulation Language数据操作语言):插入、删除、更新数据,主要包括 INSERT、 DELETE、 UPDATE等操作
(4)DCL( Data Control Language,数据控制语言):控制用户对数据的访问权限,主要包括 GRANT、 REVOKE等操作

(5)DSDL数据存储描述语言):用来定义内模式。

1.2面向集合的操作方式

传统的程序设计语言和非关系数据模型的语言都是面向记录的:一次处理一个记录。

SQL采用集合操作方式,其运算对象、运算结果均是元组的集合。不仅查询的对象和查询的结果是元组的集合,而且插入、删除和修改操作的对象也可以是元组的集合。

2.SQL数据类型

数据类型主要用在创建基本表(关系)的时候,指定基本表的每个列(属性)的类型。这些数据类型主要分为字符串类型数值类型时间/日期类型等。

2.1字符串类型

名称 概述
CHAR(n) 定长字符串类型,n指定了定长字符串的长度。如果输入的字符串长度小于n,则在字符串的尾部用空格补齐到n个字符;如果输入的字符串长度大于n,则会从右边自动截断,到仅剩n个字符为止
VARCHAR(n) 变长字符串类型,n指定了字符串的最大长度,输入的字符串不会有补齐操作,以变长的形式输出

2.2数值类型

​ 数值类型又可以分成精确数值类型近似数值类型,精确数据类型包括一系列的整数类型(整型),而近似数值类型则包括浮点类型等(需要注意的是,不同的数据库对于数据类型的支持会有细微的差别)

名称 概述
SMALLINT 整型,长度是2字节,取值范围是[-32768,32767]
INTERGER 整型,长度是4字节,取值范围是[-2147483648,2147483647]
BIGINT 整型,长度是8字节,取值范围在-263~(263)-1,即[-9223372036854775808,9223372036854775807]
FLOAT§ 浮点类型,其中p代表的是浮点类型中小数点前后的总位数之和
REAL 单精度浮点类型,长度为4字节,取值范围是[-3.40E+38 , 3.40E+38]
NUMERIC(p,s) p为小数点前后的总位数之和;s为小数点后的位数;p和s的取值范围取决于不同的数据库的实现
DECIMAL(p,s) 和 NUMERIC类似,但数值精度不受p和s的限制,p和s决定了DECIMAL精度的下限
DOUBLE PRECISION 双精度类型,长度为8字节,取值范围是[-1.79E+308,1.79E+308]

2.3日期和时间类型

名称 概述
DATE 日期类型,由年、月、日组成,形如yyyy-mm-dd
TIME§ 时间类型,由时、分、秒组成,形如hh:mm:ss
TIMESTAMP§ 时间类型,DATE和TIME的结合,由年、月、日、时、分、秒组成,形如yyyy-mm-dd hh:mm:ss,如果指定了精度p,则会保存秒的小数部分
INTERVAL 时间间隔

SQL允许对DATE、TIME和INTERVAL类型的值进行计算。例如:x、y都是DTAE类型,则x—y为INTERVAL类型。

2.4其他常用类型

名称 概述
BLOB/CLOB 大对象,BLOB中保存的是二进制文件。CLOB中保存的是文本文件
BOOLEAN 布尔类型,可以取值为TRUE、FALSE、UNKNOWN,通常UNKNOWN和NULL值等价

3.符号约定(用于解释语言成分)

  • :表示X是需要进一步定义或说明的语言成分
  • [X]:表示X可以缺省或出现一次
  • {X}:表示X可以出现一次
  • X|Y:表示X、Y必须出现一个,且不能同时出现

4.模式的定义与删除

DBMS为关系的命名提供了一个三级层次结构。顶层由目录(catalog)组成,每个目录中包含一些模式(schema)SQL对象(关系、视图等)都包含在模式内。一个关系由目录名、模式名和关系名唯一确定。

【例】

Catalog.Supply-schema.Suppliers

确定了Catalog目录下的Supply-schema模式中的Suppliers关系。如果关系在默认目录的默认模式中,则可以省略目录名和模式名前缀。

用户连接到数据库时,系统会为该链接建立一个默认的目录和模式。目录的创建、设置和删除依赖于具体实现,不包含在SQL标椎中。但可以用CREATE SCHEMA和DROP SCHEMA创建与删除模式。

4.1创建模式

语句格式:

CREATE SCHEMA <模式名> [<模式元素>...]CREATE SCHEMA[<模式名>] AUTHORIZATION <用户名> [<模式元素>]

第二种与第一种的区别在于他创建的模式授予<用户名>指定的用户,当<模式名>缺省时,用<用户名>作为模式名。

4.2删除模式

语句格式:

DROP SCHEMA <模式名> CASCADE|RESTRICT

其中,CASCADE和RESTRICT两者必须选择其一。CASCDE(级联)删除模式名指定的模式,并删除该模式中所有的数据库对象;RESTRICT(限制),仅当该模式不包含任何数据库对象时才能删除,否则拒绝删除。

5.创建、修改和删除基本表

5.1创建基本表

创建一个基本表要对基本表明明,定义表的每个列,并定义表的完整性约束。

基本格式:

CREATE TABLE <表名>
(
  <列名><数据类型>[DEFAULT <缺省值>][列级约束定义],
  ...,
  [<表级约束定义>, ... ,<表级约束定义>]
);

列级约束定义:和该列相关的完整性约束;

表级约束定义:和一个列或多个列同时相关的完整性约束。

缺省值是当在表中创建列或插入数据时,对没有指定其具体值的列或列数据项赋予事先设定好的值。

5.1.1列约束定义

[CONSTRAINT <约束名>] <列约束>

常见的列约束:

  • NOT NULL: 不允许取空值,不加的话可以取空值
  • PRIMARY KEY:指明该列是主码,要求非空、唯一
  • UNIQUE: 该列上的值必须唯一,即改列为候选码
  • CHECK(<条件>): 指明要满足的条件,<条件>中是一个布尔表达式

5.1.2表约束定义

[CONSTRAINT <约束名>] <表约束>

常见的表约束:

  • PRIMARY KEY (A1,A2,…,Ak):说明属性列A1,…,Ak构成该关系的主码
  • UNIQUE (A1,…,Ak):说明属性列A1,…,Ak必须唯一,即为候选码
  • CHECK(<条件>):<条件>是一个涉及该表一个或多个列的布尔表达式。
  • FOREIGN KEY (A1,…,Ak)REFERENCES <外表名> (<外表主码>) [<参照触发动作>]:属性A1,…,Ak是关系(表)的外码,<参照触发动作>说明违反参照完整性时采取的措施。其中外表要提前声明,属性A1,...,Ak要与<外表主码>数据类型一致。

5.1.3【举例-创建教师表】

CREATE TABLE Departments
(Dno CHAR(4) PRIMARY KEY,
 Dname CHAR(10),
 Dheadno CHAR(7)
);
CREATE TABLE Teachers
(Tno CHAR(7) PRIMARY KEY,
 Tname CHAR(10) NOT NULL,
 Sex CHAR(2) CHEAX (Sex='男' OR Sex='女'),
 Birthday DATA,
 Title CHAR(6),
 Dno CHAR(4),
 FOREIGE KEY (Dno) REFERENCES Departments (Dno)
);

5.2修改基本表

ALTER TABLE <表名>
[ADD [COLUMN] <列名> <数据类型> [列级约束定义]]
[ALTER [COLUMN] <列名> {
    SET DEFAULT <缺省值> | DROP DEFAULT}]
[DROP [COLUMN] <列名> {
    CASCADE | RESTRICT}]
[ADD <表约束定义>]
[DROP CONSTRAINT <约束名> {
    CASCADE | RESTRICT}] 

解释:

  • [ADD [COLUMN] <列名> <数据类型> [列级约束定义]]

用于向基本表添加新列,要注意的是新添加的列不允许用NOT NULL说明。

【举例】在Courses中增加一个新列 Pno:

ALTER TABLE Courses ADD Pno CHAR (5);

  • [ALTER [COLUMN] <列名> {SET DEFAULT <缺省值> | DROP DEFAULT}]

用于修改列名,添加缺省值或删除缺省值。

【举例】在Students 的Sex列设置缺省值 “女 ”可以减少大约一半学生性别的输入:

ALTER TABLE Students ALTER Sex SET DEFAULT ‘女’;

  • [DROP [COLUMN] <列名> {CASCADE | RESTRICT}]

删除已存在的列。

【举例】删除Courses中的 Pno列:

ALTER TABLE Courses DROP Pno;

  • [ADD <表约束定义>]

添加表约束。

【举例】在Students中添加表约束

ALTER TABLE Students ADD FOREIGE KEY (Dno) REFERENCES Departments (Dno);

  • [DROP CONSTRAINT <约束名> {CASCADE | RESTRICT}]

删除表约束,没有命名的表约束不能删除。

5.3删除基本表

DROP TABLE <表名> {
    CASCADE | RESTRICT}

【举例】删除SC表

DROP TABLE SC CASCADE;

SC和依赖于SC的对象都会被彻底删除,以及在该表上建立的视图、索引,且这种删除是不可恢复的。

6.建立和删除索引

索引类似于书的目录,通常被分为唯一性索引(每个索引值对应一个数据记录行)和非唯一性索引(聚簇索引和非聚簇索引)。

6.1创建索引

通常,DBMS自动为主码建立索引,其他索引用CREATE INDEX语句创建。

CREATE [UNIQUE] [CLUSTER] INDEX <索引名> ON <表名> (<列名> [<次序>],...,<列名> [<次序>])
  • <索引名>为建立的索引命名;
  • <表名>是要建立索引的基本表的名字;
  • [UNIQUE]表示该索引为唯一性索引,缺省时为非唯一性索引;
  • [CLUSTER]表示建立的索引是聚簇索引,缺省时为非聚簇索引
  • 索引可以建在该表的一列或多列上,每个<列名>后可以用<次序>指定索引值的排序,ASC(升序)和DESC(降序),缺省时为ASC。

聚簇索引比非聚簇索引查询效率快,但维护代价大。一个基本表最多只能建一个聚簇索引。

【进击的数据库小白】--SQL数据定义_第1张图片

6.2删除索引

DROP INDEX <索引名>

你可能感兴趣的:(数据库笔记,数据库,sql)