目录
4. 选择语句:SELECT + 表字段名 + FROM +数据表名+ WHERE + 筛选条件
一、DDL语句(操作表结构)
1. 创建数据库、表
CREATE DATABASE mybase;
--查看所存在的所有数据库
postgres=# \l
--进入所创建的数据库
\c mybase
--在mybase数据库中创建表student
CREATE TABLE student;
2. 增加表中属性:ALTER
ALTER TABLE student ADD ssex varchar(2);
3. 对性别的约束(枚举):CHECK()、IN
ALTER TABLE student ADD ssex varchar(2) CHECK(ssex IN('男', '女'));
4. 属性的初始值预设:DEFAULT
ALTER TABLE student ADD Totalcredit smallint DEFAULT 0;
5. 显示整张表
\\\\d student
6. 外键:references(需要先创建主表)
postgres=# ALTER TABLE STUDENT ADD classno varchar(6) references CLASS(classno);
8. 修改列名、列的数据类型
--RENAME COLUMN __ TO
ALTER TABLE student RENAME COLUMN sname TO name;
--ALTER COLUMN __ TYPE __
ALTER TABLE STUDENT ALTER COLUMN addr TYPE varchar(25);
9. 增加、删除表中行数据
INSERT INTO STUDENT VALUES({values1},{values2},···);
DELETE FROM STUDENT WHERE {column}={value};
10. 检查字段:LIKE
--'李%' 筛选以'李'开头的数据
--'%李%' 筛选包含'李'的数据
二、DML语句(操作表数据)
1. insert插入语句
--插入一行值
insert into table(sno,sname,ssex)
values('18301001','czm','male')
--从其他表赋值多行
insert into table
(select ...)
2. update更新语句
update tablename
set columnName = newValue
(where {condition}) --指定行更新
--使用子查询更新(STAFF、Branch两个表不能并列写在更新列,只能用子查询)
update STAFF
set salary = salary*1.03
where branchNo in (select branchNo from Branch)
3. delete删除语句
delete from tablename
(where ...) --加where:删除指定行
4. 选择语句:SELECT + 表字段名 + FROM +数据表名+ WHERE + 筛选条件
SELECT ssex,sno,sname,sbirthday FROM STUDENT WHERE ssex = '男';
三、存储过程
事先编译好、储存在数据库中的程序,用这些程序完成对数据库的操作
1. 创建存储过程
--1. 函数头、形参
CREATE OR REPLACE PROCEDURE transfer
(inAccount INT, outAccount INT, amount FLOAT)
--定义存储过程transfer(函数名),其参数为:(转入账户、转出账户、转账金额),类似形参
--2. 定义变量
IS (AS DECLARE)
balance Float; -- 存放金额的局部变量,类似函数的局部变量
--3. 函数主体
BEGIN
--3.1 检查账户合法性
SELECT Total INTO balance -- 把余额转出赋值balance
FROM Account
WHERE accountnum=outAccount;
IF balance IS NULL THEN
ROLLBACK; -- 回滚事务
RETURN;
ENDIF;
IF balance < amount THEN
ROLLBACK;
RETURN;
END IF;
2. 调用/删除存储过程
格式:CALL/PROFORM PROCEDURE 存储过程名([参数1, 参数2,...]);
--例如:从账户01003813828转10000元到另一个账户01003815868中
CALL PROCEDURE transfer(01003813828, 01003815868, 10000);
/EXEC transfer(01003813828, 01003815868, 10000);
--删除存储过程
DROP PROCEDURE transfer();
--plsql
declare
v_cname VARCHAR(10);
v_cno in student.cno%TYPE;
begin
select cname, cno into v_cname, v_cno
from student;
end;
--1.if语句
if v_came="aaaa"
then
--blabal;
elsif
--blabla;
end if;
--2. 循环
--2.0 基本循环
loop
exit when count > 0; --退出循环标志
if a > 3
then exit;
end if;
end loop;
--2.1 for循环
for a in 1..50 loop
end loop;
--2.2 while循环
while a > 4 loop
end loop;
--2.3 go to块
go to this;
<<this>>
--异常处理
declare
my_error exception;--自定义异常
begin
if ... then
raise my_error;--自定义抛出异常
--捕获系统异常
when no_data_found then
...;
when ...then
...;
--捕获自定义异常
when my_error then
...;
--"游标"
declare
cursor c1 is select a, b from student;
begin
open c1;
loop
fetch c1 into v1,v2;
exit when c1%notfound;
insert into table() values();
end loop;
--存储过程
create or replace procedure p1(
--形参
v1 in student.cno%TYPE;
v2 in...;
)
is
local FLOAT;--局部变量
begin
...
end;
--调用存储过程
exec p1(a,b);
四、触发器
create or replace TRIGGER t1
before insert or update or delete on table1
for each row
when (new.job = 'salman')
declare
a in student.sno%TYPE:=4;
begin
a:= :old.sno;
end;
alter table a alter column sno type char
alter table a rename column sno to s