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概述及数据定义/