Oracle初学者
是的,老师今天给我们讲了学习阶段六大方法,是针对于学习程序这方面的。那么,其中一点就是多看书,多学习,多总结,多反馈。在上记录下这几个月来的学习历程,好像也挺不错的。因此小女故开始接触。。。
学习oracle得明白,它是干嘛的。首先,我们都知道数据吧,银行卡存了多少钱,数学考试多少分,这些都是数据。
那么,什么是数据库呢,就是管理数据的仓库,大家可以这样去理解。那么,这么多数据,仓库管理员又是怎么去管理的呢,现在肯定有工具,都用工具了——没错了,oracle就是这样的工具。后面学习到mysql也是一种工具,后面跟大家分享,一步一步来。
重点:数据库的增删改查,添加约束条件。实例如下:
--DDL数据定义语言
--用来创建、删除
--数据类型有哪些?
--1、数值类型:int、number
--2、字符型:char(长度固定)、varchar(长度会变化)、varchar2(oracle独有,长度会变化)
--3、日期类型:date、dd-mon-yy
--4、二进制数据blob,最大到4gb
--5、字符数据clob,最大到4gb
--创建表
create table my_user(
name varchar(10),--如果写出varchar(50),并不是一次性给出50个字节占用着。
age int,
sex char(2)
);
--查询表
select * from my_user;
--增加多余的列(属于表的结构)
alter table my_user add(address varchar(20),phone varchar(50));
select * from my_user;
--删除列(属于表的结构)
alter table my_user drop(address);
--修改列的长度(属于表的结构)
alter table my_user modify(address varchar(10));
--修改表名
rename my_user to my_people;
--删除表:2种方式drop(表不在)、truncate(截断表,只会清空表中内容,表还在)
drop table my_people;
select * from my_people;
truncate table my_user;
select * from my_user;
--DML数据操作语言manipulation
--insert 插入
insert into my_uesr(name,age, sex)
values ('jss',18 ,'男');
select * from my_user;
select * from scott.emp;--可以找到。
--提交:2种方式
--1、工具栏中绿色按钮
--2、插入语句后面加commit即可
--oracle不会自动提交
--mysql会、自动提交
--更新数据
--更改年龄
update my_user
set age=20
where name='jss';
--删除数据delete一整行一整行来删除的
--删除所有数据
delete from tb_user;
delete from tb_user where name='Jss';
delete from tb_user where name='春花' and sex='女';
alter table tb_user add(id int);
alter 用来修改表结构的,如果要修改表中的数据,需要使用update
--简单的查询语句
--and
--大于小于,不包括值
select * from scott.emp where sal>2000 and sal<3000;
--betweeen and
select * from scott.emp where sal between 2000 and 3000;
--or
select * from scott.dept where deptno=10 or deptno=20;
--in相当于一堆的or
select * from scott.dept where deptno in(10,20);
--like 模糊查询
--%值%:包含指定的值
--%值:以指定值结尾
--值%:以指定值开头
--_值%:地儿是指定的字符
select * from scott.emp where ename like '%D%';
select * from scott.emp where ename like 'D%';
select * from scott.emp where ename like '%D';
select * from scott.emp where ename like '_D%';
select * from scott.emp order by sal;
select * from scott.emp order by sal desc;
--排序order by
--asc升序
--desc 降序
--约束,主要用于数据安全与完整性
--数据安全
--创建表,添加约束
Create Table tb_juan (
Id Int Primary Key,
Name Varchar(20) Not Null,
age Int check(age>0 And age<110),
sex char(2) Check(sex='男' Or sex='女'),
phone Varchar(20) Unique,
address Varchar(50)
);
create table tb_stu(
id int primary key,
name varchar(10) not null,
age int check(age>0and age<100),
phone varchar(11) unique,
class_id int references tb_clazz(id)
);
--约束种类
--1、检查约束:check (not null不为空)
--2、唯一约束:unique
--3、主键约束primary key
--4、外键约束foreign key references
--创建约束方式:
--1、建立表时同时建立(列级约束)
--2、添加动作(表级约束)
--外键约束,用来解决数据冗余,重复数据太多,常用在两张表的两个字段中,简单的理解起来就是,在两张表之间找到相似的,然后让他们发生关联关系。
--格式:forign key(就是外键列名) references 主表(就是参照列名的表)
--比如:我们想要使用calzz_id字段将tb_clazz表和tb_stu 表联合起来,关联起来,用外键来实现。
--clazz_id int references tb_clazz(id);
--使用注意点:
--1)子表(从表)tb_stu的外键列clazz_id的值必须在父表tb_clazz(主表)参照列值的范围内,如果是范围之外的,查询不到数据。
--2)你参照主表中的值,必须是唯一的,就是为了避免数据冗余。
--3)当主表的记录被子表参照时,主表记录不允许被删除,如果删除,会出现报表中的主键、唯一键被外键引用异常。
不解除关系,删除就会导致数据的不完整性。
--解决方式1:删掉tb_clazz中指定的数据,而不是整张表
--先把学生清空,才能删掉班级
delete from tb_stu where clazz_id=1;
delete from tb_clazz where id=1;
--解决方式2:解除两者关系即可
--修改列中的值为null,或者其他值
update tb_stu2 set clazz_id=null where id=1;(只有一条记录)
delete from tb_clazz where id=1;
--存在问题的tb_stu
create table tb_user(
id int primary key,
name varchar(20),
sex char(2) check(sex='男' or sex='女'),
age int check(age>0 and age<100),
address varchar(30) default '广州天河区',
phone varchar(30) unique,
clazz varchar(20),--班级
pro varchar(20),--学科
bzr varchar(20)--班主任
);
insert into tb_stu
values(1,'翠花','女',18,'广州黄埔','13543256742','java09','java','月圆小姐姐');
insert into tb_stu
values (2,'春花','女',20,'13800138000','java09','java','月圆小姐姐');
--创建tb_clazz
create table tb_clazz(
id int primary key,
clazz varchar(20),
pro varchar(20),
bzr varchar(20)
);
insert into tb_clazz
values (1 ,'java09','java','月圆小姐姐');
--改造
create table tb_stu2(
id int primary key,
name varchar(20),
sex char(4) check(sex='男' or sex='女'),
age int check(age>0 and age<100),
address varchar(100) default '广州黄埔',
phone varchar(20) unique,
clazz_id int references tb_clazz(id)
--clazz_id int references tb_clazz(id) on delete cascade
--clazz_id int references tb_clazz(id) on delete set null
);
--列级约束与表级约束的综合使用
--推荐写法:基本约束采用列级约束形式,外键采用表级形式。
create table tb_stu3(
id int primary key,
name varchar(20) not null,
sex char(2) check(sex='男'or sex='女'),
age int check(age>0 and age<100),
adress varchar(30) unique,
clazz_id int,--声明
--外键
foreign key(clazz_id) references tb_clazz(id)
);
--复合约束
--每个月的报表
--2018.6
--2018.7
--2017.7
--创建报告表
create table tb_report(
year char(4),
mon char(2),
--给他们约束,将需要整合到一起作为符合约束的键放到一起设置约束。
unique(year,mon)
);
insert into tb_report values('2018','7');
--维护约束的方式:使用alter table语句
--当需要修改、增加、删除约束的时候,都可以使用alter table语句。
create table tb_hello(
id int primary key,
name varchar(20) not null,
age int check(age>0 and age<100),
clazz_id int
);
create table tb_hello(
id int ,
name varchar(20),
age int ,
clazz_id int
);
--增加主键约束
alter table tb_hello add primary key(id);
--增加外键约束
alter table tb_hello add foreign key(clazz_id) references tb_clazz(id);
--增加非空
alter table tb_hello add check(name is not null);
--给age增加约束
alter table tb_hello add check(age>0 and age<100);