4-数据定义

关系数据库系统支持三级模式结构,其模式,外模式,内模式中的基本对象有模式、表、视图和索引

所以SQL的数据定义功能包括模式定义表定义视图定义(见视图一节)和索引定义

模式的定义与删除

定义模式

(1)为用户wang定义一个学生-课程模式S-T

CREATE SCHEMA "S-T" AUTHORIZATION wang;    //可以没有模式名,但是会隐含用户名为模式名

(2)为用户zhang创建模式一个模式test,并在其中定义一个表tab1

CREATE SCHEMA test AUTHORIZATION zhang
CREATE TABLE tab(
    C1 SMALLINT.
    C2 INT,
    C3 CHAT(20),
    C4 NUMERIC(10,3)
); 
删除模式
DROP SCHEMA zhang CASCADE;    //CASCADE(级联)和RESTRICT(限制)两者必选其一!
该语句删除模式zhang,同时,该模式中已经定义的表tab也被删除了

表的定义、删除与修改

定义表

(1)建立一个“学生”表Student

CREATE TABLE Student(
    Sno CHAR(9) PRIMARY KEY,    //Sno是主键
    Sname CHAR(20) UNIQUE,    //Sname取唯一值
    Ssex CHAR(2),
    Sage SMALLINT,
    Sdept CHAR(20)
);

(2)建立一个“课程”表Course

CREATE TABLE Course(
    Cno CHAR(9) PRIMARY KEY,    //Cno是主键
    Cname CHAR(40) NOT NULL,    //Cname不能为空值
    Ccredit SMALLINT,
    FOREIGN KEY (Cpno) REFERENCES Course(Con)    //Cpno是外键,被参照表是Course,被参照列是Cno
);

(3)建立学生选课表SC

CREATE TABLE SC(
    Sno CHAR(9),
    Cno CHAR(4),
    Grade SMALLINT,
    PRIMARY KE (Sno,Cno),    //主键由两个属性构成
    FOREIGN KEY (Sno) REFERENCES Student(Sno),    //Sno是外键,被参照表是Student
    FOREIGN KEY (Cno) REFERENCES Course(Cno)    //Cno是外键,被参照表是Course
);
数据类型

(1)CHAR(2)INT(3)SMALLINT.....

模式与表

每一个表(基本表)都属于某一个模式,一个模式包含多个表。定义表时有三种方法定义它所属的模式。

(1)

CREATE TABLE "S-T".Student(...);
CREATE TABLE "S-T".Course(...);
CREATE TABLE "S-T".SC(...);

(2)模式定义的(2)

(3)...

修改表

(1)向Student表增加“入学时间”列,其数据类型为日期型

ALTER TABLE Student ADD S_entrance DATE;    //不论表中原来是否已有数据,新增加的列一律为空值

(2)将年龄的数据类型由字符型改为整数型

ALTER TABLE Student ALTER COLUMN Sage INT;    

(3)增加课程名称必须取唯一值的约束条件

ALTER TABLE Course ADD UNIQUE(Cname);
删除表

(1)删除Student表

DROP TABLE Student CASCADE;
如果表上有视图选择 RESTRICT 是表不能删除;选择 CASCADE 是可以删除表,视图也自动被删除


索引的建立与删除

建立索引

(1)为学生-数据库中的 Student、Course 和 SC 三个表建立索引。其中Student表按学号升序建唯一索引,Course表按课程号升序建唯一索引,SC表按学号升序和课程号降序建唯一索引

CEEATE UNIQUE INDEX Stusno ON Student(Sno);    //Stusno为索引名
CEEATE UNIQUE INDEX Coucno ON Course(Cno);
CEEATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC);    //ASC:升序    DESC:降序
修改索引

(1)将 SC 表的 SCno 索引名改为 SCSno

ALTER INDEX SCno RENAME SCSno;
删除索引

(1)删除 Student表的 Stusname 索引

DROP INDEX Stusname;

猜你喜欢

转载自blog.csdn.net/huoguang_/article/details/79917807
今日推荐