1.什么是PostgreSql?
PostgreSQL 是一个自由的对象-关系数据库服务器(数据库管理系统),是从伯克利写的 POSTGRES 软件包发展而来的。经过十几年的发展, PostgreSQL 是世界上可以获得的最先进的开放源码的数据库系统, 它提供了多版本并发控制,支持几乎所有SQL语句(包括子查询,事务和用户定义类型和函数),并且可以获得非常广阔范围的(开发)语言绑定 (包括C,C++,Java,perl,python,php,nodejs,ruby)。
知识点
面向关系的数据库
+ Oracle
+ MySql
+ SQLServer
+ PostgreSql
NoSql
+ MongoDB
+ Redis
数据库排名
https://db-engines.com/en/ranking
官方网站
2.安装
使用环境
psql (PostgreSQL) 12.5 (Ubuntu 12.5-0ubuntu0.20.04.1)
$ sudo apt-get install postgresql | ubuntu安装postgresql |
$ sudo su postgres | 切换到postgres用户 |
$ psql --version | 查看postgresql的版本 |
$ psql -l | 查看数据库列表 |
$ createdb test01 | 创建数据库 |
$ psql test01 | 切换到test01数据库 |
test01=# \q | 退出test01数据库 |
$ dropdb test01 | 删除数据库test01 |
查看帮助信息
test01=# help
You are using psql, the command-line interface to PostgreSQL.
Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit
3.操作数据表
# create table postg(title varchar(255),content text); | 创建表 |
# \dt | 查看该库下面的表 |
# \d postg | 查看postg表的详细信息 |
# alter table postg rename to mypostg; | 更改表名 |
# drop table mypostg; | 删除表 |
# \i /home/cong/桌面/test01/test01.sql | 执行sql脚本 |
alter table users add fullname varchar(255); # 加字段
alter table users drop fullname; # 删字段
alter table users rename player to nba_player; # 重命名字段
alter table users alter nba_player type varchar(100); # 改变字段类型
create index nba_player_index on users(nba_player); # 创建索引
drop index nba_player_index; #删除索引
4.PostgreSql的基础数据类型
* 数值型:
+ integer(int)
+ real
+ serial
* 文字型:
+ char
+ varchar
+ text
* 布尔型:
+ boolean
* 日期型:
+ date
+ time
+ timestamp
* 特色类型:
+ Array
+ 网络地址型(inet)
+ JSON型
+ XML型
5.表子段的约束条件
create table posts (
id serial primary key,
title varchar(255) not null,
content text check(length(content) > 8),
is_draft boolean default TRUE,
is_del boolean default FALSE,
created_date timestamp default 'now'
);
-- 说明
/*
约束条件:
not null:不能为空
unique:在所有数据中值必须唯一
check:字段设置条件
default:字段默认值
primary key(not null, unique):主键,不能为空,且不能重复
*/
6.DML
插入
insert into [tablename] (field, ...) values (value, ...);
insert into [tablename] (field, ...) values (value, ...),(value1, ...),...;
更新
update [table] set [field=newvalue,...] where ...
物理删除
delete from [table] where ...
7.DQL
create table users (
id serial primary key,
player varchar(255) not null,
score real,
team varchar(255)
);
insert into users (player, score, team) values
('库里', 28.3, '勇士'),
('哈登', 30.2, '火箭'),
('阿杜', 25.6, '勇士'),
('阿詹', 27.8, '骑士'),
('神龟', 31.3, '雷霆'),
('白边', 19.8, '热火');
select * from users;
select player, score from users;
where语句的使用
使用where语句来设定select,update,delete语句数据抽出的条件。
select * from users;
select * from users where score > 20;
select * from users where score < 30;
select * from users where score > 20 and score < 30;
select * from users where team = '勇士';
select * from users where team != '勇士';
select * from users where player like '阿%';
select * from users where player like '阿_';
分页查询
order by [ASC|DESC]
limit #要取得记录条数
offset #不写默认为0
select * from users order by score desc limit 3 offset 1; # 第二位开始取三条数据
distinct/sum/max/min/group by/having # 与mysql用法一样
8.常见函数
length/concat/alias/substring # 和mysql一样用法
random() # 0~1随机数
order by random() # 随机排序
order by random() limit 1 # 随机取一条数据;
9.视图
视图(View)是从一个或多个表导出的对象。视图与表不同,视图是一个虚表,即视图所对应的数据不进行实际存储,数据库中只存储视图的定义,在对视图的数据进行操作时,系统根据视图的定义去操作与视图相关联的基本表。
视图就是一个SELECT语句,把业务系统中常用的SELECT语句简化成一个类似于表的对象,便于简单读取和开发。
* 使用数据库视图(view)
create view ...
drop view ...
\dv | 查看所有视图 |
\d | 查看视图的表结构 |
10.事务
数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。一个逻辑工作单元要成为事务,必须满足所谓的ACID(原子性、一致性、隔离性和持久性)属性。事务是数据库运行中的逻辑工作单位,由DBMS中的事务管理子系统负责事务的处理。
begin 开启事务
commit 提交事务
rollback 回滚事务
begin;
update users set score = 50 where player = '库里';
update users set score = 60 where player = '哈登';
commit;