Oracle数据库基本知识与SQL操作(1)

登录数据库方式:

    超级管理员:system +密码

    Conn sys/pwd as sysdba

    windows打开sql plus 命令:sqlplus /nolog

一.查看数据库当前的状态、用户、数据库:

select status from V$INSTANCE;  

show user

show parameter service;

查看数据库是何种状态,oracle必须在打开状态下才能进行操作。

二、启动数据库命令 startup

数据库四种启动模式:

1.nomount(只创建实例不加载数据库且不会打开数据文件)

例如:startup nomount

2.mount(为实例加载数据库但保持数据库为关闭状态)

例如:startup mount

3.open(正常启动数据库模式完成数据库实例的装载启动以及打开数据库)

例如:startup  [open]

4.force(强制启动数据库模式)

例如:startup force

三、关闭数据库命令 shutdown

数据库四种关闭模式:

1.normal :断开所有连接,阻止新连接

例如 shutdown normal

2. immediate;:强制终止回退事务,并关闭数据库

例如:shutdown immediate

3.transactional:组织新连接,等待事务完成后断开连接并关闭数据库

例如:shutdown transactional

4.abort:终止,强制关闭数据库,会丢失当前操作。

例如:shutdown sbort

四、修改数据库命令:alter database +<状态或命令>;

修改表空间命令:

  1. 重命名:alter tablespace a rename to new_a;
  2. 对表空间的属性进行修改(数据文件大小,扩展,最大空间):

alter tablespace new_a

add datafile 'H:test2.dbf'

size 5m

reuse autoextend on next 1m maxsize 10m;

五、表空间:

      每个Oracle数据库都是由若干个表空间构成的,用户在数据库中建立的所有内容都被存储到表空间中。一个表空间可以由多个数据文件组成,但一个数据文件只能属于一个表空间。与数据文件这种物理结构相比,表空间属于数据库的逻辑结构。

  在每个数据库中,都会有一个名为SYSTEM的表空间,即系统表空间。还会有SYSAUX、TEMP、UNDO、USERS等表空间,这些都是在创建数据库时自动创建的。管理员可以创建自定义的表空间并分配给指定用户,也可以为表空间增加或删除数据文件。

1.创建表空间并指定数据文件属性(需要system权限):

create tablespace tablespace_name

datafile  file_clause

file_clause形式如下:‘路径’文件大小

例如:datafile  ’D:filename’ size 10M;

Eg:创建大小为50m的表空间test,包含一个数据文件,禁止自动扩展数据文件

Create tablespace test

Logging

Datafile ‘H:test1.DBF’

Size 50M

Reuse autoextend off;

Eg:创建临时表空间

create temporary tablespace b

tempfile 'H:test1.dbf'

size 10m

 extent management local;

六、表空间分类:

  1. 用户表空间user
  2. 临时表空间temp
  3. 回滚、撤销表空间undo
  4. 系统表空间system
  5. 辅助系统表空间sysaux

七、查看表空间:

1.查看表空间所有属性:

select * from Dba_Tablespaces;

2.查看表空间名:

select tablespace_name from Dba_Tablespaces;

3.查看特定表空间名:

select tablespace_name from Dba_Tablespaces where tablespace_name='B';

八、删除表空间:

drop tablespace b including contents and datafiles;

九、创建用户步骤:创建用户     授予权限

1. 用户创建并指定保存的表空间

Create user 用户名 identified by 密码

(default tablespace users

temporary tablespace temp

quota 3M on users)可省略;

2.用户

    1. 查看所有用户:

Select username form all_users;

   2.查看数据库dba权限用户:

Select username form dba_users;

   3.精确查看某个用户(用户名大写):

Select username from dba_users where username='SU3'

   4.修改用户密码:

alter user 用户 identified by 新密码;

    5.删除用户

drop user 用户名 (cascade级联);

3.权限

   1.授予权限

grant create session to 用户名; 只赋予用户登陆权限

grant resource to 用户名; 赋予该用户建表没有空间的限制

grant dba to 用户名;     赋予dba(相当于所有权限)的权限给用户

   2.收回权限

Revoke 权限 (on 对象名)from 用户名;

十、数据表的创建

Oracle支持多种类型:

1.数据类型

1.数值数据类型:number

Number(p[ , s ])取值范围为1~30,

意义为该数值共有p位,小数点后有s位。超过位数限制后按照四舍五入舍弃多余位数。如果为整数则不需要逗号s

2.日期/时间类型:date、timestamp

查询当前时间:Select sysdate from DUAL;

修改时间格式:Alter session set nls_date_format=’yyyy-mm-dd’;

插入日期信息时应该把格式相匹配,否则无法插入。

3.字符串类型 :char(n)、varchar2(n)、

nvarchar2(n):Unicode可变字符型,保存中文常用

long  :  储存变长的字符串

2.表操作

  1.创建表语句(表名开头首字符应为字母且一个用户下表名不重复)

create table 表名(属性 数据类型)

egcreate table a

