SQL语句 创建表、模式、索引

一、数据定义语句

一、 数据定义:

操作对象 创建 删除 修改
模式 CREATE SCHEMA DROP ~
CREATE TABLE DROP ~ ALTER TABLE
视图 CREATE VIEW DROP VIEW
索引 CREATE INDEX DROP INDEX ALTER INDEX
  • 一个数据库中可以建立多个模式,一个模式下通常包括多个表、视图和索引等数据库对象。(什么是索引???)

二、数据字典
数据字典是关系数据库管理系统内部的一组系统表,它记录了数据库中所有对象的定义信息以及一些统计信息:

  • 关系模式、表、视图、索引的定义
  • 完整性约束的定义
  • 各类用户对数据库的操作权限
  • 统计信息
    关系数据库管理系统在执行SQL的数据定义语句时,实际上就是在更新数据字典表中的相应信息。(数据字典怎么查看??????)

三、创建表

1. 创建表
【例3.1】建立“学生”表Student。学号是主码,姓名取值唯一。

CREATE TABLE Student
(Sno CHAR(9) PRIMARY KEY,   // 列级完整性约束条件,Sno是主码
Sname CHAR(20) unique,		// Sname取唯一值  UNIQUE约束
Ssex CHAR(2),
Sage SMALLINT,
Sdept CHAR(20)
);

【例3.2】建立一个“课程”表Course

CREATE TABLE Course
(Cno CHAR(4) PRIMARY KEY,
Cname CHAR(40),
Cpno CHAR(4),
Ccredit SMALLINTFOREIGN KEY (Cpno)	REFERENCES Course(Cno)    //Cpno是外码,被参照的是Course表,被参照的列是cno
);

【例3.3】建立一个学生选课表SC

CREATE TABLE SC(
Sno CHAR(9),
Cno CHAR(4),
Grade SMALLINT,
			//主码由两个属性构成,必须作为表级完整性进行定义
PRIMARY KEY (Sno,Cno),
			//表级完整性约束条件,Sno是外码,被参照表示Student
FOREIGN KEY (Sno)REFERENCES Student(Sno)
   			//表级完整性越是条件,Cno是外码,被参照表示Course
FOREIGN KEY (Cno)REFERENCES Course(Cno)
)

四、模式的创建于删除

一、模式的创建

  • CREATE SCHEMA <模式名> AUTHORIZATION <用户名>[<表定义子句>|<视图定义子句>|<授权定义子句>]
  • 定义模式实际上定义了一个命名空间(或者说是目录)
  • 在这个空间中可以定义该模式包含的数据库对象,例如基本表、视图、索引等。
  • 在CREATE SCHEMA中可以接受CREATE TABLE,CREATE VIEW和GRANT子句。(啥是GRANT子句?)

【例题3.1】为用户WANG定义一个学生-课程模式S-T

CREATE SCHEMA "S-T" AUTHORIZATION WANG;	

【例题3.2】为用户ZHANG创建了一个模式TEST,并且在其中定义一个表TABE1

CREATE SCHEMA TEST AUTHORIZATION ZHANG
CREATE TABLE TABE1 ( COL1 SMALLINT,
COL2 INT,
COL3 CHAR(20),
COL4 NUMERIC(10,3),
COL5 DECIMAL(5,2)
);

二、模式的删除
DROP SCHEMA <模式名>

  • CASCADE(级联)
    • 删除模式的同事把该模式中所有的数据库对象全部删除
  • RESTRICT(限制)
    • 如果该模式中定义了下属的数据库对象(如表、视图等),则拒绝该删除语句的执行

【例3.3】删除模式ZHANG,同时该模式中定义的表TABE1也被删除

DROP SCHEMA ZHANG CASCADE

五、修改基本表

ALTER TABLE <表名>
[ADD[COLUMN] <新列名> <数据类型> [ 完整性约束 ] ]
[ADD <表级完整性约束>]
[DROP [ COLUMN ] <列名> [CASCADE| RESTRICT] ]
[DROP CONSTRAINT<完整性约束名>[ RESTRICT | CASCADE ] ]
[ALTER COLUMN <列名><数据类型> ]   

<表名>是要修改的基本表
ADD子句用于增加新列、新的列级完整性约束条件和新的表级完整
性约束条件
DROP COLUMN子句用于删除表中的列
 如果指定了CASCADE短语,则自动删除引用了该列的其他对象
 如果指定了RESTRICT短语,则如果该列被其他对象引用,关系数据库
管理系统将拒绝删除该列
DROP CONSTRAINT子句用于删除指定的完整性约束条件
ALTER COLUMN子句用于修改原有的列定义,包括修改列名和数据
类型
【例5.1】向Student表增加“入学时间”列,其数据类型为日期型

ALTER TABLE Student ADD S_entrance DATE;  //这里可以顺便加个完整性约束

【例5.2】将Student 的年龄的数据类型由字符型(假设原来的数据类型是字符型)改为整数。

ALTER TABLE Student ALTER COLUMN Sage INT;

【例5.3】增加课程名称必须取唯一值得约束条件。

ALTER TABLE Course ADD UNIQUE(Cname)

六、删除基本表

DROP TABLE<表名> [RESTRICT| CASCADE]
【例6.1】删除Student表

DROP TABLE Student CASCADE;  //级联删除
		//表的定义被删除,数据被删除。
		//表上建立的索引、视图、触发器也一并被删除

七、索引

一、索引的概念

  • 建立索引的目的:加快查询速度
  • 关系数据库管理系统中常见的索引:
    1. 顺序文件上的索引
    2. B+树索引 (参见爱课程网3.2节动画《B+树的增删改》) //具有动态平衡的优点 ?????????????
    3. 散列(hash)索引 //HASH索引具有查找速度快的特点
    4. 位图索引
  • 聚集索引和非聚集索引的区别
    https://blog.csdn.net/jiadajing267/article/details/54581262
    https://www.cnblogs.com/hyd1213126/p/5828937.html
    二、建立索引
    语句格式
    CREATE [UNIQUE] [CLUSTER] INDEX <索引名>
    ON <表名>(<列名>[<次序>][,<列名>[<次序>] ]…);
     <表名>:要建索引的基本表的名字
     索引:可以建立在该表的一列或多列上,各列名之间用逗号分隔
     <次序>:指定索引值的排列次序,升序:ASC,降序:DESC。缺省
    值:ASC
    UNIQUE:此索引的每一个索引值只对应唯一的数据记录
    CLUSTER:表示要建立的索引是聚簇索引

【例7.1】为学生-课程数据库中的Student,Course,SC三个表建立索引。Student表按学号升序建唯一索引,Course表按课程号升序建唯一索引,SC表按学号升序和课程号降序建唯一索引:

CREATE UNIQUE INDEX Stusno ON Student(Sno);
CREATE UNIQUE INDEX Coucno ON Course(Cno);
CREATE UNIQUE INDEX SCno ON SC(Sno ASC , Cno DEC);

三、删除索引

DROP INDEX <索引名> on <表名>;

你可能感兴趣的:(数据库)