数据库:数据存储的仓库
数据库的分类:
非关系型数据库(网格数据库、层次数据库)(“NO SQL”):redis
关系型数据库:oracle、MySQL、sqlserver
关系型数据库:数据库中保存的对象之间可以存在一定的关联关系,并非完全独立。主要反映到以后学习的主外键.
三个名词:
sql:结构化的查询语句,操作oracle数据库的语言
查看当前用户: show user
查看当前用户的所有表 select table_name from user_tables
sqlplus:oracle软件自带的可以输入sql,且将sql执行结果显示的终端
sqlplus 登录之后,可以使用buff(缓存)来存储/执行/修改要执行的sql语句
这里的buff的特点:
1.buff中只能存储一条sql语句(但是这条sql语句可能有很多行)
2.每次放入新的sql语句,会把之前的覆盖掉
3.每次执行sql语句,都会把这个sql语句放到buff里面
l 查看缓存中的sql语句
a 在[定位]的那一行后面追加新的内容
i 在[定位]的那一行下面插入新的一行
c 替换[定位]的那一行中的某些字符串
c/老的字符串/新的字符串
del 删除[定位]的那一行内容
n 后面加内容可以重写这一行
! 后面接终端命令 !clear:清屏 windows中使用$符号 例如:$cls
/ 执行缓存sql命令
clear buffer:清空当前缓存的命令
save test.sql buff中的sql语句保存在test.sql文件中
get test.sql 把test.sql中的内容在加载到buff中,但是没有运行
start test.sql 把test.sql中的内容在加载到buff中并且执行
@test.sql 把test.sql中的内容在加载到buff中并且执行
edit file_name 使用系统默认编辑器去编辑文件
spool file_name 将接下来的sql语句以及sql的运行结果保存到文件中
spool off 关闭spool功能
exit:退出
查询结果不好看,通过column使我们的显示界面好看。
COLUMN last_name FORMAT a15;
可以简写为:
col last_name for a15;
COLUMN first_name FORMAT a15;
pl/sql:程序化的sql语句,在sql语句的基础上加入一定的逻辑操作,如if for…,使之成为一个sql块,完成一定的功能
数据库中对象:
table:表格,由行和列组成,列又称字段,每一行内容为表格的一条完整的数据。
view: 视图,一张表或者多张表的部分或者完整的映射,好比表格照镜子,镜子里面的虚像就是view
除去常见的table和view两种对象以外,oracle数据库还支持如下四种对象
sequence:序列
index:索引,提高数据的访问效率
synonym:同义,方便对象的操作
program unit:程序单元,pl/sql操作的对象
sql的五大分类:
DQL: 数据查询语言 (Data retrieval):select
DML:数据操纵语言(行级操作语言): insert、update、delete
DDL: 数据定义语言(表级操作语言):create、alter、drop、truncate、rename
DTL: 事务控制语言(transaction control):commit、rollback、savepoint
DCL: 数据控制语言 :grant、revoke
建表
建表的格式
create table 表名(
列名1 数据类型,
列名2 数据类型,
列名3 数据类型,
列名4 数据类型
);
create table 表名(
列名1 数据类型 列级约束,
列名2 数据类型 列级约束,
列名3 数据类型 列级约束,
列名4 数据类型 列级约束
);
create table 表名(
列名1 数据类型 列级约束,
列名2 数据类型 列级约束,
列名3 数据类型 列级约束,
列名4 数据类型 列级约束,
表级约束1,
表级约束2
);
表名的要求:
1.必须是字母开头
2.必须是1-30个字符之间的长度
3.表名中只能出现A–Z, a–z, 0–9, _, $, #
4.不能和数据库中已有对象的名字重复
5.不能是数据库中的关键字
列的常用数据类型
1.char
2.varchar
3.varchar2
4.number
5.date
其他类型 BLOB CLOB
BLOB和CLOB都是大字段类型,BLOB是按二进制来存储的,而CLOB是可以直接存储文字的
char varchar varchar2的区别及特点
1. CHAR的长度是固定的,而VARCHAR2的长度是可以变化的
2. CHAR的效率比VARCHAR2的效率稍高。
3. VARCHAR是数据库标准的字符类型
4. VARCHAR2是Oracle自己开发了一个数据类型VARCHAR2
5. VARCHAR2将数据库中varchar列可以存储空字符串的特性改为存储NULL值。
6. Oracle建议使用VARCHAR2而不是VARCHAR
列的约束/行级约束:在列的后面直接加上的约束
列的约束就是对这个列中的值的要求
表级约束:在所有列声明以后加的约束
1.主键约束 PRIMARY KEY primary key
2.外键约束 FOREIGN KEY foreign key
在对应列名后加references + 对应表名(主键)
使用列级约束 声明 外键约束
create table t_order(
id number primary key,
content varchar2(200) not null,
customer_id number references t_customer(id)
);
使用表级约束 声明 外键约束
create table t_order(
id number primary key,
content varchar2(200) not null,
customer_id number,
foreign key(customer_id) references t_customer(id)
);
3.唯一约束 UNIQUE unique
4.非空约束 NOT NULL not null
非空约束(not null)不能声明成表级约束
5.check约束 CHECK check
建表实例
普通的建表例子
create table student(
id number primary key,
name varchar2(200),
age number,
birthday date
);
使用列级约束
create table student(
id number primary key,
name varchar2(100) not null,
email varchar2(100) unique,
gender char(1) check(gender in('f','m')),
age number,
birthday date
);
使用表级约束
create table student(
id number,
name varchar2(20) not null,
age number default 20,
email varchar2(100),
gender char,
primary key(id),
unique(email),
check(gender in('f','m'))
);
使用表级约束联合声明
使用表级约束 声明 联合唯一约束
create table student(
id number primary key,
class varchar2(50) not null,
name varchar2(50) not null,
unique(class,name)
);
使用表级约束 声明 联合主键
create table t_customer(
id number,
name varchar2(50),
primary key(id,name)
);
使用表级约束 声明 联合外键
create table t_customer(
id number,
name varchar(50),
primary key(id,name)
);
表级约束和列级约束对比
1.表级约束和列级约束所写的位置不一样
2.not null约束不能用表级约束来声明
3.表级约束和列级约束声明语法稍有所不同
4.如果要声明的约束为联合主键、联合外键、联合唯一的时候,就一定要用表级约束.
constraint关键字
1.constraint是约束的意思
2.建表的时候可以给约束起一个名字,这个名字起的规律一般会是:表名_列名_约束类型
3.如果没有给约束起名字,那么系统也会给这个约束起一个默认的名字,这不过这个默认的名字对我们来说并不友好(我们看不懂)
4.将来我们可以根据我们之前给约束起好的名字而找到这个约束,然后进行修改
列级约束 起约束名字
create table student(
id number constraint student_id_pk primary key,
name varchar2(100) constraint student_name_nn not n.0ull,
email varchar2(100) constraint student_email_un unique,
gender char(1) constraint student_gender_ck check(gender in('f','m')),
age number,
birthday date
);
表级约束 起约束名字
create table t_customer(
id number,
name varchar2(20) not null,
age number,
email varchar2(100),
gender char,
constraint cus_id_pk primary key(id),
constraint cus_email_un unique(email),
constraint cus_gender_ck check(gender in('f','m'))
);
on delete关键字
on delete语句是在声明外键约束的时候使用的。用户在删除A表中的一条数据,而这条数据被B表中的外键列所引用了,这个时候on delete语句的设置可以告诉oracle这个时候该如何处理
on delete no action(