(

id number(20)primary key,

name varchar(10) not null ,

sex char(4)check(sex in('男','女'))

);

2.查看表的字段信息

describe 表名;

eg:describe student;

3.修改表结构:

    修改表中数据应add,modify等关键字,修改表时使用alter,drop等关键字。

Alter table 表名 +属性

{

Rename +(关键字column)/旧字段名 to():修改表/字段名

Add():向表中增加字段信息

Drop +column/() :删除字段或约束

Modify() :修改表的某一列的属性

}

  1. 删除表

eg: drop table 表名 cascade constraints;

十一、完整性约束

1、域完整性

非空:not null

2、实体完整性(行完整性)

唯一性约束unique,

主键约束primary key,

检查约束check()

Eg

create table d(

id number not null,

name char(20) unique,

sex char(2) check (sex in('男','女')) );

3、参照完整性(引用完整性)

存在主外键要保证主外键之间的参照数据一致性

外键:foreign key

EG:

create table a(

name Varchar2(10) primary key,

age number(5)

 )

create table b(

name Varchar2(10) foreign key,

sex char(2)

 )

4、默认值约束:

1.在表中创建默认值

属性 类型 default 默认值‘;

Eg:sex char(2)default男‘;

2.修改默认值

Egalter table 表名

            Sex char(2) default ‘女’;

3.删除默认值

       Egalter table 表名

            Sex char(2) default null;

5、查看约束

Select constraint_name, constraint_type,table_name,last_change

From user_ constraints

Where table_name=’TMP_PK10’;

1.自增约束:

    字段名 数据类型 generated by default as identity   ;

一个表只能有一个字段使用自增约束,且该字段必须为主键的一部分

Eg:定义数据表tmp_id,指定学生编号自动递增。SQL语句如下:

CREATE TABLE tmp_id(

id NUMBER(11) GENERATED BY DEFAULT AS IDENTITY,

name VARCHAR(25),

sex CHAR(4),

class VARCHAR(50)

);

上述语句执行后,创建数据表tmp_id,其id列字段的值在进行数据添加时不需要用户提供数据,由系统维护。Id列初始值从1开始,每添加一条新记录,该值自动加1。

  

十三、索引

     索引在Oracle数据库中是占据储存空间的,在其他数据库中不占。在创建主键约束时数据库会自动生成一个与约束名字相同的索引。

1、创建索引

Eg:create unique index unique_ind_f_属性  on 表名(属性);

十四、数据操作 

       新建的数据库表是空表,提供了存储和操作数据的结构。针对表中数据的操作主要包括插入、更新、删除、查询等。

      其中插入(INSERT)、更新(UPDATE)和删除(DELETE)操作会使数据库中的数据发生变化,因此这三种操作在SQL语言中被称为数据操作语言(DML)

1、插入数据 insert

       常用的插入方式有:插入完整的记录、插入记录的一部分、插入多条记录以及插入另一个查询的结果。另外,还可以为数据表批量导入数据。

    1.插入命令INSERT语句的语法格式如下:

    NSERT INTO <表名>[(<列名1>,<列名2>,...n)]

     VALUES(<列值1>,<列值2>,...n);

该语句的功能是向指定表中插入一行记录。列名列表“(<列名1>,<列名2>,...n)”提供了插入数据对应的列,VALUES后的列值列表“(<列值1>,<列值2>,...n)”提供了要插入到表中的数据值。

     说明:

(1)插入数据时,列名列表可以不与数据表的结构一致。只要保证列值列表中的数据与列名列表中的列名、数据类型一一对应即可。列名列表可以不包含数据表中的所有列,但是缺失的列必须是可以为空或有默认值约束的列。当没有为这些列提供数值时,系统会自动为其填充空值或默认值。

(2)列名列表可以省略。如果不指定表名后面的列名列表,则VALUES子句中要给出每一列的值,并且其提供的值要与原表中字段的顺序和数据类型完全一致,而且不能缺少字段。

(3)VALUES中描述的值可以是一个常量、变量或一个表达式。字符串类型的数值必须用单引号引起来。字符串转换函数TO_DATE可以把字符串形式的日期型数据转换成Oracle规定的合法的日期型数据

2. 插入完整的记录

       向表中插入完整的记录,指在插入数据时为每个列都指定数据值。可以有两种方式:一种是指定所有字段名,另一种是不指定字段名。

Eg:

     向student表中插入新记录,指定所有列值。

SQL语句如下:

INSERT INTO student(Snum,Sname,Ssex,Sbirth,Sdept,Snote)

VALUES('1506101','王玫','女','02-1月-1997','计算机系','入学新生');

INSERT INTO student(Snum,Sname,Sbirth,Ssex,Snote,Sdept)

VALUES('1506102','李东','13-3月-1998','男','入学新生','计算机系');

INSERT INTO student

