命令纪录来自http://www.php100.com/manual/PostgreSQL8/
本机环境ubuntu: adduser postgres # 如果没有超级管理员 增加超级管理员 sudo su - postgres # 登录postgres账户 ALTER USER postgres PASSWORD 'new pwd'; # 修改密码 修改密码后需要重启服务 sudo createdb -e demo -E utf-8 # 创建utf-8数据库 CREATE DATABASE dbname TEMPLATE template0; # 通过拷贝 template0 的方法创建一个数据库 psql # 默认进入当前系统账户同名的数据库 SELECT version(); # 查看版本 SELECT current_date; # 查看当前日期 SELECT current_database() name 当前数据库的名字 SELECT current_schema() name 当前模式的名字 SELECT current_schemas(boolean) name[] 在搜索路径中的模式名字 SELECT current_user name 目前执行环境下的用户名 SELECT inet_client_addr() inet 连接的远端址 SELECT inet_client_port() int 连接的远端端口 SELECT inet_server_addr() inet 连接的本地地址 SELECT inet_server_port() int 连接的本地端口 SELECT session_user name 会话用户名 pg_postmaster_start_time() timestamp with time zone postmaster 启动的时间 user name 等于 current_user version() text PostgreSQL 版本信息 命令结尾 ; # 跟mysql一样 -- # 注释 /* 多行注释 */ + - * / < > = ~ ! @ # % ^ & | ` ? # 操作符 '字符串中有引号的标准兼容方法是连续输入两个单引号''' 或 'abc''但已经不建议使用 q # 退出 l # 查看所有数据库 dt # 查看所有表 i basics.sql # 导入sql psql -d database -h localhost -f test.sql # 导入sql 命令大小写不敏感 通常命令大写 # 创建表 空格 tab 换行符 都可以作为分割 CREATE TABLE tablename( city varchar(80), date date, ); point # 类型的一种 坐标格式 '(1,2)' CREATE TABLE products ( city varchar(80) PRIMARY KEY,-- 主键约束(唯一约束和非空约束) PRIMARY KEY (a,c) -- 主键约束多个字段 product_no integer DEFAULT nextval('products_product_no_seq'),# 自增 缩写 product_no SERIAL, num1 integer DEFAULT 9,-- 缺省 product_no integer UNIQUE,-- 唯一约束 UNIQUE (product_no) -- 唯一约束另外一种写法 UNIQUE (a,c) -- 多字段唯一 name text NOT NULL,--非空约束 price numeric CHECK (price > 0),-- 字段约束 discounted_price numeric CHECK (discounted_price > 0), CHECK (price > discounted_price) -- 表约束 ); 非空约束 删除表 DROP TABLE tablename; 插入数据 # data的插入数据比较灵活 除了数字类型 通常使用单引号包围 INSERT INTO tablename VALUES ('San Francisco','2009-01-01'); INSERT INTO tablename (city,date) VALUES ('San Francisco','1994-11-29'); 批量加入数据COPY COPY tablename FROM '/home/user/tablename.txt'; 查询 SELECT * FROM tablename; # 普通查询 SELECT city FROM tablename; # 查询某列 SELECT city,(num1+num2)/2 AS num FROM tablename; # num1等为可计算变量 num为新别名 SELECT city FROM tablename WHERE city='shanghai' AND data='2008-08-08'; # 常用操作符 AND OR NOT 允许 SELEDCDT * FROM tablename ORDER BY date,city; # 排序 DESC倒续 ASC SELECT DISTINCT city FROM tablename; # 消除重复的行 SELECT table01.city,table02.name FROM table01,table02 WHERE city=name; # 使用table01的city和table02的name联合查询 会自动忽略table02不存在的数据 SELECT * FROM table01 INNER JOIN table02 ON (table01.city = table02.name); SELECT * FROM table01 LEFT OUTER JOIN table02 ON (table01.city = table02.name); # 补齐table02不存在的数据 空替代 SELECT * FROM talble01 LIMIT 2 OFFSET 3; # 两条数据 忽略两条数据 比较操作符 < 小于 > 大于 <= 小于或等于 >= 大于或等于 = 等于 <> 或 != 不等于 CASE 略 给返回的数据建立别名 CASE WHEN a=1 THEN 'one' COALESCE # 详见9.13 NULLIF GREATEST 和 LEAST EXISTS # 详见 9.16 INCREATE DATABASE dbname TEMPLATE template0; NOT IN ANY/SOME ALL 逐行比较 聚合 SELECT max(num1) FROM tablename; #找出num1最大的行 其他有count(数目) sum(求和) min(最小) avg(平均) SELECT city FROM tablename where num1=max(SELECT max(num1) FROM tablename); # 子查询 SELECT city,max(num1) FROM tablename GROUP BY city HAVING max(num1) < 40; # 分组聚合 使用HAVING再次过滤 UPDATE更新 UPDATE tablename set city='tset' WHERE city='beijing'; DELETE删除 DELETE FROM tablename WHERE city='beijing'; LIKE查询 9.7模式匹配 'abc' LIKE 'abc' true 'abc' LIKE 'a%' true 'abc' LIKE '_b_' true 'abc' LIKE 'c' false 视图 复杂查询的别名 可以嵌套 CREATE VIEW myview AS SELECT * FROM tablename; # 创建视图 SELECT * FROM myview; # 查询视图 外键创建 CREATE TABLE cities ( city varchar(80) primary key, location point ); CREATE TABLE weather ( city varchar(80) references cities(city),# city 缺省模式下 引用主键 ... ); 删除一个被引用的数据 例 : city varchar(80) references cities(city) ON DELETE RESTRICT NO ACTION 的意思是如果在检查约束的时候,如果还存在任何引用行,则抛出错误 RESTRICT 禁止删除 CASCADE 删除时 同步删除所有引用的行 SET NULL 删除后 赋值NULL SET DEFAULT 删除后 设置默认值 除了ON DELETE 还有 ON UPDATE 事务 BEGIN; UPDATE accounts SET balance = balance - 100.00 WHERE name = 'Alice'; -- 等等 COMMIT; 5.7.1. 创建一个模式 继承 CREATE TABLE cities ( name text, population real, altitude int -- (单位是英尺) ); CREATE TABLE capitals ( state char(2) ) INHERITS (cities); 继承仅查询单表 SELECT UPDATE DELETE都支持 SELECT * FROM ONLY cities; 修改表 增加字段 ALTER TABLE products ADD COLUMN description text; ALTER TABLE products ADD COLUMN description text CHECK (description <> ''); # 同时增加约束 删除字段 ALTER TABLE products DROP COLUMN description; ALTER TABLE products DROP COLUMN description CASCADE; # 同时删除任何依赖 增加约束 ALTER TABLE products ADD CHECK (name <> ''); ALTER TABLE products ADD CONSTRAINT some_name UNIQUE (product_no); ALTER TABLE products ADD FOREIGN KEY (product_group_id) REFERENCES product_groups; ALTER TABLE products ALTER COLUMN product_no SET NOT NULL;# 增加一个不能写成表约束的非空约束 删除约束 d tablename 交互模式下查找约束 ALTER TABLE products DROP CONSTRAINT some_name; ALTER TABLE products ALTER COLUMN product_no DROP NOT NULL; # 删除非空约束 改变一个字段的缺省值 ALTER TABLE products ALTER COLUMN price SET DEFAULT 7.77; # 不影响已存在字段 ALTER TABLE products ALTER COLUMN price DROP DEFAULT; # 删除 修改一个字段的数据类型 ALTER TABLE products ALTER COLUMN price TYPE numeric(10,2); 给字段改名字 ALTER TABLE products RENAME COLUMN product_no TO product_number; 给表改名字 ALTER TABLE products RENAME TO items; 权限 SELECT,INSERT, UPDATE,DELETE,RULE, REFERENCES,TRIGGER,CREATE, TEMPORARY,EXECUTE,USAGE (ALL 所有权限) 权限到人 GRANT UPDATE ON accounts TO joe; 权限到组 GRANT SELECT ON accounts TO GROUP staff; 删除权限 REVOKE ALL ON kinds FROM manuel; # 废除用户 manuel 对视图 kinds 的所有权限 REVOKE ALL PRIVILEGES ON kinds FROM manuel; # 撤销所有我赋予的权限 模式 创建模式 CREATE SCHEMA myschema; 删除模式 DROP SCHEMA myschema; DROP SCHEMA myschema CASCADE; public # 默认模式 SHOW search_path; # 显示当前模式 创建索引 CREATE INDEX tablename_id_index ON tablename (id);# test1_id_index索引名 id列 CREATE INDEX tablename_mm_idx ON tablename (major,minor); # 多字段索引 CREATE UNIQUE INDEX name ON table (column [,...]); # 唯一索引 索引类型 B-tree,R-tree,Hash 和 GiST 创建rtree类型 CREATE INDEX name ON table USING rtree (column); 部分索引,操作符表和表达式索引 略 并发控制和性能提升技巧 略
错误解决:
1.重复键违反唯一约束
原因:手动插入数据导致自曾主键序列没有改变
解决办法:
查询当前序列:select currval('table_id_seq')
查询已经存在的id最大值
修改序列值为1234:alter sequence table_id_seq restart with 1234 (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|