文章之类
date;
create table stu
(
id number(9) default 1,//设置一个默认值
name varchar2(20) not null//设置为非空,必须输入名字.
);
insert into stu(id) values(1);报错
30,transaction 事务
commit;提交事物完成 rollback回不去了;
create table grand exit之类 事务也提交一样rollback不回去;
非正常断开连接自动回滚;
31,constraint
1)非空约束
create table stu
(
id number(9) default 1,//设置一个默认值
name varchar2(20) constraint stu_name_nn not null
);
//设置为非空,必须输入名字.
使用constraint 关键字为限制取一个名字
2)唯一约束,例如学号必须唯一
create table stu
(
id number(9) unique,//设置一个默认值
name varchar2(20),
date date;
);
学号重复则报错
create table stu
(
id number(9) unique,//设置一个默认值
name varchar2(20),
date date,
email varchar2(50),
constraint stu_name_email unique(name, email)
);
组合重复约束,如果名字和邮件地址都重复才重复
3)主键约束
create table stu
(
id number(9) unique,
name varchar2(20),
sdate date,
email varchar2(50),
constraint saaa primary key (id)
);
唯一且不能为空
4)外键约束 设计到两张表或者一张表的两个字段
例如dept这张表里的deptno里面没有50这个部门,那么在emp里面插入数据就不能插入50这个部门编号
用法
create table class
(
id number(1) primary key
)
create table stu
(
id number(9) unique,
class number(1) references class(id)//class是表的名字
)
另一种写法,表限制
create table stu
(
id number(9) unique,
class number(1),
contraint sss foreign key(class) references class(id)
)
重要:被references的值必须是主键
如果另一张表有值在参考class 则不能删除class里的这条记录
5)check
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CHECK (Id_P>0)
)
Id_P>0咯不解释
32,
函数返回表中的记录数:
SELECT COUNT(*) FROM table_name;
select count(xxx)from tab;--返回制定列的值的数目
33,alter
修改表结构,不是很重要
增加不解释
alter table stu add(aaa varchar2(22));
删除
alter table stu drop(aaa);
修改
alter table stu modify(aaa varchar2(33));
删除添加表的约束条件
删除
alter table stu drop constraint xxx;
添加
alter table stu add constraint xxx foreign key(class) references class(id);
alter table stu add check(id>0);
之类
34,查看数据字典表
有一张默认的表 user_tables
select table_name from user_tables;
select view_name from user_views;
select constraint_name from user_constraints;
select index_name from user_indexes;
存放数据字典表的表 dictionary
35,indexs
建立索引,读数据的时候更快,修改的时候会更慢一点.一般不轻易建立索引.
create index idx_stu_email on stu (email);
36,视图
就是一个虚表,可以看做是一个子查询.可以简化查询和保护数据
create view v$_stu_info as select id, name, class from stu;SS
37,sequence序列 orcle only
创建一个独一无二自动递增的数字
create sequence seq;
select seq.nextval from dual;
会发现每次运行都产生不一样的数字,默认已经包含同步了
38,三范式
1有主键 列不可分
2当一张表里有多个主键存在时,不能依赖于单独的主键
不能部分依赖,要依赖于组合的主键.不然会存在数据的冗余
3不存在传递依赖
一般设计良好的数据库SQL语句写起来就会麻烦一些
39,PL_SQL
1-第一个简单的hello world程序
BEGIN
DBMS_OUTPUT.PUT_lINE('HELLO WORLD');
END;
要显示需要设置默认显示set serveroutput on;默认是关闭的
2-声明变量declare
declare
v_name varchar2(20);--约定的v_开头的变量名
begin
v_name := 'name';
dbms_output.put_line('name' || v_name);
end;
3-exception
declare
v_name number := 0;
begin
v_num := 2/v_num;
dbms_output.put_line(v_num);
exception
when others then--相当于catch excption了
dbms_output.put_line('error');
end;
3-变量声明
每行只能声明一个,不能与数据库或表重名
变量类型
简单变量
a number(1);
a binary_integer := 0;--主要用来计数
a number(7,2) := 4000.00;
a date := sysdate;--sysdate系统当前时间
a constant number(3,2) := 3.14;
a boolean := false;--可以取空值,不赋值默认为空.不能打印
a varchar2(20) not null := '12345';
%type属性
declare
v_empno emp.empno%type;
v_empno v_empno%type;
复合变量
table 相当于数组
declare
type type_table_emp_empno is table of emp.empno%type index by binary_integer;--相当于声明一个数组类型
v_empnos type_table_emo_empno;
begin
v_empnos(0) := 4444;
v_e