postgresql
公司放弃了mysql使用postgresql,入个门,和前面一样还是postgres和pgadmin都是部署在docker中,操作很方便。
1. 常用操作
创建一个数据库
createdb name
进入数据库
> psql name
创建一个表
> create table name(title varchar(255),con text)
查看表描述,看表详细信息
> \dt
查看表结构
> \d name
退出
> \q
docker环境启动POSTGRESQL并导入SQL文件
要先sql文件拷贝到容器中
> docker cp db.sql 5159e148fbd0:/
然后在执行
进入数据库执行
> \i db.sql
不用进入
若是执行的命名只是创建用户,编辑用户,创建数据库的话可以不指定-d参数。
> psql -U username -d myDataBase -a -f db.sql
如果是远程数据库加入-h参数指定主机地址即可
> psql -h host -U username -d myDataBase -a -f db.sql
删除表
> drop table posts;
删库
dropdb name
删除时候有链接就断开其他链接。
SELECT pg_terminate_backend(pg_stat_activity.pid)
FROM pg_stat_activity
WHERE datname='kom' AND pid<>pg_backend_pid();
2. 字段类型
- 数值型:
- integer(int) 整型
- real 浮点型
- serial 序列性----->自增序列
- 文字型:
- char
- varchar
- text 大文本
- 布尔型:
- boolean
- 日期型:
- date 年月日
- time 时分秒
- timestamp 年月日时分秒
- 特色类型:
- Array 数组型
- 网络地址型(inet) ip地址
- JSON型
- XML型
3. 添加表约束
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):主键,不能为空,且不能重复
*/
4.常用sql操作
select * from users limit 1 OFFSET 5; 从5开始取一个
其他的查询都符合sql语法
5.函数
> 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; --打乱表取第一个
6.表结构的变更
添加表字段
> 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;
7.使用视图
视图就是一个SELECT语句,把业务系统中常用的SELECT语句简化成一个类似于表的对象,便于简单读取和开发。
> select u.player, t.content from users as u, twitters as t where u.id = t.user_id and u.id = 1;
创建视图
> 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;
> \d curry_twitters
> select * from curry_twitters;
删除视图
> drop view curry_twitters;
8.事务
> select * from users;
> begin;
> update users set score = 50 where player = '库里';
> update users set score = 60 where player = '哈登';
> commit;
> select * from users;
> begin;
> update users set score = 0 where player = '库里';
> update users set score = 0 where player = '哈登';
> rollback;
> select * from users;