数据类型
字符类
select lengthb('字') from dual; (可以在数据库中查询一个汉字站多少字节)
char(?) 长度固定,最多容纳2000个字符。
例:char(10) ,UT8中一个汉字占3个字,前六个字符放‘张三’,后添4个空格补全,如‘张三 ’
注:char 查询的速度极快,浪费空间,适合查询比较频繁的数据字段
varchar2(?) 长度可变,最多容纳4000个字符。不要使用varchar数据类型,使用varchar2数据类型
例:varchar2(10),‘张三’ Oracle中只分配6个字符。varchar2 节省空间
clob(character large object) 字符型大对象,最多容纳4g
数字型
number(?) 或者 number(?,?) 范围 10^(-130) —— 10^126,可以表示整数,也可以表示小数
例:number(5,2)表示一位小数有5位有效数,2位小数,范围:-999.99 到999.99,number(5)表示一个5位整数,范围99999到-99999
日期类型
date 包含 年月日和时分秒,oracle默认格式:1-1月-1999 也可以用 to_date('2018-09-27','yyyy-mm-dd')
timestamp 这是oracle9i对date数据类型的扩展。可以精确到毫秒。
lob数据类型
包括blob、clob、nclob、bfile(外部存储)的大型化和非结构化数据,如文本、图像、视屏、空间数据存储。
创建表
create table table_name(
字段1 类型1,
字段2 类型2,
字段n 类型n
);
根据结果集创建数据库
create table 表名 as select 语句
复制表
-- 有结构有数据
create table emp_01 as select * from emp;
-- 有结构没有数据
create table emp_02 as select * from emp where 1=2;
约束
英文 | 中文 |
---|---|
primary key | 主键约束 |
unique | 唯一约束 |
not null | 非空约束 |
check(约束条件) | 检查约束 |
foreign key | 外键约束 |
default | 默认约束 |
注意:Oracle中 default 不是约束,是一个值
给已创建的表添加约束
alter table 表名 add constraint 约束名 约束内容
添加主键约束
alter table emp add constraint pk_emp_id primary key(eid);
添加非空约束
alter table emp modify ename not null;
添加唯一约束
alter table emp add constraint uq_emp_ecode unique(ecode);
添加检查约束
alter table emp add constraint ck_emp_esex check(esex in('男','女'));
添加外键约束
----普通外键约束(如果存在子表引用父表主键,则无法删除父表记录)
alter table emp add constraint fk_emp_dep foreign key(did) references dep (did);
----级联外键约束(可删除存在引用的父表记录,而且同时把所有有引用的子表记录也删除)
alter table emp add constraint fk_emp_dep foreign key(did) references dep (did) on delete cascade;
----置空外键约束(可删除存在引用的父表记录,同时将子表中引用该父表主键的外键字段自动设为NULL,但该字段应允许空值)
alter table emp add constraint fk_emp_dep foreign key(did) references dep (did) on delete set null;
删除约束
alter table 表名 drop constraint 约束名
创建员工表
create table employee(
eid varchar2(10) primary key, -- 主键约束
ename varchar2(12) not null, -- 非空约束
esex char(3) default '男' check(esex='男' or esex='女'), -- 默认约束+检查约束
ebrithday date unique,-- 唯一约束
eage number(3),
esalary number(8,2),
depid varchar2(10),
constraint fk_employee_department_depid foreign key(depid) references department(depid) --外键约束
);
删除表
drop table 表名;
修改表的字段
添加一个classid字段
alter table student add (classid number(2));
修改一个name字段的长度
alter table student modify (name varchar2(30));
修改name字段的类型或是名字(不能有数据)
alter table student modify (name char(30));
删除一个字段
alter table student drop salary;
修改表的名字
rename student to stu;
插入记录
insert into 表名(字段1,字段2,字段3,...) values(值1,值2,值3,...);
当插入全部字段的数据时:
insert into 表名(字段1,字段2,字段3,...) values(值1,值2,值3,...);
insert into student (sno,age,edate,classname,email)values(1, 18, '23-12月-1293','wd003','insert@w5.com')
可以简写为(可以省略表名后面的字段标识):
insert into 表名 values(值1,值2,值3,...);
insert into student values(1,18, '23-12月-1293','wd003','insert@w5.com'); 与上一个insert语句效果相同
当插入部分字段时(一定要在表名后添加标识,下面例子添加记录时字段2没有添加数据):
insert into 表名(字段1,字段3) values(值1,值3);
insert into student (sno,sdate,classname,email)values(1, '23-12月-1293','wd003','zsf@wd.com');
(没有添加学号为1同学的年龄)
修改记录
update 表名 set 修改字段1 = 修改后内容1,修改字段2 = 修改后内容2 where 条件
update student set sname='CR7',sage='33' where sno='1001';
删除记录
delete from 表名 where 条件
删除表所有记录
delete from 表名
truncate table 表名 (!!!!!慎用,删除记录不可恢复)
主表 从表
主键表是被引用的表,外键表是引用其他表的表
主表:在数据库中建立的表格(table),其中存在主键(primary key)用于与其它表相关联,并且作为在主表中的唯一性标识
从表:以主表的主键(primary key)值为外键 (foreign key)的表,有外键的表是外键表,从表
删除主表前,先解除与从表关系,然后才能删除(除非外键中设置级联或者置空)