d
格式:alter table 表名 modify 列名 列的类
演示:alter table users modify mobile char(11)
4、删除一
格式:alter table 表名 drop column 列
演示:alter table users drop column mobile
5、修改表
格式:rename 旧表名 to 新表
演示:rename users to myusers
6.6、表约
一、语
CREATE TABLE 表
列名 列的类型 primary key,--主键约
列名 列的类型 not null,--非空约
列名 列的类型 unique,--唯一约
列名 列的类型 check(列名 in (检查列表)),--检查约
constraint 约束名 foreign key(字段名) references 主表(被引用列)--外键约
)
二、演
--商品分
create table category cid number primary key cname varchar2(20) )
--商品详
create table product pid number primary key,--主键约 pname varchar2(50) not null,--非空约 pimg varchar2(50) unique,--唯一约 pflag varchar2(10) check(pflag in ('上架','下架')),--检查约 cid number constraint FK_CATEGORY_ID foreign key(cid) references category(cid)--外键约 )
三、修
1、主键
alter table product add constraint PK_PRODUCT_PID primary key(pid) 删 alter table product drop constraint PK_PRODUCT_PID 或 alter table product drop primary key
2、非空约
alter table product modify pname not null 删 alter table product modify pname null
3、唯一约
alter table product add constraint UK_PRODUCT_PIMG unique(pimg) 删 alter table product drop constraint UK_PRODUCT_PIMG 或 alter table product drop unique(pimg)
4、检查约
alter table product add constraint CK_PRODUCT_PFLAG check(pflag in ('上架','下架')) 删 alter table product drop constraint CK_PRODUCT_PFLAG
5、外键约
alter table product add constraint FK_PRODUCT_ID foreign key(cid) references category(cid) 删 alter table product drop constraint FK_PRODUCT_ID
第七章 DML语
7.1、插入语
格式:insert into 表名(列名1,列名2,...) values(值1,值2,...)
演示:insert into category(cid,cname) values(1,'电视')
注意:commit
7.2、修改语
格式:update 表名 set 列名1=值1,列名2=值2,... where 查询条件
演示:update category set cname='汽车' where cid = 1
注意:commit
7.3、删除语
格式:delete from 表名 where 查询条件
演示:delete from category where cid = 1
注意:commit
第八章 TCL语
8.1、事
一、含
一条或多条sql语句组成一个执行单位,一组sql语句要么都执行要么都不
二、特点(ACI
原子性:一个事务是不可再分割的整体,要么都执行要么都不
一致性:一个事务的执行不能破坏数据库数据的完整性和一致
隔离性:一个事务不受其它事务的干扰,多个事务是互相隔离
持久性:一个事务一旦提交了,则永久的持久化到本
三、分
1、开启
Oracle 11g中事务是隐式自动开始的,它不需要用户显示的执行开始事务语
2、编写一组逻辑sql
注意:sql语句支持的是insert、update、delet
【设置回滚
savepoint 回滚点名
3、结束
提交:commit
回滚:rollback
回滚到指定的地方: rollback to 回滚点名
8.2、事务并发(读问题)
一、事物的并发问题如何发生
多个事务同时操作同一个数据库的相同数
二、事务的并发问题都有哪
脏读:一个事务读到了另一个事务还未提交的update数据,导致多次查询的结果不一样(Oracle中不会产
不可重复读:一个事务读到了另一个事务已经提交的update数据,导致多次查询结果不一
幻读:一个事务读到了另一个事务已经提交的insert数据,导致多次查询的结果不一
三、事物的并发问题如何解决
通过设置隔离级别来解决并发
四、隔离
Oracle中只支持READ COMMITTED、SERIALIZABLE、READ ONLY、READ WRITE,这些语句是互斥的,不能同时设置两个或两个以上的选项,一般默认即
8.3、丢失更新(写问
一、定
在事务的隔离级别内容中,能够了解到两个不同的事务在并发的时候可能会发生数据的影响。细心的话可以发现事务隔离级别章节中,脏读、不可重复读、幻读三个问题都是由事务A对数据进行修改、增加,事务B总是在做读操作。如果两事务都在对数据进行修改则会导致另外的问题:丢失更
二、
悲观锁:认为两个事务更新操作一定会发生丢失
解决:通过在语句后边添加for update来实现行级上锁,所以又称为“行级锁”,例如:select * from t_account t wheret.id=‘1’ for update
乐观锁:认为事务不一定会产生丢失更新,让事务进行并发修改,不对事务进行锁
解决:由程序员自己解决,可以通过给数据表添加自增的version字段或时间戳timestamp,进行数据修改时,数据库会检测version字段或者时间戳是否与原来的一致,若不一致,抛出异常或者重新查
三、注
对于账户交易建议直接使用悲观锁,数据库的性能很高,并发度不是很高的场景两者性能没有太大差别。如果是交易减库存的操作可以考虑乐观锁,保证并发
第九章 高级
9.1、序
一、含
序列是Oracle数据库中特有的,使用序列可以生成类似于 auto_increment 这种ID自动增长 1,2,3,4,5… 的
二、
create sequence 序列 start with 从几开 increment by 每次增长多 [maxvalue 最大值] | nomaxvalu [minvalue 最小值] | nominvalu cycle | nocycle --是否自动循 [cache 缓存数量] | nocache
三、演
1--创建
create sequence auto_increment_se start with increment by nomaxvalu minvalue nocycl cache 10000 --调用 select auto_increment_seq.nextval from dual select auto_increment_seq.currval from dual
9.2、PLSQL编
9.2.1、格
declar --声明变 begi --业务逻 en
9.2.2、变
declar
--声明变
-- 格式一:变量名 变量类型
-- 格式二:变量名 变量类型 := 初始值
-- 格式三:变量名 变量类型 := &文本框名
-- 格式四:变量名 表名.字段名%type
-- 格式五:变量名 表名%rowtype
vnum number vage number := 28 vabc number := &abc;--输入一个数值,从一个文本框输 vsal emp.sal%type; --引用型的变量,代表emp.sal的类 vrow emp%rowtype; --记录型的变量,代表emp一行的类型 begi --业务逻 dbms_output.put_line(vnum); --输出一个未赋值的变 dbms_output.put_line(vage); --输出一个已赋值的变 dbms_output.put_line(vabc); --输出一个文本框输入的变 select sal into vsal from emp where empno = 7654; --将查询到的sal内容存入vsal并输 dbms_output.put_line(vsal) select * into vrow from emp where empno = 7654; --将查询到的一行内容存入vrow并输出 dbms_output.put_line(vrow.sal) dbms_output.put_line(123); --输出一个整 dbms_output.put_line(123.456); --输出一个小数 dbms_output.put_line('Hello,World'); --输出一个字符 dbms_output.put_line('Hello'||',World'); --输出一个拼接的字符串,||拼接符Oracle特 dbms_output.put_line(concat('Hello',',World')); --输出一个拼接的字符串,concat函数比较通 end
9.2.3、if判
一、语
if 条件1 th elsif 条件2 the else end if
二、演
decla age number := &age begi if age < 18 the dbms_output.put_line('小屁孩') elsif age >= 18 and age <= 24 the dbms_output.put_line('年轻人') elsif age > 24 and age < 40 the dbms_output.put_line('老司机') els dbms_output.put_line('老年人') end if end
9.2.4、while循
一、语
while 条件 lo
end loop
二、演
--输出1~ declar i number := 1 begi while i <= 10 loo dbms_output.put_line(i) i := i + 1 end loop end
9.2.5、for循
一、语
for 变量 in [reverse] 起始值..结束值 lo
end loop
二、演
--输出1~ declar beg for i in reverse 1 .. 10 loo dbms_output.put_line(i) end loop end
9.2.6、loop循
一、语
lo exit when 条 end loop
二、演
--输出1~ declar i number := 1 begi loo exit when i > 10 dbms_output.put_line(i) i := i + 1 end loop end
9.2.7、意
一、含
意外是程序运行的过程发生的异常,相当于是Java中的
二、
decla --声明变 begi --业务逻 exceptio --处理异 when 异常1 the .. when 异常2 the .. when others the ...处理其它异 end
三、分
系统
zero_divide :除数为零 value_error :类型转换异 no_data_found : 没有找到数 too_many_rows : 查询出多行记录,但是赋值给了%rowtype一行数据变 自定义异 decla --声明变 异常名称 exception begi --业务逻 if 触发条件 the raise 异常名称; --抛出自定义的异 exceptio --处理异 when 异常名称 the dbms_output.put_line('输出了自定义异常'); when others the dbms_output.put_line('输出了其它的异常'); end