目录
一.基本表的定义
1.1定义语句
CREATE TABLE <表名>
(
<属性列名1> <数据类型> [列级约束条件],
<属性列名2> <数据类型> [列级约束条件],
..................................,
[表级约束条件]
)
举个例子,我们建三个表STUDENT,COURSE,SC来理解定义,并且下面所有SQL语句都是基于下面的表
/*建立STUDENT*/
CREATE TABLE STUDENT
(SNO CHAR(7) NOT NULL PRIMARY KEY(SNO),/*列级完整性约束,SNO是主键*/
SNAME VARCHAR(8) NOT NULL,
SEX CHAR(2) NOT NULL,
BDATE DATE NOT NULL,
HEIGHT DEC(5,2) DEFAULT 000.00,
);
/*建立COURSE*/
CREATE TABLE COURSE
(CNO CHAR(6) NOT NULL PRIMARY KEY(CNO),/*列级完整性约束,CNO是主键*/
LHOUR SMALLINT NOT NULL,
CREDIT DEC(1,0) NOT NULL,
SEMESTER CHAR(2) NOT NULL,
);
/*建立SC*/
CREATE TABLE SC
(SNO CHAR(7) NOT NULL,
CNO CHAR(6) NOT NULL,
GRADE DEC(4,1) DEFAULT NULL,
PRIMARY KEY(SNO,CNO),/*主键由两个(多个)属性构成,必须作为表级完整性约束*/
FOREIGN KEY(SNO) REFERENCES STUDENT(SNO),
/*表级完整性约束条件,SNO是外键,被参照表是STUDENT*/
FOREIGN KEY(CNO) REFERENCES COURSE(CNO)
/*表级完整性约束条件,CNO是外键,被参照表是COURSE*/
);
1.2语句细节
1.2.1数据类型
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 数据 |
1.2.2约束条件
- 主键:
- 代码:PRIMARY KEY
- 一旦该字段被确定为主键时,该字段不能为空,也不能有重复属性值
- 当主键只有一个字段,采用列级约束条件进行约束
- 当主键有多个字段,采用表级约束条件进行约束
-
/*创建表时主键约束*/ SNO CHAR(7) NOT NULL PRIMARY KEY(SNO),/*一个主键,列级完整性约束,SNO是主键*/ SNO CHAR(7) NOT NULL, CNO CHAR(6) NOT NULL, PRIMARY KEY(SNO,CNO),/*主键由两个(多个)属性构成,必须作为表级完整性约束*/ /*创建表后,添加主键约束*/ ALTER TABLE STUDENT ADD PRIMARY KEY(HEIGHT);/*创建表后,添加主键约束,其实不正确,因为主键约束要非空、唯一*/ ALTER TABLE STUDENT DROP PRIMARY KEY;/*删除主键约束*/
- 外键
- 代码:
FOREIGN KEY [<外键>] REFERENCES (被参照表)(<与外键对应的主键名>)
-
外键不一定要与主键同名,但是为了方便识别,通常采用同名方式。
-
外键与对应的主键必须定义在同一值域上,即数据类型和长度要完全一致
-
/*创建表时的外键约束*/ FOREIGN KEY(CNO) REFERENCES COURSE(CNO) /*表级完整性约束条件,CNO是外键,被参照表是COURSE*/ /*创建表后添加外键约束*/ ALTER TABLE SC ADD FOREIGN KEY(CNO) REFERENCES COURSE(CNO) /*删除外键约束*/ ALTER TABLE SC DROP CONSTRAINT FK__SC__CNO__2B3F6F97
- 代码:
- NOT NULL或NULL约束
- 约束关系主属性必须限定为NOT NULL。
- UNIQUE约束
- 唯一性约束条件,不允许出现重复的属性值
- DEFAULT约束
- 默认值约束
- CHECK约束
- 检查约束条件表达式设置属性值应该满足的条件
录入数据,后面用于查找修改
SNO | SNAME | SEX | BDATE | HEIGHT | |
1 | 0104421 | 周远行 | 男 | 1983-07-16 | 1.83 |
2 | 0208123 | 王义平 | 男 | 1984-08-20 | 1.71 |
3 | 0209120 | 王大力 | 男 | 1983-08-10 | 1.75 |
4 | 0309119 | 李维 | 女 | 1986-08-10 | 1.68 |
5 | 0309203 | 欧阳美林 | 女 | 1985-06-03 | 1.62 |
STUDENT表
SNO | CNO | GRADE | |
1 | 0104421 | CS-110 | 91.0 |
2 | 0104421 | EE-201 | 100.0 |
3 | 0208123 | EE-122 | 91.0 |
4 | 0208123 | EE-201 | 83.0 |
5 | 0209120 | CS-221 | NULL |
6 | 0309119 | CS-110 | 72.0 |
7 | 0309119 | CS-201 | 65.0 |
8 | 0309203 | CS-110 | 82.5 |
9 | 0309203 | CS-201 | 80.0 |
10 | 0309203 | EE-201 | 80.0 |
SC表
CNO | LHOUR | CREDIT | SEMESTER | |
1 | CS-110 | 60 | 3 | 秋 |
2 | CS-201 | 80 | 4 | 春 |
3 | CS-221 | 40 | 2 | 秋 |
4 | EE-122 | 106 | 5 | 秋 |
5 | EE-201 | 45 | 2 | 春 |
COURSE表
二.基本表的修改
基本表的修改包括增加、删除、修改
- 增加
- 语句:
ALTER TABLE <表名> ADD <属性列名><数据类型>[完整性约束条件]|<完整性约束>
-
例子
ALTER TABLE STUDENT ADD Tel Varchar(15); /*在STUDENT表中加入Tel(电话)*/
- 语句:
- 删除
- 语句
ALTER TABLE <表名> ALTER COLUMN <属性列名><数据类型>
-
例子
ALTER TABLE STUDENT DROP COLUMN Tel; /*删除属性列,例如删除STUDENT表中的Tel(COLUMN表示列)*/
- 语句
- 修改
- 语句
ALTER TABLE<表名> DROP {[CONSTRAINT]<完整性条件>|COLUMN<列名>[CASCADE|RESTRICT]}
- 例子
ALTER TABLE STUDENT ALTER COLUMN Sex int;
- 语句
修改原有的列定义可能会破坏已有数据
三.基本表的删除
- 删除语句:
DROP TABLE <表名>[CASCADE|RESTRICT]
- 例子
/*删除SC表*/ DROP TABLE SC;
注意:
1.基本表的删除是有限制条件的,要删除的表不能被其他表的约束所引用,如果存在这些依赖该表的对象,则表不能删除
2.删除表不仅把表里的数据和定义删除,该表上建立的索引、视图、触发器等有关对象也将被删除