PostgreSQL学习笔记

一、安装

Centos:

添加RPM:

-- centos 6 安装 postgresql 10

yum install https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-6-x86_64/pgdg-centos10-10-2.noarch.rpm

 

-- centos 7 安装 postgresql  10

yum install https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/pgdg-centos10-10-2.noarch.rpm

安装客户端:

yum install postgresql10

安装服务端:

yum install postgresql10-server

初始化数据库:

Postgresql安装目录是/usr/pgsql-10,而Postgresql的数据目录是/var/lib/pgsql/版本号/data目录

在这里,如果在装系统开始分配var空间足够大则可以继续,如果分配var空间不够,我们需要更改数据目录,在这里,我们假设var空间足够大。直接开始初始化。

/usr/pgsql-10/bin/postgresql-10-setup initdb

启动数据并设置开机启动:

sudo systemctl start postgresql-10

sudo systemctl enable postgresql-10.service

二、创建用户和数据库

# su - postgres -- 切换到postgres(默认用户)

-bash-4.2$ psql  -- 进入数据库
psql (10.7)
Type "help" for help

创建用户:

postgres=# create user username with password '****';

CREATE ROLE

修改密码:

postgres=# ALTER USER postgres WITH PASSWORD '***';
ALTER ROLE

将数据库得权限,全部赋给某个用户

postgres=# grant all on database dbtest to username; -- 将dbtest所有权限赋值给username

GRANT

导入整个数据库

psql -U username databasename < /data/dum.sql -- 用户名和数据库名

$ su - postgres   #切换账号
$ psql --version     #psql版本信息
$ psql -l            #查看databases列表
$ createdb test      #创建test库
$ psql test          #进入test库
> help               #帮助信息
> \h
> \?
> \l
> \x                 #翻转显示
> \q                 #退出数据库
> select now();      #当前时间
> select version();  #系统及版本信息
$ dropdb test        #删除test库

三、操作表单

> create table posts (title varchar(255), content text);   #创建表
> \dt                                                      #展示所有表
> \d posts                                                 #建表信息
> alter table posts rename to testposts;                   #修改表名
> drop table komaposts;                                    #删除表

$ vim db.sql                                               #编写表文件
... 
create table posts (title varchar(255), content text);
...                                          
> \i db.sql                                                #使用表文件建表

四、字段类型

常用字段

  • 数值型:
    • integer(int)  整型 
    • real 浮点
    • serial 整型序列
  • 文字型:
    • char 定长字符
    • varchar 限长字符
    • text 不定字符
  • 布尔型:
    • boolean
  • 日期型:
    • date
    • time
    • timestamp
  • 特色类型:
    • Array
    • 网络地址型(inet)
    • JSON型
    • XML型

    

约束条件:

not null:不能为空
unique:在所有数据中值必须唯一
check:字段设置条件
default:字段默认值
primary key(not null, unique):主键,不能为空,且不能重复

五、语句

INSERT语句:

test=# insert into posts (title,content) values ('title1','content1');
INSERT 0 1

 

SELECT语句:

> select * from users;
> select player, score from users;

WHERE语句

使用where语句来设定select,update,delete语句数据抽出的条件。

select player,score from users where score>30;

select player,score from users where score!=30;

select * from users where score > 20 and score < 30;

test=# select * from users where player like '阿_';

test=# select * from users where player like '阿%';

数据抽出选项

select语句在抽出数据时,可以对语句设置更多的选项,已得到想要的数据。

  • order by
  • limit
  • offset
select * from users order by score asc;        #升序
select * from users order by score desc;       #降序
select * from users order by team;
select * from users order by team, score;
select * from users order by team, score desc;
select * from users order by team desc, score desc;
select * from users order by score desc limit 3;              #行数
select * from users order by score desc limit 3 offset 1;     #位置偏移
select * from users order by score desc limit 3 offset 2;
select * from users order by score desc limit 3 offset 3;

统计抽出数据

  • distinct                          #去重
  • sum
  • max/min
  • group by/having            #组合使用
select distinct team from users;
select sum(score) from users;
select max(score) from users;
select min(score) from users;
select * from users where score = (select max(score) from users);
select * from users where score = (select min(score) from users);
select team, max(score) from users group by team;
select team, max(score) from users group by team having max(score) >= 25;
select team, max(score) from users group by team having max(score) >= 25 order by max(score);

方便的函数

  • length                  #字段长度
  • concat                 #连接多个字符串
  • alias                    #as别名
  • substring             #分割字符串
  • random               #随机数(0~1)
select player, length(player) from users;
select player, concat(player, '/', team) from users;
select player, concat(player, '/', team) as "球员信息" from users;
select substring(team, 1, 1) as "球队首文字" from users;
select concat('我', substring(team, 1, 1)) as "球队首文字" from users;
select random();
select * from users order by random();
select * from users order by random() limit 1;

更新和删除

  • update [table] set [field=newvalue,...] where ...
  • delete from [table] where ...
update users set score = 29.1 where player = '阿詹';
update users set score = score + 1 where team = '勇士';
update users set score = score + 100 where team IN ('勇士', '骑士');
delete from users where score > 30;

变更表结构

  • alter table [tablename] ...
  • create index ...
  • drop index ...
> alter table users add fullname varchar(255);
> alter table users drop fullname;
> alter table users rename player to nba_player;
> alter table users alter nds_player type varchar(100);
> create index nba_player_index on users(nba_player);
> drop index nba_player_index;

操作多个表

> select users.player, twitters.content from users, twitters where users.id = twitters.user_id;
> select u.player, t.content from users as u, twitters as t where u.id = t.user_id;
> select u.player, t.content from users as u, twitters as t where u.id = t.user_id and u.id = 1;

视图概念

视图(View)是从一个或多个表导出的对象。视图与表不同,视图是一个虚表,即视图所对应的数据不进行实际存储,数据库中只存储视图的定义,在对视图的数据进行操作时,系统根据视图的定义去操作与视图相关联的基本表。

视图就是一个SELECT语句,把业务系统中常用的SELECT语句简化成一个类似于表的对象,便于简单读取和开发。

  • 使用数据库视图(view)
    • create view ...
    • drop view ...
create view curry_twitters as select u.player, t.content from users as u, twitters as t where u.id = t.user_id and u.id = 1;
\dv           #全部视图
\d curry_twitters
select * from curry_twitters;
drop view curry_twitters;

使用事务

数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。一个逻辑工作单元要成为事务,必须满足所谓的ACID(原子性、一致性、隔离性和持久性)属性。事务是数据库运行中的逻辑工作单位,由DBMS中的事务管理子系统负责事务的处理。

  • PostgreSql数据库事务使用
    • begin
    • commit
    • rollback
select * from users;
begin;
update users set score = 50 where player = 'bob';
update users set score = 60 where player = 'tom';
commit;
select * from users;
begin;
update users set score = 0 where player = 'bob';
update users set score = 0 where player = 'tom';
rollback;
select * from users;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值