DDL语句

来源:互联网 发布:php 匿名函数 use 编辑:程序博客网 时间:2024/05/21 14:09
数据库常用对象(表,视图...);

创建一张表:
create table t (a varchar2(10));
select  * from t;
(删除表)
drop table t;

varchar2()可以变化长度的;最大4K;
char()定长的字符串;8
这两个的区别:效率高用定长字符串,浪费空间;(拿空间换时间)
number()
date()
long()最大达到2G 

事务控制语句:
事务是一系列的操作:
一个事务:(开始语句是DML)
update emp2 set sal = sal*2;
delete from dept2;
insert into salgrade values(6,10000,20000);
rollback;(commit 提交)(一个事务的结束语句)或者是DDL,DCL,正常断开事务自动提交,非正常断开事务,事务回滚;

update dept2 set deptno = deptno*2;
select * from dept2;
create table t (a varchar2(20));

rollback(这时rollback不会恢复);

constraint :约束
字段级约束:(约束一个字段)
create table stu
(
    name vachar2(20)  constraint stu_name  not null,(非空约束);
    email varchar2(20) unique,(唯一约束)
);
这个空值不认为是唯一;

表级约束:(组合起来的约束,约束多个字段)
create table stu
(
name varchar2(20),
email varchar2(50),
constraint stu_name_email_uni unique (email,name)
);

主键约束:primary key
主键:可以标志整条记录,(唯一标识一个)
主键不能为空,并且是惟一的;相当于not null 和 unique;(语法上)
单独的唯一 一条记录(逻辑上)
create  table stu
(
id number(6) primary key,(字段约束)
constraint stu_id_pk primary key(id)(表级约束)
);

外键约束:涉及到了两个字段:

被参考的字段(被参考的字段必须是主键)
create table class
(
    id number(4) primary key,
    name varchar2(20) not null
);

参考的字段:
create table stu
(
id number(6),
class number(4)  references class(id),
constraint stu_class_fk foreign key(class)(表级约束)
);
插入值:
insert into  stu(id ,class) values(1,3);

check约束:

alter_table_drop_table : 

   alter table stu add(addr varchar2(100));
   alter  table stu drop (addr);
   alter table stu add(addr varchar2(150));
   alter table stu modify (addr varchar2(200));

修改后的数据空间要大于修改前的空间,不能截取数据;

alter table stu drop constraint stu_class_fk;    
delete from class;
rollback;
alter table  stu add constraint stu_class_fk foreign key (class) references class(id);

Oracle_dictionaries:
(查询所有表的结构:)
desc uers_tables;
(查询所有的表名:)
select table_name from user_tables;
(查询视图:)
select view_name from user_views;
(查询约束)
select constraint_name from user_constraints;
desc user_constraints;
(这些约束都加在那些表名上)
select constraint_name,table_name from user_constraints;

desc dictionary;
    (查看dictionary中有多少表)
select  table_name from dictionary;
(查看是USER开头的)
select table_name from dictionary where table_name like'USER%';
(对表名进行排序)
select table_name from dictionary where table_name like'USER%' order by table_name;

indexes_and_views:
(创建索引)
create index idx_stu_id on stu(class);
(删除索引)
drop index idx_stu_id ;
(查询所有的索引)
select index_name from user_indexes;
当给一个表中的字段加唯一约束或者主键约束,会自动的给字段添加索引
如果是组合约束,则会加两个索引

给一个字段添加索引,访问时效率会更高,但是插进去是会降低,不但要插入值,还要插入索引。(索引也会占大量的空间)

(查询视图)
select view_name from user_views;
desc v$_dept_avg_sal_info;

添加视图增加了修改维护的难度,但是视图简化查询,保护相关信息;
create  view v$_stu as select id,class from stu;
 视图可以用来更新数据

sequence_and_review;
sequence一般来做主键,保证产生一个序列的数字,并且不能重复;(Oracle特有)
create table article
(
id number,
title varchar2(1024),
cont long
);
select max(id)  from article;
(创建一个序列)
create sequence seq;
(查询下一个数值)
select seq.nextval from dual;
(向表中插入数据)
insert into article values  (seq.nextval,'a','b');

select * from article;

优化一张表首先考虑索引

数据库的三范式:
范式:就是数据库设计的规则:

1,不存在冗余数据,
第一范式:1,要有主键;2,列不可分(不能重复);
创建一张表:
create table stu(xuehao,xingming,nianji);
第二范式:1,当一张表有多个主键,其他字段不能存在部分依赖(多对多的问题)
第三范式: 不能存在传递依赖,如有一张表有以下字段:(学号、姓名、班级号、班级名称、班级位置),        其中学号为主键,则班级号依赖于学号,每个学生都有相应的班级号,但是班级名称、班级位置        是依赖于班级号,即它们通过班级号传递依赖于学号,不满足第三范式。

原创粉丝点击