VALUES('1506103','孙翔','男',TO_DATE('19971120','YYYYMMDD'),'计算机系','入学新生');

      本例中,前两条语句给出了完整的列名列表和值列表。第一条语句给出的列名列表和表结构一致。第二条语句给出的列名列表和表的结构不一致。要保证列名列表和列值列表中的数据一一对应。第三条语句省略了列名列表。这时候要保证列值列表与表结构完全一致。如果表结构修改了,如对列进行增加、删除或者位置改变的操作,在进行插入时数值列表的顺序也要相应修改。如果指定列名列表,则不会受到表结构的影响。

       日期型数据在输入时需要注意数据库当前的默认格式,需要输入正确的日期格式才能正确插入数据。也可以使用字符串转换函数TO_DATE()来将字符串表示的数据按照对应的格式转换成日期型数据。

       需要注意,使用命令方式对表数据进行插入、更新和删除后,还需要使用COMMIT命令进行提交,这样才会把数据的改变真正保存到数据库中。为方便介绍,本书后面的SQL语句均省略COMMIT命令,运行时请自行添加。

3.插入多条记录

     使用多个INSERT语句可以向数据表中插入多条记录。

Eg:向student表中插入2条记录。SQL语句如下:

BEGIN

INSERT INTO student(Snum,Sname,Ssex)

VALUES('1506105','马丁','男');

INSERT INTO student(Snum,Sname,Ssex)

VALUES('1506106','郭阳','女');

END;

记得提交!!!!

Commit

Eg:

在一条INSERT语句中插入2条新记录。SQL语句如下:

INSERT INTO student(Snum,Sname,Ssex)

SELECT '1506108','刘飞飞','女' FROM DUAL

UNION ALL

SELECT '1506109','王子辰','男' FROM DUAL;

系统提示:

2 行已插入

注意:

      一个同时插入多行记录的INSERT语句可以等同于多个单行插入的INSERT语句。但是多行的INSERT语句在处理过程中,效率更高。因为Oracle执行单条INSERT语句插入多行数据比使用多个单行INSERT语句速度快。所以,在插入多条记录时,最好选择使用单条INSERT语句的方式插入。

4.运行begin-end时,要看到插入成功时要先打开输出模式(默认为off):

语句:Set serveroutput on;

5.插入另一个查询的结果

       INSERT语句可以将其他表中已存在的数据以SELECT查询结果的形式插入到表中,从而快速地从一个或多个表中向另一个表中插入多行。

其基本语法格式如下:

INSERT INTO 表名1(列名1,列名2,...n)

SELECT 数值1,数值2,...n

FROM 表2

WHERE 查询条件;

其中,SELECT语句后的“数值1,数值2,...n”需要与“(列名1,列名2,...n)”的列的数据类型一一对应。

Eg

创建一个新表new_student,将student中的部分数据插入到新表中。插入语句如下:

INSERT INTO new_student(num,name,sex)

SELECT Snum,Sname,Ssex

FROM student;

2、更新 update

    对于表中已有的数据进行修改称为更新操作,采用UPDATE命令进行。

其语法结构如下:

UPDATE 表名

SET 字段名1=数值1,字段名2=数值2,...n

WHERE 条件表达式;

       其中,“字段名1=数值1,字段名2=数值2,...n”表示为指定的字段赋予新的数值。更新多个列时,“列=值”之间要有逗号隔开。最后一列不需要逗号。WHERE条件表达式代表更新记录需要满足的条件,即只有符合条件的数据才会被修改。保证UPDATE语句以WHERE子句结束。如果忽略了WHERE子句,Oracle将更新所有的行。

Eg:

     在student表中,将“刘飞飞”同学的系别改为“计算机系”,备注给为“入学新生”。SQL语句如下:

UPDATE student

SET Sdept='计算机系',Snote='入学新生'

WHERE Sname='刘飞飞';

系统提示:1行已更新。

如果有多行符合WHERE条件的数据,这些数据都将被修改。

3、删除数据:delete

      从数据表中删除数据使用DELETE语句,DELETE语句允许使用WHERE子句指定删除条件。

其语法格式如下:

DELETE FROM 表名

[WHERE 条件表达式];

      在“表名”指定的表中,删除符合WHERE子句条件的所有记录。如果没有WHERE子句,DELETE语句将删除表中的所有记录。

Eg:

      在student表中,删除学号为“1506108”和“1506109”的学生记录。SQL语句如下:

DELETE From student

WHERE Snum='1506108' OR Snum='1506109';

系统提示:2行已删除。

     删除student表中所有记录。SQL语句如下:

DELETE From student;

系统提示:6行已删除。

     如果想删除表中所有的记录,还可以使用TRANCATE TABLE语句。如上面的例子可以采用语句“TRANCATE TABLE student;”实现。TRANCATE TABLE命令直接删除原来的表并重新创建一个表,因此执行速度比DELETE快

小结

    前一部分得oracle暂时就写到这,基本操作大致说完了,可能有些遗漏或者错误/不适用等问题建议读者再查一查,也可以在下面留言,我会及时回复的。谢谢大家观看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小宿长谈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值