设计表
三范式
①字段不可再分,原子性
②添加主键(非空+唯一)确定唯一
③拆分表,通过主外键约束进行关联,消除传递依赖
我这里学的就是DDL
结构:create table 表名(字段名 字段类型,字段名 字段类型…);
列如我们创建一个学生表
-- 学生表 qh_student
-- 学号 sname
-- 性别 sgender
-- 年龄 sage
-- 出生日期 sbirthday
-- 班级编号 cno
create table qh_student(
sno number(3), --不超过3位整数
sname varchar2(15), --可变长字符串
sgender char(1 char), --定长字符串 (整数)默认字节数 (整数 char) 几个字符
shiredate date
)--这是没有约束的表
我们要对上面的字段进行约束
约束:对字段值的要求
①主键约束:非空+唯一
②非空约束
③唯一约束
④默认约束
⑤检查约束
⑥外键约束
--这是约束后的表
create table qh_student(
sno number(3) primary key, --主键约束
sname varchar2(15) not null, --非空约束
--sgender char(1 char) check(sgender = '男' or sgender = '女') , --定长字符串 (整数)默认字节数 (整数 char) 几个字符
sgender char(1 char) constraints ck_sgender check(sgender in ('男','女')) ,
shiredate date default(sysdate),
sage number(3) check(sage>1 and sage<150),
telphone varchar2(11) constraints uni_phone unique ,--唯一约束
--外键约束 为qh_student 的cno字段设置外键约束,关联班级表主键字段cno
cno number(3) references qh_class(cno)
)
关于在表中插入数据
结构:insert into 表名 values (数据);
例如
insert into qh_student values(1,'zhangsan','女',sysdate,23,'122342342',204);
insert into qh_student values(2,'徐达豪','男',sysdate,18,'13010101010',202);
insert into qh_student values(5,'晨曦','男',sysdate,20,'1301010101',202);
insert into qh_student values(4,'李银桥桥子酱','男',sysdate);
insert into qh_class values(202,'java46期');
insert into qh_class values(203,'大数据19期');
以上这些操作会引发事件,我们需要commit提交或者感觉出错用rollback返回
删除表
语法:drop table 表名;
例如
drop table qh_student;
--如果这时student中有一个外键关联另一个主表,这时候想删除另一个主表
drop table 表名 cascade constraints;--我们需要cascade constraints
关于删除表我们总结以下几点:
①如果想删除从表,可以直接删除
②如果删除主表
默认的方法就是先删除所有从表,再删除主表
第二个就是在删除主表的同时,级联删除主外键约束关系就是cascade constraints
修改表
--我们用上面的qh_student做例子
--修改字段名
alter table qh_student rename clumn sname to studentname;
--修改类型
alter table qh_studennt modify(studentname varchar(30));
--添加列
alter table qh_student add money number(7,2); --7位有效数字,2位小数位
--删除列
alter table qh_student drop column money;
DML:DQL
insert,delete,upd
ate,select
这里我们补充一个插入表数据的结构
insert into 表名(字段) values (数据);
这里我们需要注意:添加一条数据,必须定义所有字段值,而有些字段是必须赋值的,例如主键
delete 删除数据
我们要区别drop与delete ,drop 是删除表,而delete是删除表中的数据
语法:delete from 数据源; 这是删除数据源中的所有数据
delete from 数据源 where 条件; 这是删除满足条件的数据删除
--删除数据源中的所有数据
delete from qh_student;
--删除指定字段
delete from dept where deptno in (59,60);
这里我们还需要知道如果在主外键连系的主从表数据的删除方法
--删除从表的数据
delete from emp where deptno=30;--从表的数据可以随意删除
--删除主表的数据
delete from emp where deptno=40;--如果删除的是从表中没有引用的主表数据,可以直接删除
--1)当删除从表中引用了主表数据的时候不能直接删除(我们先把从表引用数据删除再删除主表数据)
delete from emp where deptno=10;
delete from dept where deptno=10;
--2)删除的主表数据的同时删除那些引用了当前要删除的主表数据的那些从表数据 on delete cascade
--3)删除主表中数据的同时为从表中引用了当前主表数据的那些从表数据外键字段设置null,我们就用on delete set null
delete from qh_class where cno=202;/*当设置为on delete cascade,如果这里创建了qh_class表而qh_student的cno外键与qh_class主键连接,我们删除cno=202那么主从表的202整个数据都会消失,而当设置为on delete set null时数据都会保留,只有cno那栏变为null*/
create table qh_student(
sno number(3) primary key, --主键约束
sname varchar2(15) not null, --非空约束
--sgender char(1 char) check(sgender = '男' or sgender = '女') , --定长字符串 (整数)默认字节数 (整数 char) 几个字符
sgender char(1 char) constraints ck_sgender check(sgender in ('男','女')) ,
shiredate date default(sysdate),
sage number(3) check(sage>1 and sage<150),
telphone varchar2(11) constraints uni_phone unique ,--唯一约束
--外键约束 为qh_student 的cno字段设置外键约束,关联班级表主键字段cno
cno number(3) references qh_class(cno) /*我们在这里添加 on delete cascade
或者 on delete set null
)
update修改
语法:update 表名 set 字段名=字段值,字段名=字段值…;修改表中的所有数据的指定字段值
--这里我们用前面的表
update emp set sal=sal+100,deptno=40;--deptno的值全部变为40
update emp set sal=sal+100,deptno=40 where deptno=30--deptno为30的变为40