以Oracle来开始学习数据库,和其他数据库不同的是,Oracle要先建立表空间,一切操作基于表空间。
/*创建物理表空间*/
CREATE TABLESPACE SC1907_data
LOGGING
DATAFILE 'C:\oraclexe\app\oracle\oradata\XE\SC1907_data.dbf'
SIZE 10M
AUTOEXTEND ON
NEXT 2M MAXSIZE 50M;
/*创建临时表空间,用于存放临时数据*/
CREATE TEMPORARY TABLESPACE SC1907_temp
TEMPFILE 'C:\oraclexe\app\oracle\oradata\XE\SC1907_temp.dbf'
SIZE 5M
AUTOEXTEND ON
NEXT 1M MAXSIZE 20M;
/*创建用户*/
CREATE USER admin IDENTIFIED BY root
DEFAULT TABLESPACE SC1907_data
TEMPORARY TABLESPACE SC1907_temp;
/*给新创用户授权*/
GRANT CONNECT,RESOURCE TO admin;
建表之三范式3NF:
1NF: 需要细分各个字段,分到不可再分;
比如地址要细分为: 省, 市, 区, 街道四列,而不应该为就一列: 地址..
以下这种情况也不可以:
比如姓名: 不能分为 姓 ,名
2NF: 确保每一行数据的唯一性;
解决办法: 使用主键或唯一键;
3NF:非主键字段不能相互依赖;
满足第三范式(3NF)必须先满足第二范式(2NF)。
在表空间的基础上创建简单学生表(SQL不区分大小写 ps:推荐大写):
/*建表*/
create table t_student(
stu_number number(4),
stu_name varchar(20),
gender char(1),
birthday date,
sal number(8.2)
);
/*提交才能真正持久化(写入硬盘)*/
commit;
SQL数据类型:number保存数字,number(8.2)表示可以有8位整数2位小数,char保存字符串,date保存日期,varchar保存字符串并且可以根据字符串长度调整大小,与char相比效率低。
varchar与varchar2的区别:
1.varchar2把所有字符都占两字节处理(一般情况下),varchar只对汉字和全角等字符占两字节,数字,英文字符等都是一个字节;
2.varchar2把空串等同于null处理,而varchar仍按照空串处理;
3.varchar2字符要用几个字节存储,要看数据库使用的字符集, 大部分情况下建议使用varchar2类型,可以保证更好的兼容性。
数据的增删改及简单查询:
/*查询*/
SELECT * FROM T_STUDENT;
/*插入数据*/
INSERT INTO T_STUDENT VALUES(9527,'周星星','1',sysdate,100.59);
INSERT INTO T_STUDENT(stu_name,sal) VALUES('pig',695);
/*修改*/
UPDATE T_STUDENT SET sal = 100 WHERE stu_number is null;
/*删除*/
DELETE FROM T_STUDENT WHERE STU_NUMBER = 9527;
TRUNCATE TABLE T_STUDENT;
DROP TABLE T_STUDENT;
三种删除的比较:
1.删除数据不删除定义,记录日志,删除速度慢,可以带条件,可以还原。
delect [from] 表名 [where 列名 m = 值 m ... ]
dml
2.截断表,不带条件,不删除定义,删除日志和数据 ,速度快,不能还原
truncate table 表名
ddl
3.删除表定义和数据
drop table 表名
ddl
判断null必须用 is null 不能用=null,判断非null 必须用 is not null。
设置主键:
ALTER TABLE T_STUDENT ADD CONSTRANINT stu_pk primary key (STU_NUMBER);
主键:一个表只能有一个主键(PS:一个主键可以是单列也可以是联合组件,即多列组合的主键),主键不能为null,且不能重复。
SQL语言一共分为4大类:数据定义语言DDL,数据操纵语言DML,数据查询语言DQL,数据控制语言DCL 。
1.数据定义语言DDL(Data Definition Language)
对象: 数据库和表
关键词: create alter drop truncate(删除当前表再新建一个一模一样的表结构)
创建数据库:create database school;
删除数据库:drop database school;
切换数据库:use school;
创建表:create table student(
id int(4) primary key auto_increment,
name varchar(20),
score int(3)
);
查看数据库里存在的表:show tables;
2.数据操纵语言DML(Data Manipulation Language)
对象:纪录(行)
关键词:insert update delete
插入:insert into student values(01,'tonbby',99); (插入所有的字段)
insert into student(id,name) values(01,'tonbby'); (插入指定的字段)
更新:update student set name = 'tonbby',score = '99' where id = 01;
删除:delete from tonbby where id = 01;
3.数据查询语言DQL(Data Query Language)
select ... from student where 条件 group by 分组字段 having 条件 order by 排序字段
执行顺序:from->where->group by->having->order by->select
注意:group by 通常和聚合函数(avg(),count()...)一起使用 ,经常先使用group by关键字进行分组,然后再进行集合运算。group by与having 一起使用,可以限制输出的结果,只有满足条件表达式的结果才会显示。
having和where的区别:
两者起作用的地方不一样,where作用于表或视图,是表和视图的查询条件。having作用于分组后的记录,用于选择满足条件的组。
4.数据控制语言DCL(Data Control Language)
数据控制语言DCL用来授予或回收访问数据库的某种特权,并控制数据库操纵事务发生的时间及效果,对数据库实行监视,用户,权限,事务等。
关键词:grant:授权,rollback:回滚。commit:提交。
日期格式详解:
sysdate:获取系统时间,精确到秒;
to_date:按固定格式得到日期数据,可以+1(单位天),如果要加一小时则为+1/24;
to_char:按固定格式得到字符串数据,连接两个字符串用“||”。
--系统时间
SELECT SYSDATE FROM dual;
--将字符串转化为日期
SELECT to_date('2018-9-10 16:30:59','yyyy-mm-dd hh24:mi:ss') FROM dual;
--将日期转为字符串
SELECT to_char(SYSDATE,'yyyy/mm/dd hh24:mi:ss') FROM dual;
注意:dual是Oracle自带的表,hh24也可为hh但hh24能表示13:30:59,hh不能。