下面的步骤都是在windowsxp下完成的
1.安装
下载postgresql-9.0.3-2-windows.exe http://www.enterprisedb.com/products-services-training/pgdownload#windows
安装时记得设置的密码,默认用户postgres,密码:xxxxxxx
提示默认安装的语言,别选default,我选择的是c
测试是否安装成功
先启动服务(开始-》控制面板-》管理工具-》服务-》postgresql-9.0)
通过postgre的图形界面工具pgAdmin III,可选中安装时创建的数据库(我创建的叫testDB),右键选择“连接”,输入密码即可看到数据库已经连接上
也可通过postgre的命令行交互工具psql,psql -U postgres mydb
帮助psql --help
创建表
CREATE TABLE weather (
city varchar(80),
temp_lo int, -- low temperature
temp_hi int, -- high temperature
prcp real, -- precipitation
date date
);
“--”/*为注释
CREATE TABLE cities (
name varchar(80),
location point
);
point为PostgreSQL特有的类型
删除表DROP TABLE tablename;
插入数据
INSERT INTO weather VALUES ('San Francisco', 46, 50, 0.25, '1994-11-27');
INSERT INTO cities VALUES ('San Francisco', '(-194.0, 53.0)');
可以明确列出列名(很多人认为这是一种良好的编程风格)
INSERT INTO weather (city, temp_lo, temp_hi, prcp, date)
VALUES ('San Francisco', 43, 57, 0.0, '1994-11-29');
可以颠倒列的的顺序甚至遗漏某些列
INSERT INTO weather (date, city, temp_hi, temp_lo)
VALUES ('1994-11-29', 'Hayward', 54, 37);
可使用copy命令批量插入数据
COPY weather FROM '/home/user/weather.txt';
查询
SELECT * FROM weather;
SELECT city, temp_lo, temp_hi, prcp, date FROM weather;
SELECT city, (temp_hi+temp_lo)/2 AS temp_avg, date FROM weather;
SELECT * FROM weather ORDER BY city; (desc,asc)
SELECT * FROM weather ORDER BY city, temp_lo;
SELECT DISTINCT city FROM weather;
联合表查询Join
SELECT *
FROM weather, cities
WHERE city = name;
如果两个表中有相同字段,请指明
SELECT weather.city, weather.temp_lo, weather.temp_hi,
weather.prcp, weather.date, cities.location
FROM weather, cities
WHERE cities.name = weather.city;
内连接什么的,此处略。。
统计函数
SELECT max(temp_lo) FROM weather;
SELECT city FROM weather
WHERE temp_lo = (SELECT max(temp_lo) FROM weather);
SELECT city, max(temp_lo)
FROM weather
GROUP BY city;
SELECT city, max(temp_lo)
FROM weather
GROUP BY city
HAVING max(temp_lo) < 40;
SELECT city, max(temp_lo)
FROM weather
WHERE city LIKE 'S%'(1)
GROUP BY city
HAVING max(temp_lo) < 40;
更新
UPDATE weather
SET temp_hi = temp_hi - 2, temp_lo = temp_lo - 2
WHERE date > '1994-11-28';
删除
DELETE FROM weather WHERE city = 'Hayward';
视图
CREATE VIEW myview AS
SELECT city, temp_lo, temp_hi, prcp, date, location
FROM weather, cities
WHERE city = name;
SELECT * FROM myview;
外键
CREATE TABLE cities (
city varchar(80) primary key,
location point
);
CREATE TABLE weather (
city varchar(80) references cities(city),
temp_lo int,
temp_hi int,
prcp real,
date date
);
事务
一次事务的要点就是它把多个步骤捆绑成了一个单一的,要么全部成功要么全部失败 ,PostgreSQL 实际上把每个 SQL 语句当做在一个事务中执行的来看待。
BEGIN;
UPDATE accounts SET balance = balance - 100.00
WHERE name = 'Alice';
-- 等等
COMMIT;
一组包围在 BEGIN 和 COMMIT 语句中间的语句有时候被称做事务块。
使用 savepoints 的方法,在一个事务里更加精细地控制其中的语句。 保存点允许你有选择性地抛弃事务中的某些部分,而提交其它剩下的。
eg:假设我们从 Alice 的帐户上消费 $100.00, 然后给 Bob 的帐户进行贷记加款,稍后我们发现我们应该给 Wally 的账号贷记加款。 那么我们可以像下面这样的保存点来做:
BEGIN;
UPDATE accounts SET balance = balance - 100.00
WHERE name = 'Alice';
SAVEPOINT my_savepoint;
UPDATE accounts SET balance = balance + 100.00
WHERE name = 'Bob';
-- 呀!加错钱了,应该用 Wally 的账号
ROLLBACK TO my_savepoint;
UPDATE accounts SET balance = balance + 100.00
WHERE name = 'Wally';
COMMIT;
继承
eg:个表 cities
和一个表 capitals
$$Dianne's horse$$ eg:$function$ $SomeTag$Dianne's horse$SomeTag$ eg:$q$[/t/r/n/v//]$q$
数值常量
位串常量CREATE TABLE cities (
name text,
population real,
altitude int -- (单位是英尺)
);
CREATE TABLE capitals (
state char(2)
) INHERITS (cities);
SELECT name, altitude
FROM ONLY cities
WHERE altitude > 500;
cities 前面的 ONLY 指示系统只对cities
表运行查询,而不包括继承级别中低于cities
的表(SELECT, UPDATE 和 DELETE 均支持这种用法)
SQL 标识符和关键字必须以一个字母开头 (a-z 以及带可区别标记的字母以及非拉丁字母 )或下划线开头 (_)开头。标识符和关键字里
随后的字符可以是字母,数字(0-9), 或者下划线,但 SQL 标准不会定义包含数字或者以下划线开头或结尾的关键字。
常量
字符串常量中嵌入单引号的标准兼容的做法是敲入两个连续的单引号比如,'Dianne''s horse'。
两个只是通过至少有一个换行符的空白分隔的字符串常量会被连接在一起,并当做它们是写成一个常量处理。 比如:
SELECT 'foo'
'bar';
等效于
SELECT 'foobar';
而
SELECT 'foo' 'bar';
是非法的语法,
美元符包围字串常量
有更详细的,见其它人的
http://blogold.chinaunix.net/u1/42517/article_74182.html
或