图形化操作
创建数据库
指定数据库名和拥有者
数据库创建成功
创建PostgreSQL数据库表
创建学院信息表(COLLEGE)
创建教师信息表(TEACHER)
创建外键约束
创建外键约束的处理
创建check约束
保存后重新编辑
SQL语言
创建数据库
CREATE DATABASE <数据库名>;
例子 :创建名字为CourseDB的数据库
CREATE DATABASE CourseDB;
修改数据库
ALTER DATABASE <数据库名> <修改内容>;
例子 :修改数据库名字
ALTER DATABASE CourseDB RENAME TO CourseManageDB;
删除数据库
DROP DATABASE <数据库名>;
例 删除前面创建的选课管理数据库CourseManageDB
DROP DATABASE CourseManageDB;
数据库表创建
CREATE TABLE <表名>
(<列名1> <数据类型> [列完整性约束],
<列名2> <数据类型> [列完整性约束],
<列名3> <数据类型> [列完整性约束],
…
);
例 选课管理数据库的学生表Student设计需求
字段名称 |
字段编码 |
数据类型 |
字段大小 |
必填字段 |
是否为键 |
学号 |
StudentID |
文本 |
13 |
是 |
主键 |
姓名 |
StudentName |
文本 |
10 |
是 |
否 |
性别 |
StudentGender |
文本 |
2 |
否 |
否 |
出生日期 |
BirthDay |
日期 |
短日期 |
否 |
否 |
专业 |
Major |
文本 |
30 |
否 |
否 |
手机号 |
StudentPhone |
文本 |
11 |
否 |
否 |
CREATE TABLE Student
(StudentID char(13) PRIMARY KEY,
StudentName varchar(10) NOT NULL,
StudentGender char(2) NULL,
BirthDay date NULL,
Major varchar(30) NULL,
StudentPhone char(11) NULL
);
字段名称 |
字段编码 |
数据类型 |
字段大小 |
必填字段 |
是否为键 |
备注 |
课程编号 |
CourseID |
文本 |
4 |
是 |
主键 |
|
课程名 |
CourseName |
文本 |
20 |
是 |
否 |
取值唯一 |
课程类别 |
CourseType |
文本 |
10 |
否 |
否 |
“基础 课”、 “专业 课”、 “选修课” |
学分 |
CourseCredit |
数字 |
短整型 |
否 |
否 |
|
学时 |
CoursePeriod |
数字 |
短整型 |
否 |
否 |
|
考核方式 |
TestMethod |
文本 |
10 |
否 |
否 |
缺省值 “闭卷考 试” |
CREATE TABLE Course
(CourseID char(4) PRIMARY Key,
CourseName varchar(20) NOT NULL UNIQUE,
CourseType varchar(10) NULL CHECK(CourseType IN('基础课','专业课','选修课')),
CourseCredit smallint NULL,
CoursePeriod smallint NULL,
TestMethod char(4) NOT NULL DEFAULT '闭卷考试'
);
表约束定义主键:复合主键,多个主键,约束名自己起名
CREATE TABLE <表名>
( <列名1> <数据类型> [列完整性约束],
<列名2> <数据类型> [列完整性约束],
<列名3> <数据类型> [列完整性约束],
…
CONSTRAINT <约束名> PRIMARY Key(主键列)
);
CREATE TABLE Plan
(
CourseID char(4) NOT NULL,
TeacherID char(4) NOT NULL,
CourseRoom varchar(30),
CourseTime varchar(30),
Note varchar(50),
CONSTRAINT CoursePlan_PK PRIMARY Key(CourseID,TeacherID)
);
表约束定义代理键:代理键,没有实际意义的键,只是一个序号
CREATE TABLE <表名>
( <代理键列名> <Serial数据类型> NOT NULL,
<列名2> <数据类型> [列完整性约束],
<列名3> <数据类型> [列完整性约束],
…
CONSTRAINT <约束名> PRIMARY Key(代理键列名)
);
CREATE TABLE Plan
( CoursePlanID serial NOT NULL,
CourseID char(4) NOT NULL,
TeacherID char(4) NOT NULL,
CourseRoom varchar(30),
CourseTime varchar(30),
Note varchar(50),
CONSTRAINT CoursePlan_PK PRIMARY Key(CoursePlanID)
);
表约束定义外键:外键,其它表的主键
CREATE TABLE <表名>
( <列名1> <数据类型> [列完整性约束],
<列名2> <数据类型> [列完整性约束],
<列名3> <数据类型> [列完整性约束],
…
CONSTRAINT <约束名> FOREIGN Key(外键列)
);
CREATE TABLE Register
( CourseRegID serial NOT NULL,
CoursePlanID Int NOT NULL,
StudentID char(13),
Note varchar(30),
CONSTRAINT CourseRegID_PK PRIMARY Key(CourseRegID),
CONSTRAINT CoursePlanID_FK FOREIGN Key(CoursePlanID)
EFERENCES Plan(CoursePlanID) --当前表CoursePlanID参照Plan表的CoursePlanID
ON DELETE CASCADE, --级联删除,当在开课表中删除,注册表中相关信息一并删除
CONSTRAINT StudentID_FK FOREIGN KEY(StudentID)
REFERENCES Student(StudentID)
ON DELETE CASCADE
);
PS:列完整性约束
列完整性约束关键词
- PRIMARY KEY——主键
- NOT NULL——非空值
- NULL——空值
- UNIQUE——值唯一:作为候选键,选完主键以后,要求唯一的候选键
- CHECK——有效性检查:避免低级错误
- DEFAULT——缺省值
PS:PostgreSQL的数据类型
(1)数字数据类型用于指定表中的数字数据
名称 |
描述 |
存储大小 |
范围 |
smallint |
存储整数,小范围 |
2字节 |
-32768 至 +32767 |
integer |
存储整数。使用这个类型可存 储典型的整数 |
4字节 |
-2147483648 至 +2147483647 |
bigint |
存储整数,大范围。 |
8字节 |
-9223372036854775808 至 9223372036854775807 |
decimal |
用户指定的精度,精确 |
变量 |
小数点前最多为131072个数字; 小数点后 最多为16383个数字。 |
numeric |
用户指定的精度,精确 |
变量 |
小数点前最多为131072个数字; 小数点后 最多为16383个数字。 |
real |
可变精度,不精确 |
4字节 |
6位数字精度 |
double |
可变精度,不精确 |
8字节 |
15位数字精度 |
serial |
自动递增整数 |
4字节 |
1 至 2147483647 |
bigserial |
大的自动递增整数 |
8字节 |
1 至 9223372036854775807 |
(2)字符串数据类型
数据类型 |
描述 |
char(size) |
size是要存储的字符数。固定长度字符串,右边的空格填充到相等大小的字符。 |
character(size) |
size是要存储的字符数。 固定长度字符串。 右边的空格填充到相等大小的字符。 |
varchar(size) |
这里size是要存储的字符数。 可变长度字符串。 |
character varying(size) |
这里size是要存储的字符数。 可变长度字符串。 |
text |
可变长度字符串。 |
(3)日期/时间数据类型
名称 |
描述 |
存储大小 |
最小值 |
最大值 |
精度 |
timestamp [ (p) ] |
日期和时间, |
8字节 |
4713 BC |
294276 AD |
1微秒 |
date |
日期 |
4字节 |
4713 BC |
5874897 AD |
1天 |
time [ (p) ] |
时间(无日期) |
8字节 |
0:00:00 |
24:00:00 |
1微秒 |
interval [ fields ] [ (p) ] |
时间间隔 |
12字节 |
-178000000年 |
178000000年 |
1微秒 |
(4)其他数据类型
名称 |
描述 |
存储大小 |
money |
货币金额 |
8字节 |
boolean |
它指定true或false的状态。 |
1字节 |