PostgreSQL是一个开放源代码的对象关系型数据库管理系统(ORDBMS),支持几乎所有的SQL构件(包括子查询、事务、用户定义类型和函数)。
数据库是由一批数据构成有序的集合。这些数据被存放在结构化的数据表里。数据表之间相关互联,,反映了客观事物间的本质联系。、
PostgreSQL,客户端-服务器结构,(C/S结构),是一种网络架构。
服务器是整个应用系统资源的存储与管理中心,多个客户端的请求被传送到数据库服务器,数据库服务器进行处理后,将结果返回客户端,减少网络数据传输量。
PostgreSQL支持热备份技术,该技术是创建、维护和监控一个或者多个主数据库的备用数据库,以保护企业数据不受故障、灾难、错误和崩溃的影响。它通过一个控制中心来完车以上所有的任务。当生产数据库由于计划中断而变得不可用时,数据库热备份可以将任意备用数据库切换到生产角色,从而使与中断相关的停机时间减到最少,并防止数据丢失。
修改数据库的名称
alter database test rename to testdb;
修改数据库拥有者
alter database test owner to postgres1;
删除数据库
drop database test;
数据库在修改数据库名称、删除的时候,以下状态无法操作成功。当数据库处于正在使用状态等的时候。
修改数据库连接最大值
alter database testdb with connection limit=1000;
在创建数据库时,create database后面不能直接加条件,需要配合alter语句进行。这和SQL server有差别。
主键,又称主码,是表中的一列或者多列。
主键约束(Primary Key Constraint)
主键约束要求主键列的数据唯一,并且不允许为空。
1.单字段主键
create table tb1
(
id int ,
name varchar(20),
age int,
primary key(id)
);
2. 多字段联合主键
create table tb1
(
id int ,
name varchar(20),
age int,
primary key(id,name,age)
);
外键约束
外键用来在两个表的数据之间建立连接,可以是一列或者多列。一个表可以有一个或者多个外键。
create table tb_dept1
{
id int primary key,
name varchar(22) not null,
location varchar(50)
}
create table tb_emp5
{
id int primary key,
name varchar(25),
deptid int,
salary float,
constraint fk_emp_dept1 foreign key(depid) references tb_dept1(id);
}
非空约束 not null constraint
指定字段的值不能为空
create table tb_emp6
(
id int primary key,
name varchar(20) not null,
deptid int,
salary float,
constraint fk_emp_dept2 foreign key (deptid) tb_dept1(id)
)
唯一约束 unique constraint
唯一性约束(unique constraint)要求添加该约束的列字段的值唯一,允许为空,但只能出现一个空值。唯一约束可以确保一列或者几列不出现重复值。
create table tb-dept2
(
id int parmary key,
name varchar(20) unique ,
location varchar(20)
)
create table tb_dept3
(
id int primary key,
name varchar(20),
location varchar(20),
constraint sth unique(name)
)
unique 和primary key : 一个表中可以有多个字段声明为unique , 但只能有一个primary key 声明:声明为primary key 的列不允许有空值,但是声明为unique的字段允许空值null的存在。
只能有一个primary key 声明的含义:
以下为错误声明:
create table tb_dept3
(
id int primary key,
name varchar(20) primary key,
location varchar(20),
constraint sth unique(name)
)
这是错的
默认约束 default constraint
指定某列的默认值
语法规则如下:
字段名 数据类型 default 默认值
create table tb_emp7
(
id int primary key,
name varchar(25) not null,
deptid int default 11,
salary float,
constraint fk_emp_deptid3 foreign key (deptid) references tb_dept1(id)
)
修改表名
alter table <旧表名> rename to <新表名>
修改字段的数据类型
alter table <表名> alter column <字段名> type <数据类型>
修改字段名
alter table <表名> rename <旧字段名> to <新字段名>
添加字段
alter table <tablename> add column <newfieldname> <fieldtype>
1. 添加无完整性约束条件的字段
alter table test1 add column usernameid int;
2.添加有完整性约束条件的字段
alter table test1 add column1 varchar(10) not null;
删除字段
alter table <table name> drop <field name>
例子: alter table test1 drop column1;
删除表的外键约束
alter table <table name> drop constraint < 外键约束名>
例子
alter table test1 drop constraint fk_emp_dept;
删除数据表
删除没有被关联的表
drop table 表1,表2....; 同时删除多个表,后面的表名用逗号隔开。
注意:::::如果表名不存在,则会报错
drop table if exists 表1,表2....
加上参数 if exists 后,在删除前判断表是否存在。加上后,再删除表时,如果表不存在,SQL语句可以顺利执行,但是会发出警告
例子:::drop table if exists test1;
删除被其他表关联的主表
数据表之间存在外键关联,如果直接删除父表,结果会显示失败。
原因:直接删除将破坏表的完整参照性。如果必须要删除,可以先删除与之相关联的子表,再删除父表。但是这样同时删除了两个表的数据。
有时候,要保留子表,如果此时要单独删除父表,只需将相关联的表的外键约束条件取消。然后就可以删除父表
修改数据库时候,要注意备份
例子:::::::::
1.创建数据库market
create database market;
2.创建数据库表 customers,在c_num 主键约束,自增约束;c_birth 非空约束
create table public.customers
(
c_num serial primary key,
c_name varchar(50) ,
c_contact varchar(50),
c_city varchar(50),
c_birth date not null
)
3.将 c_name 字段改为varchar(70)
alter table public.customers alter column c_name type varchar(70);
4.将 c_contact 字段改名为c_phone
alter table public.customers rename c_contact to c_phone ;
5.增加 c_gender 字段 数据类型 char(1)
alter table public.customers add column c_gender varchar(1);
6.将表名修改为 customers_info
alter table public.customer rename to customers_info;
7.删除 字段 c_city
alter table public.customers_info drop c_city;
8.创建表 orders ,c_id 添加外键,关联customers_info 中的 c_num
create table public.orders
(
o_num serial primary key not null,
o_date date ,
o_id int,
constraint orders_id_fk foreign key (o_id) references customers_info(c_num)
)
9.删除orders 表的外键约束,然后删除customers_info
alter table public.orders drop constraint orders_id_fk;
drop table customers_info;
原书中出现问题,
原书上定义public.orders 的o_id 字段数据类型为varchar(50) 。
此为外键关联到customers_info 字段 c_num 数据类型为 int ,出现错误..