SQL数据定义

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/carrot_guo/article/details/88073183

定义模式

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

删除模式

DROP SCHEMA <模式名> <CASCADE|RESTRICT>
  • CASCADE:删除模式的同时把该模式中所有的数据库对象全部删除;

  • RESTRICT:如果该模式中定义了下属的数据库对象(如表、视图等),则拒绝
    该删除语句的执行;当该模式中没有任何下属的对象时才能执行。

  • 例子

DROP SCHEMA ZHANG CASCADE

数据类型

数据类型 含义
CHAR(n) 长度为n的定长字符串
VARCHAR(n) 最大长度为n的变长字符串
INT 长整数(也可以写作INTEGER)
SMALLINT 短整数
NUMERIC(p,d) 定点数,由p位数字(不包括符号、小数点)组成,小数后面有d位数字
REAL 取决于机器精度的浮点数
Double Precision 取决于机器精度的双精度浮点数
FLOAT(n) 浮点数,精度至少为n位数字
DATE 日期,包含年、月、日,格式为YYYY-MM-DD
TIME 时间,包含一日的时、分、秒,格式为HH:MM:SS

基本表定义

CREATE TABLE <表名><列名> <数据类型>[ <列级完整性约束条件> ]
     [<列名> <数据类型>[ <列级完整性约束条件>] ][<表级完整性约束条件> ] );
  • 例子
    建立“学生”表Student,学号是主码,姓名取值唯一。
CREATE TABLE Student 
        (Sno CHAR(9) PRIMARY KEY,   /*列级完整性约束条件*/
         Sname CHAR(20) UNIQUE,     /*Sname取唯一值*/
         Ssex CHAR(2),
         Sage SMALLINT,
         Sdept CHAR(20));

建立一个“课程”表Course

CREATE TABLE Course
        (Cno CHAR(4) PRIMARY KEY,
         Cname CHAR(40),
         Cpno CHAR(4),      /*先修课*/
         Ccredit SMALLINT,
         FOREIGN KEY (Cpno) REFERENCES Course(Cno));    /*Cpno是外码被参照表是Course、被参照列是Cno*/

建立一个“学生选课”表SC:

CREATE TABLE SC
        (Sno CHAR(9),
         Cno CHAR(4),
         Grade SMALLINT,
         PRIMARY KEY(Sno,Cno),
         FOREIGN KEY (Sno) REFERENCES Student(Sno),
         FOREIGN KEY (Cno) REFERENCES Course(Cno));

修改基本表

新增那一列一律是空值;

ALTER TABLE <表名>
    [ ADD <新列名> <数据类型> [ 完整性约束 ] ]
    [ DROP <完整性约束名> ]
    [ ALTER COLUMN<列名> <数据类型> ]
  • 例子

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

ALTER TABLE Student ADD S_entrance DATE;

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

ALTER TABLE Student CHANGE Sage Sage INT;

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

ALTER TABLE Course ADD UNIQUE(Cname);

删除基本表

DROP TABLE <表名>RESTRICT|CASCADE];
  • RESTRICT:删除该表示有限制的,不能被其他表的约束所引用,若存在依赖该表的对象,则表不能被删除;

  • CASCADE:删除该表没有限制;

  • 例子

删除Student表

DROP TABLE Student CASECADE;

索引的建立与删除

建立索引的目的

加快查询速度;

建立索引

CREATE [UNIQUE] [CLUSTER] INDEX <索引名>
ON <表名>(<列名>[<次序>][,<列名>[<次序>] ])
  • 例子

在Student表的Sname(姓名)列上建立一个聚簇索引:

CREATE CLUSTER INDEX Stusname ON Student(Sname)

在Student表的Sname(姓名)列上建立一个聚簇索引
在最经常查询的列上建立聚簇索引以提高查询效率;
一个基本表上最多只能建立一个聚簇索引;
经常更新的列不宜建立聚簇索引;

为学生-课程数据库中的Student,Course,SC三个表建立索引。

CREATE UNIQUE INDEX Stusno ON Student(Sno);     /*Student表按学号升序建唯一索引*/
CREATE UNIQUE INDEX Coucno ON Course(Cno);      /*Course表按课程号升序建唯一索引*/
CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC);       /*SC表按学号升序和课程号降序建唯一索引*/

删除索引

删除索引时,系统会从数据字典中删去有关该索引的
描述。

DROP INDEX <索引名>;
  • 例子

删除Student表的Stusname索引

DROP INDEX Stusname ON Student;

猜你喜欢

转载自blog.csdn.net/carrot_guo/article/details/88073183