您的位置:首页 > 数据库 > Oracle

Oracle_sql 基础_表与约束

2017-09-23 12:00 232 查看
1.表中的数据类型
(1) 字符型: 

CHAR(N),     N<=2000;             NCHAR(N),N<=1000         //不可变长度
VARCHAR2(N),N,<=4000;            NVARCHAR2(N),N<=2000     //可变长

(2) 数值型:

NUMBER(p,s)
   例如:NUMBER(5,2):表示有效数字5位,保留2位小数,如123.45
FLOAT(N):不常用

(3) 日期型:
    ① DATE :date类型是Oracle常用的日期型变量,他的时间间隔是秒。两个日期型相减得到是两个时间的间隔,注意单位是“天”。例如:查看一下当前距离伦敦奥运会开幕还有多长时间:
select to_date('2012-7-28 03:12:00','yyyy-mm-dd hh24:mi:ss')-sysdate from dual

    ② TIMESTAMP:timestamp是DATE类型的扩展,可以精确到小数秒(fractional_seconds_precision),可以是0 to9,缺省是6。两个timestamp相减的话,不能直接的得到天数书,而是得到,多少天,多少小时,多少秒等,例如:同样查看一下当前距离伦敦奥运会开幕还有多长时间.
select to_timestamp('2012-7-28 03:12:00','yyyy-mm-dd hh24:mi:ss')-systimestamp from dual

    ③ date 和 timestamp之间的相互转换可以通过
