字符串:使用VARCHAR2描述
数字:在Oracle之中使用NUMBER来描述数字,如果描述小数使用“NUMBER(m,n)”
|- 整数,使用INT
|- 小数,使用FLOAT
日期:使用DATE是最为常见的做法,但是在Oracle里面DATE里面包含有日期时间,可是其他的数据库里面DATE可能只是日期,DATETIME才表示日期时间
· 大文本数据:使用CLOB描述,最多可以保存4G的文字信息;
· 大对象数据:使用BLOB,保存图片、音乐、电影、文字,最多可以保存4G。
从实际的开发来讲使用VARCHAR2、NUMBER、DATE、CLOB。
如果要进行数据表的创建,则可以使用如下的语法完成:
CREATE TABLE表名称( 列名称 类型 [DEFAULT 默认值] , 列名称 类型 [DEFAULT 默认值] , 列名称 类型 [DEFAULT 默认值] , .. 列名称 类型 [DEFAULT 默认值] ) ; |
create:创建
删除数据表; drop table 表名称
彻底删除,:drop table 表 purge;
清空回收站:purge recyclebin
常用数据类型(重点)
1创建一张成员表
create table member(
mid number,
name varchar2(20) default '无名氏',
biredate date default sysdate,
node clob
);
创建完成之后就可以向表中保存数据
insert into member(mid,name,biredate,node)
values(1,'李四',to_date('2001-01-01','yyyy-mm-dd'),'我很善良');
2修改表结构
-- 删除数据表 DROP TABLE member PURGE ; -- 清空回收站 PURGE RECYCLEBIN ; -- 创建数据表 CREATE TABLE member( mid NUMBER , name VARCHAR2(20) ) ; -- 测试数据 INSERT INTO member(mid,name) VALUES (1,'张三') ; INSERT INTO member(mid,name) VALUES (2,'李四') ; -- 提交事务 COMMIT ; |
修改member表结构
alter table member modify(name varchar2(30) default'无名氏');
为表增加一个address列
alter table member add(address varchar2(39));
增加一个sex列,这个列上设置默认值
alter table member add(address varchar2(20) default'男的');
删除表中的列
alter table member drop column sex
1、 常用的四种数据类型:VARCHAR2、NUMBER、DATE、CLOB;
2、 DDL对象的操作语法:
· 创建对象:CREATE 对象类型 对象名称 () ...;
· 删除对象:DROP 对象类型 对象名称 ...;
· 修改对象:ALTER 对象类型 对象名称 ....;
3非空约束NOT NULL、NK
--删除数据表
drop table member purge;
--创建数据表
create table member(
mid number,
name varchar2(20) not null
);
正确的增加语句
insert into member(mid,name) values(3,'张三');
错误的增加
insert into member(mid,name) values(3,null);
4唯一约束UNIQUE,UK
--删除数据库
drop table member purge;
--创建数据表
create table member(
mid number,
name varchar2(20) not null,
email varchar2(20) unique
);
保存正确的数据
insert into member(mid,name,email)values(2,'掌声',' hello@hello.com ');
用户的约束数据字典:user_constraints
COL owner FOR A30 ;
COL constraint_name FOR A30 ;
COL table_name FOR A30 ;
SELECT owner,constraint_name,table_name FROM user_constraints ;
可以发现“user_constraints”数据字典只是告诉用户约束属于那张表,但是并没有告诉用户约束具体是那个列上的,所以此时可以利用另外一个数据字典:user_cons_columns;
范例:查询“user_cons_columns”数据字典
COL owner FOR A30 ;
COL constraint_name FOR A20 ;
COL table_name FOR A20 ;
COL column_name FOR A30 ;
SELECT owner,constraint_name,table_name,column_name FROM user_cons_columns ;
发现唯一约束并不像非空约束那样,可以很明确的告诉用户是那个列上出现问题,所以为了解决这样的错误,可以采用“约束简写_字段”,例如:唯一约束的简写是“UK”,那么现在是在email字段上设置了唯一约束,所以可以使用“uk_email”来作为此约束的名字,如果要指定名字,则必须在约束创建的时候完成,利用:CONSTRAINT关键字定义。
范例:创建唯一约束,同时设置约束名称
--删除数据表
drop table member purge;
--创建数据表
create table member(
mid number,
name varchar2(20)not null,
email varchar2(20),
constraint uk_我是邮箱 unique(email)
);
5主键约束(PRIMARY KEY,PK)
主键约束 = 非空约束 + 唯一约束。也就是说设置为主键列,不能够为空,不能够重复。像一般用户编号是不可能重复的,也不可能为空的。
--删除数据表
drop table member purge;
--创建数据表
create table member(
mid number,
name varchar2(20) not null,
constraint pk_主键约束 primary key(mid)
);
6检查约束(CHECK、CK)
检查约束指的是在数据列上设置一些过滤条件,当过滤条件满足的时候才可以进行保存,如果不满足则出现错误,例如:如果设置年龄的信息,年龄0 ~ 250、性别:男、女。
--删除数据表
drop table member purge;
--创建数据表
create table member(
mid number,
name varchar2(20),
age number(3),
constraint pk_mid primary key(mid),
constraint 年龄0到200 check(age between 0 and 200)
);
保存正确的数据
insert into member(mid,name,age)values(1,'张三','39');
保存错误的数据
insert into member(mid,name,age)values(2,'李四',201);
7外键约束(FOREIGN KEY、FK)
外键约束主要是在父子表关系中体现的一种约束操作。下面通过一个具体的操作来观察一下为什么会有外键约束的存在。例如,现在希望描述一种概念:一个人有多本书,如果要设计表现在需要设计两张数据表。则初期的设计如下:
范例:初期设计 ——不使用外键
--删除数据表
drop table member purge;
drop table book purge;
--创建数据表
create table member(
mid number,
name varchar2(20),
constraint 主键约束mid primary key(mid)
);
--创建book数据表
create table book(
bid number,
title varchar2(20),
mid number
);
insert into member(mid,name)values(1,'张三');
insert into member(mid,name)values(2,'里斯');
insert into book(bid,title,mid)values(01,'Java',1);
insert into book(bid,title,mid)values(02,'Oracle',1);
insert into book(bid,title,mid)values(03,'Android',2);
insert into book(bid,title,mid)values(04,'Mysql',2);
但是此时,也有可能会增加如下的信息。
insert into book(bid,title,mid)values(20,'大家好',9);
此时member表中并没有编号为9的成员信息。但是由于此时没有设置所谓的约束,所以即使现在父表(member)中不存在对应的编号,那么子表也可以使用,但是这就是一个错误。
实际上也就发现了,book表中的mid列的内容的取值应该是由member表中的mid列所决定,所以来将现在就可以利用外键约束来解决此类问题。在设置外键约束的时候必须要设置指定的外键列(book.mid列)需要与那张表的那个列有关联。
--删除数据库
drop table member purge;
drop table book purge;
--创建数据表
create table member(
mid number,
name varchar2(20),
constraint pk_mid primary key(mid)
);
--创建数据表
create table book(
bid number,
title varchar2(20),
mid number,
constraint fk_mid foreign key(mid) references member(mid)
);
insert into member(mid,name)values(1,'张三');
insert into member(mid,name)values(2,'里斯');
insert into book(bid,title,mid)values(01,'Java',1);
insert into book(bid,title,mid)values(02,'Oracle',1);
insert into book(bid,title,mid)values(03,'Android',2);
insert into book(bid,title,mid)values(04,'Mysql',2);
增加错误的数据,member.mid没有为9的数据
insert into book(bid,title,mid)values(20,'噢噢噢',9);
--此时book.mid的列的内容取值范围由member.mid列所决定。如果内容正确,则可以保存
insert into book(bid,title,mid)values(20,'哦哦哦',2);
如果要删除表,必须先删除子表后才能在删除主表
member是父表,book是子表,如果说现在book表没有删除,那么member表无法删除
--删除数据表
drop table book purge;
drop table member purge;
但是有些时候,一些奇葩的设计者,将A表作为B表的父表,B表也同时设置为了A表的父表,于是删不掉了。为此在Oracle里面专门提供了一个强制删除父表的操作,子表不会被删除,删除之后不关心子表。
drop table member cascade constraint;
也可以↓:
drop table book cascade constraint;
此时mid为1的数据在book表中有对应的关联
使用DELETE删除member表的数据
delete from member where mid=1;
会出现:违反完整约束条件 (SCOTT.FK_MID) - 已找到子记录
但是如果说现在不想受到子记录的困扰,那么就可以使用级联的操作关系。级联的关系有两种:级联删除、级联更新。
级联删除:
所谓的级联删除指的是在父表数据已经被删除的情况下,自动删除其对应子表的数据。在定义外键的时候使用ON DELETE CASCADE即可。
范例:级联删除
--删除数据表
drop table book purge;
drop table member purge;
--创建数据表
create table member(
mid number,
name varchar2(20),
constraint pk_mid primary key(mid)
);
create table book(
bid number,
title varchar2(20),
mid number,
constraint fk_mid foreign key(mid) references member(mid) on delete cascade
);
insert into member(mid,name) values(1,'掌声');
insert into member(mid,name) values(2,'里斯');
insert into book(bid,title,mid) values(10,'Java',1);
insert into book(bid,title,mid) values(11,'Oracle',1);
insert into book(bid,title,mid) values(12,'Android',2);
insert into book(bid,title,mid) values(13,'Mysql',2);
此时当删除了父表数据之后,子表数据会同时删除掉。
delete from member where mid=2;
8修改约束
--删除数据表
drop table member purge;
--创建数据表
create table member(
mid number,
name varchar2(20)
);
insert into member(mid,name)values(1,'张三');
insert into member(mid,name)values(1,'李四');
insert into member(mid,name)values(2,null);
1、增加约束,语法:
ALTER TABLE 表名称 ADD CONSTRAINT 约束名称 约束类型(字段) 选项...
范例:为member表增加主键约束
alter table member add constraint pk_mid primary key(mid);
alter table member add constraint nk_name not null(name);
如果要想为字段增加非空约束,那么只能够依靠修改表结构的方式完成。
范例:增加非空约束
alter table member modify(name varchar2(20) not null);
但是需要保证此时name列上没有null值
delete from member where name is null;
此时会出现表以更改
alter table member modify (name varchar2(20) not null);
删除约束,语法
ALTER TABLE 表名称 DROP CONSTRAINT 约束名称;
删除主键约束
ALTER TABLE member DROP CONSTRAINT pk_mid ;