登录数据库有两种认证方式:
操作系统认证:默认情况下,如果在本机服务器登录oracle数据库,可以使用操作系统认证,不用输入数据库用户名及密码
用户密码认证:如果是远程连接数据库,则需要使用数据库的用户名 密码进行认证

oracle数据库默认有两个超级用户sys system


windows系统中查看oracle数据库是否已经启动
开始-控制面板-管理工具-服务

查看数据库名称
SQL> show parameter db_name



sql即结构化查询语言,市一中数据库查询和程序涉及语言,用于存取数据以及查询、更新和管理关系数据库系统。



数据库字典表dba_users表存储着oracle数据库的所有用户信息

查询用户的状态
SQL> select username,account_status from dba_users where username='SCOTT';

USERNAME                       ACCOUNT_STATUS
------------------------------ --------------------------------
SCOTT                          OPEN


where条件后面的每个字段所表示的值是区分大小写的。


查看用户有哪些表
select table_name from user_tables;




字符左对齐
数字右对齐



表:是数据库中用来存储数据的对象,是有结构的数据的集合,是整个数据库系统的基础。


表的列类型,可以是数字、文本类型。
如果是数字类型,则不能输入文本,文本类型的字段则可以输入数字,数字可以作为文本。

主键:主键是关系数据库表中的某一列或者某几列的集合。它能够唯一标识数据库表中的一行。主键不能包含空值。


外键:外键是关系数据库表中的一列或者某几列的组合;它的值或者与另外一个表的某一列或者某几列相匹配,这一列是另一个表的主键。

oracle数据库共有5个约束:主键 外键 非空 唯一 条件
非空:就是这个列的值不能为空(not null)
唯一:这个列的值在表中是唯一存在的,不能重复,但可以为空值null
条件:可以对列的值设定在某个条件范围之内。比如,人的年龄就不能为负数,可以设置这个列的条件大于0,小于200


表的主键和唯一约束很像,有哪些区别?
表的主键是列的值为表中的唯一标识,不能为空值null,而表的唯一约束是列的值在表中唯一存在,可以为空值null


create table items(itemNO number(2) constraint pk_items primary key,itemName varchar2(20) not null);



如果是主键,该列的值不能有重复数据。
如果是外键,需要确认items表的deptno列中是否存在3号这个项目。没有存在是不能增加的,这就可以显示出两个表关联外键所起的作用。


alter table items modify (manager varchar2(8));

alter table items drop column manager;




create user lisi identified by lisi;

grant connect to lisi;
grant select on dept to lisi;
grant select on bonus to lisi;
grant select on salgrade to lisi;


revoke select on emp from lisi;

grant select,insert,delete,update on emp to lisi;

修改密码:
alter user lisi identified by lisi321;


删除用户
drop user lisi;
drop user lisi cascade;


查看数据库用户本身拥有的权限
select * from session_privs;

查看数据库用户拥有的角色
select * from user_role_privs;

查看角色拥有哪些权限
select * from dba_sys_privs where grantee='CONNECT';

一般开发人员拥有connect resource两个角色就可以满足需求了




数据库有哪些重要的对象:
表 视图  索引  函数  序列  触发器

对象是性质相同的数据元素的集合。

列中的数据类型和约束决定了数据的合法性和统一性

创建序列:
create sequence bookId
  start with 1
  increment by 1
  maxvalue 999999
  nocache
  nocycle;



序列的nextval表示序列的下一个数值,currval表示序列的当前数值


虚表dual是oracle数据库与数据字典一起自动创建的一个表,它只有一列dummy,数据类型为varchar2(1)





创建一个通过员工的ID号获取其薪水的函数
create or replace function get_empsal(emp_no in number)
return number
is emp_sal number(7,2)
begin
    select sal into emp_sal from emp where empno=emp_no;
    return (emp_sal);
end;



create or replace function这是创建或者已经存在的函数,函数名为get_empsal,括号中的emp_no为输入的工号,输入的类型是number
return number该函数定义返回一个数值类型的值


测试函数的写法:
select get_empsal(7566) from dual;


存储过程是一组为了完成特定功能而建立的sql语句集,经编译后存储在数据库中。
用户通过指定存储过程的名字并给出参数来执行它



根据员工号来删除员工信息的存储过程
create or replace procedure delempno(empid in number) is
begin
    delete from emp where emp.empno=empid;
    commit;
end delempno;

用法:
execute delempno(7566);




索引是对数据库表中一列或多列的值进行排序的一种结构。


创建一个存储过程向某表插入大量数据
create table test_index(id number,name varchar2(200));

create or replace procedure insert_data
is
temp varchar2(20):= 'Insert Data'
begin
    for i in 1...10000000 loop
        insert into test_index(id,name) values(i ,temp);
    end loop;
    commit;
end;

execute insert_data;

同义词是现有对象的一个别名。分为私有同义词和公共同义词。

查询用户是否有创建同义词的权限
select * from session_privs where privilege like '%SYNONYM%';

grant create any synonym to scott;

grant create public synonym to scott;



oracle数据库中函数和存储过程有什么区别?
1 函数必须有返回值,而过程没有返回值
2 函数可以单独执行,而过程必须通过execute执行
3 函数可以嵌入sql中执行,而过程不能。
我们可以将比较复杂的查询写成函数,然后到存储过程中调用这些函数。






关闭数据库的不同命令有何区别