<
4000
span style="font-size:12pt;">    【1】to_char来转换timestamp——>date:
select to_date(to_char(systimestamp,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss') from dual

    【2】date ——>timestamp:
select to_timestamp(to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss') from dua

     当使用date和timestamp类型的时候,选择是很清楚的。你可以随意处置date和timestamp类型。当你试图转换到更强大的timestamp的时候,需要注意,它们既有类似的地方,更有不同的地方,而足以造成破坏。两者在简洁和间隔尺寸方面各有优势,请合理地选择。
(4) 其他类型
     BLOB:最大存放4GB的数据,以二进制的形式存放;
     CLUB:最大存放4GB的数据,以字符串的形式存放;

2.管理表:   

(1) 创建表:
create table userinfo
( id number(6,0),
username varchar2(20),
userpwd varchar2(20),
email   varchar2(30),
regdate   date);


(2) 修改表:

① 向表中添加字段:
alter table userinfo add remarks varchar2(500);


② 更改字段的数据类型和大小:
alter table userinfo modify remarks varchar2(400);


③ 删除字段:
alter table userinfo drop column remarks;


④ 修改字段名字:
alter table userinfo rename column email to new_email;


⑤ 修改表明
RENAME userinfo TO new_userinfo;


⑥ 增加注释
【1】给表添加释
COMMENT ON TABLE emp IS '员工详情表';

【2】给列添加注释
COMMENT ON COLUMN emp.empno IS '员工编号';


(3) 删除表:

① 删除表中的全部数据方法1:
TRUNCATE TABLE  new_userinfo;


② 删除表中的全部数据方法2:
DELETE from new_userinfo;


③ 删除表和表中的数据
drop table new_userinfo;


3.操作表中的数据:

(1) 操作表中数据

① 添加数据:
//添加全部字段:
insert into userinfo
values(1,'xxx','123','xxx@126.com',sysdate);
添加部分字段:
insert into userinfo(id,username,userpwd)
values(2,'yyy','123');


② 添加默认值:
create table userinfo1 (id number(6,0),Regdate date default sysdate);
insert into userinfo1 (id) values(1);


(2) 复制表数据:

    ① 在建表是复制数据:
create table userinfo_new
as
select * from userinfo;


    ② 在添加数据时复制
insert into userinfo_new
select*from userinfo;  


(3) 修改表中的数据:
update userinfo set userpwd='123456' where username='XXXXX';


(4) 删除数据:
delete from userinfo where username='XXXXX';


(5) 查询语句

    详见:http://blog.csdn.net/luomingkui1109/article/details/78072060

4.约束:

(1) 约束定义
    约束是强加在表上的规则或条件。确保数据库满足业务规则。保证数据的完整性。当对表进行DML或DDL操作时,如果此操作会造成表中的数据违反约束条件或规则的话,系统就会拒绝执行这个操作。约束可以是列一级别的 也可以是表级别的。定义约束时没有给出约束的名字,ORACE系统将为该约束自动生成一个名字,其格式为SYS_Cn,其中n为自然数(强烈建议各位在创建表或增加约束时,给约束定义名称。
(2) 约束功能
    约束的功能:实现一些业务规则,防止无效的垃圾数据进入数据库,维护数据库的完整性(完整性指正确性与一致性)。从而使数据库的开发和维护都更加容易。
(3) 约束分类
    非空(NOT NULL)约束:顾名思义,所约束的列不能为NULL值。否则就会报错。
    唯一(UNIQUE)约束:在表中每一行中所定义的这列或这些列的值都不能相同。必须保证唯一性。否则就会违法约束条件。
    主键(PRIMARY KEY)约束:唯一的标识表中的每一行,不能重复,不能为空。 创建主键或唯一约束后,ORACLE会自动创建一个与约束同名的索引(UNIQUENES为UNIQUE唯一索引)。需要注意的是:每个表只能有且有一个主键约束。
    外键(FOREIGN KEY)约束:用来维护从表(Child Table)和主表(Parent Table)之间的引用完整性. 外键约束是个有争议性的约束,它一方面能够维护数据库的数据一致性,数据的完整性。防止错误的垃圾数据入库; 另外一方面它会增加表插入、更新等SQL性能的额外开销,不少系统里面通过业务逻辑控制来取消外键约束。例如在数据仓库中,就推荐禁用外键约束。
    检查(CHECK)约束:表中每行都要满足该约束条件。条件约束既可以在表一级定义也可以在列一级定义。在一列上可以定义任意多个条件约束。

5.约束分类详解

(1) 非空约束:

    ① 在创建表是设置非空约束:
create table userinfo_1
(id number(6,0),
username varchar2(20) not null,
userpwd varchar2(20) not null);


    ② 在修改表是设置非空约束:
ALTER TABLE userinfo modify username varchar2(20) not null;


    ③ 在修改表是去除非空约束
alter table userinfo
modify username varchar2(20) null;


(2) 主键约束:

    ① 在创建表时设置主键约束(添加主键约束时自动添加非空约束)
create table userinfo_p
(id number(6,0) primary key,
username varchar2(20),
userpwd varchar2(20));


    ② 在创建表时设置联合主键约束
create table userinfo_p1
(id number(6,0),
username varchar2(20),
userpwd varchar2(20),
constraint pk_id_username primary key(id,username));


    ③ 在修改表是添加主键约束
alter table userinfo
add constraint pk_id primary key(id);


    ④ 在数据字典中查询某一张表中约束的名字
select constraint_name from user_constraints where table_name='USERINFO';


    ⑤ 更改约束的名称
alter table userinfo rename constraint pk_id to new_pk_id


    ⑥ 删除主键约束

    【1】禁用(disable)/激活(enable)约束

alter table userinfo
disable constraint new_pk_id;


    【2】查看约束状态
select constraint_name,status from user_constraints where table_name='USERINFO';


    【3】删除约束
alter table userinfo_p
drop primary key;


(3) 外键约束:

    ①在创建表时设置外键约束:外键约束的级联删除:
//主表:
create table typeinfo
(typeid varchar2(10) primary key,
typename varchar2(20));
//从表:
create table userinfo_f
(id varchar2(10) primary key,
username varchar2(20),
typeid_new varchar2(10) references typeinfo(typeid));


     说明:在向从表中插入值得时候,外键的值要不和主键保持一致,要不为null,否侧无法插入成功。
<
d9d8
div style="margin:0px;padding:0px;font-family:'微软雅黑';font-size:14px;line-height:14.4px;">
    ② 级联删除的外键约束:使用 on delete cascade 即可,这样主表删除数据时对应的从表数据也会被删除。
create table userinfo_f3
(id varchar2(10) primary key,
username varchar2(20),
typeid_new varchar2(10)
constraint fk_typeid_new1 foreign key(typeid_new) references typeinfo(typeid) on delete caseade);


    ③ 在修改表是添加外键约束
create table userinfo_f4
(id varchar2(10) primary key,
username varchar2(20),
typeid_new varchar2(10));
alter table userinfo_f4
add constraintfk_typeid_alter foreign key(typeid_new)references typainfo(typeid) on delete caseade ;


    ④ 删除外键约束
alter table userinfo_f4
drop constraint FK_TYPEID_ALTER;


(4) 唯一约束:

    ① 概念:

    唯一约束指表中一个字段或者多个字段联合起来能够唯一标识一条记录的约束。联合字段中,可以包含空值。

    注:在Oracle中,唯一性约束最多可以有32列。

           唯一性约束可以在创建表时或使用ALTER TABLE语句创建。

    ② 唯一约束和主键的区别

    主键(Primary Key):所有组成主键的列都不能包含空值且每张表中只能有一个。

    唯一约束(Unique Constraint):如果唯一性约束由多列组成,其中的部分列可以包含空值。

    Oracle中不容许在相同列上既创建主键又创建唯一性约束。

    ③ 在创建表时设置唯一约束

    【1】列级的唯一约束
create table userinfo_u
(id varchar2(10) primary key,
username varchar2(20) unique,
userpwd varchar2(20));


    【2】表级的唯一约束
create table userinfo_u1
(id varchar2(10) primary key,
username varchar2(20),
constraint un_username unique(username));


    ④ 在修改表时添加唯一约束
create table userinfo_u2
(id varchar2(10) primary key,
username varchar2(20));
添加约束:
alter table userinfo_u2
add constraint un_username unique(username);


    ⑤ 删除唯一约束

    【1】从数据字典中查看当前表约束的名字,约束的类型,约束的状态。
select constraint_name, constraint_type,status from user_ constraints where table_name='USERINFO_U2';


    【2】禁用约束:
alter table useringo_u2 disable constraint UN_USERNAME_NEW;


    【3】删除约束
alter table useringo_u2 drop constraint UN_USERNAME_NEW;


(5) 检查约束:

① 在创建表时添加检查约束:

    【1】列级约束:
create table userinfo_c
(id varchar2(10) primary key,
username varchar2(20),
salary number(5,0) check(salary>0));


    【2】表级约束
create table userinfo_c1
(id varchar2(10) primary key,
username varchar2(20),
salary number(5,0),
constraint ck_salary check(salary>0));


② 在修改表时添加检查约束:
create table userinfo_c3
(id varchar2(10) primary key,
username varchar2(20),
salary number(5,0));

//添加检查约束:
alter table userinfo_c3
add constraint ck_salary_new check(salary>0);


③ 删除检查约束:

    【1】禁用当前约束
alter table userinfo_c3 disable constraint CK_SALARY_NEW;


    【2】在数据字典中查看当前约束的相关信息
select constraint_name,constraint_type,status from user_constraints where table_name='USERINFO_C3';


    【3】删除当前约束
alter table userinfo_c3 drop constraint CK_SALARY_NEW;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: