1. SQL概述

SQL概述

基本表的定义,删除与修改

1. 定义基本表

语句格式:

CREATE TABLE <表名>
    ( <列名> <数据类型>[ <列级完整性约束条件> ]
    [,<列名> <数据类型>[ <列级完整性约束条件>]]………
    [,<表级完整性约束条件> ]
    );

【说明】如果完整性约束条件涉及到该表的多个属性列,则必须定义在表级上,否则既可以定义在列级也可以定义在表级。

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

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

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

CREATE TABLE Course
    (Cno  CHAR(4) PRIMARY KEY,
     Cname CHAR(40),
     Cpno CHAR(4),
     /*先修课*/
     Ccerdit 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),
     /*表级完整性约束条件,Sno为外码,被参照表是Student*/
     Foreign KEY(Cno) REFERENCES Student(Cno)
     /*表级完整性约束条件,Cno为外码,被参照表是Course*/
    );

2. 数据类型

column column
CHARACTER(n) 字符/字符串。固定长度 n。
VARCHAR(n) 或CHARACTER VARYING(n) 字符/字符串。可变长度。最大长度 n。
BINARY(n) 二进制串。固定长度 n。
BOOLEAN 存储 TRUE 或 FALSE 值
VARBINARY(n) 或BINARY VARYING(n) 二进制串。可变长度。最大长度 n。
INTEGER(p) 整数值(没有小数点)。精度 p。
SMALLINT 整数值(没有小数点)。精度 5。
INTEGER 整数值(没有小数点)。精度 10。
BIGINT 整数值(没有小数点)。精度 19。
DECIMAL(p,s) 精确数值,精度 p,小数点后位数 s。例如:decimal(5,2) 是一个小数点前有 3 位数,小数点后有 2 位数的数字。
NUMERIC(p,s) 精确数值,精度 p,小数点后位数 s。(与 DECIMAL 相同)
FLOAT(p) 近似数值,尾数精度 p。一个采用以 10 为基数的指数计数法的浮点数。该类型的 size 参数由一个指定最小精度的单一数字组成。
REAL 近似数值,尾数精度 7。
FLOAT 近似数值,尾数精度 16。
DOUBLE PRECISION 近似数值,尾数精度 16。
DATE 存储年、月、日的值。
TIME 存储小时、分、秒的值。
TIMESTAMP 存储年、月、日、小时、分、秒的值。
INTERVAL 由一些整数字段组成,代表一段时间,取决于区间的类型。
ARRAY 元素的固定长度的有序集合
MULTISET 元素的可变长度的无序集合
XML 存储 XML 数据

3. 修改基本表

语句格式:

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

【说明】

  • DROP COLUMN 子句用于删除表中的列。

    • 指定了CASCADE(级联)短语,自动删除引用该列的其他对象。
    • 指定了RESTRIC(限制)短语,若该列被其他对象所引用,则将拒绝删除该列。
  • DROP CONSTRAINT 子句用于删除指定的完整性约束条件。

  • ALTER COLUMN 子句用于修改原有的列的定义,包括修改列名和列的数据类型。

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

ALTER TABLE Student ADD S_entrance Date;
/*不论基本表中原来是否已有数据,新增加的列数据都为Null*/

【例】将年龄的数据类型由字符型该为整数。

ALTER TABLE Student ALTER COLUMN Sage INT;

【例】增加课程每次必须取唯一值的约束条件。

ALTER TABLE Course ADD UNIQUE (Cname);

4. 删除基本表

语句格式:

DROP TABLE <表名>[RESTRICT|CASCADE];

【例】删除Student表

DROP TABLE Student CASCADE;

【说明】

  • RESTRICT:删除表是有限制的。

    • 欲删除的基本表不能被其他表的约束所引用。
    • 如果存在依赖该表的对象,则此表不能被删除。
  • CASCADE:删除该表没有限制。

    • 在删除基本表的同时,相关的依赖对象一起删除。
  • 基本表定义被删除,数据被删除,表上建立的索引,视图,触发器等也将被删除。

5. 索引的建立与删除–INDEX

** 建立索引的目的 **:加快查询速度。

** 谁可以建立索引?**

  • DBA 或 表的属主(即建立表的人)
  • DBMS一般会自动建立以下列上的索引
  • PRIMARY KEY
  • UNIQUE

** 谁维护索引?**

  • DBMS自动完成。

** 1. 使用索引 **

  • DBMS自动选择是否使用索引以及使用哪些索引

【例】为学生-课程数据库中的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 DESC);

Student 表按学号升序建唯一索引。
Course 表按课程号升序建唯一索引。
SC 表按学号升序和课程号降序建唯一索引。

** 2. 删除索引 **

语句格式:

DROP INDEX <索引名> ON <表名>;
DROP INDEX <表名>.<索引名>;

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

【例】删除Student表的Stusname索引

DROP INDEX Stusno ON Student;
或
DROP INDEX Student.Stusno;

1. SQL概述
http://yuukichen.github.io/2024/07/05/sql概述及数据定义/
Author
Yuukichen
Posted on
July 5, 2024
Licensed under