基础认识
使用数据库的前期准备
-
使用Oracle,需要打开两个服务(以Oracle 11g Express edition为例),具体操作如下:
- Windows操作系统中,使用快捷键Win+Q打开搜索栏,搜索“服务”
- 在服务中找到以下两个服务后,右键启动
- OracleXETNSListener
- OracleServiceXE
两个服务的作用:
OracleXETNSListener作用:Oracle监听器,监听用户的请求等等(如果有客户连接到数据库,这个功能必须得打开)【当被监听的对象发生变化时(某种请求),监听器的某个方法将会被立即执行】。
OracleServiceXE作用:数据库得主服务器,此服务启动才能启动Oracle。
- Oracle的第一行代码(以图形界面软件Oracle SQL developer为例)
- 新建sys管理员数据库连接
![](数据库图片/Oracle SQL developer 连接.png)
- 备注:如果你要创建新的用户,必须得通过sys系统管理员/system本地管理员才能新建其他用户,因为Oracle默认只有sys系统管理员/system本地管理员/Scott普通用户(默认不解锁)
**防止掉坑:**
名词解释-端口
- 1-49151端口:依据互联网传输层TCP/IP协议的协议通信,不同的协议都对应不同的端口
- 1521 对应Oracle数据库default listener
在命令行界面(cmd)使用sqlplus遇到的问题
- Oracle乱码:客户端服务端的字符集设置不一样:
1、常用unicode字符集 set NLS_LANG=american_america.AL32UTF8 可以通过修改注册表键值永久设置 HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOMExx\NLS_LANG
2、常用中文字符集(一般不用) set NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
3、需要注意的点:环境变量
注册表
- 以后快速找到某个注册表:将注册表添加到收藏夹
- 找注册表的值:模糊搜索:“HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\”(适时可以加‘/’)
基础知识
varchar和nvarchar
The VARCHAR2 is a Unicode-only datatype
The NVARCHAR2 is use a non-Unicode character set
NUMBER(20,2):
用户的创建
/* 数据库的操作(Oracle的注释有两种/*和--和) */
--一开始的用户只有管理员:sys超级管理员,system本地管理员,(scott普通用户,默认不解锁)通过这两个管理员可以创建其他用户
--创建myDataBase用户;identified by后面是用户密码;
--刚创建的用户是没有任何权限,通过grant/revoke授予/收回用户的权限
--resource访问权限,访问表等;connect连接数据库;dba所有的权限;
create user myDataBase identified by uber;
grant resource,connect,unlimited tablespace,create view to myDataBase;
--dual表是实际存在的虚表,由sys创建,任何用户都可以读取
--可以通过该dual表查看"系统时间","显示当前用户"(和show user的作用一样)
select sysdate from dual;
select user from dual;
show user;
--查看所有的用户(只能sys/system管理员模式下查看)
select username from dba_users;
--提交/回滚
commit;
rollback;
--删除用户
drop user mydatabase;
函数
-- trim / ltrim / rtrim(修剪):删除左右空白字符串
-- 输出名称是以“DB_”开头,倒数第三个字符是i
select * from course where trim(cname) like 'DB\_%i__'escape '\';
--转义字符 escape'\'(斜线后面的不会被理解为通配符)
select * from course where trim(cname) like 'DB\_%i__'escape '\';
--any(全部中取“一个”)/all(“全部”)
select sname,sage from student where sage<any(select sage from student where sdept='CS')and sdept<>'CS';
select sname,sage from student where sage<all(select sage from student where sdept='CS')and sdept<>'CS';
集合
-- 自己理解:只能对于同一个表(值域要想等),但是又可以通过and or 来实现,所以集合没什么用
-- union:并集
-- intersect:交集
-- minus:差集
select * from sc where cno='1'
union
select * from sc where cno='2';
表的操作
数据操作
字符集编码
数据类型(列类型)
列属性(列约束)
建表规范
初识SQL
SQL的动词
SQL功能 | 动词 |
---|---|
数据定义 | Create,Drop,Alter |
数据操纵 | Insert,Update,Delete |
数据查询 | Select |
数据控制 | Grant,Revoke |
数据定义
操作对象 | 创建 | 删除 | 修改 |
---|---|---|---|
模式 | Create Schema | Drop Schema | — |
视图 | Create View | Drop View | — |
表 | Create Table | Drop Table | Alter Table |
索引 | Create Index | Drop Index | Alter Index |
Oracle中一个模式对应一个表,因此不用特意的去操作(增删改)Schema
视图->外模式:不能修改视图,只能删除+重新创建
表->模式
索引->内模式
基本表的SQL操作
数据定义
定义基本表
联想具体记忆:表头的名字+表头的类型+约束条件【写代码的时候就像说话一样】
- 注意:学生选课表的外码cno,sno的类型要和student的sno、course的cno的类型要一致!!
-- 建立一个Student表
Create table student
(sno char(9) primary key,
sname char(20) unique,
ssex char(2),
sage smallint,
sdept char(20)
);
--建立一个Course表
Create table Course
(cno char(4) primary key,
cname char(40)not null,
cpno char(4),
ccredi