SQL之Oracle常规操作

2018年5月20日

操作平台:Oracle数据库

背       景:学校的数据库上机配置环境为Oracle数据库,非图形化环境,swarm想记下来一些常规的建表、查表等操作命令。

内       容:

  1.创建表的命令格式

     CREATE TABLE <表名>

     (<属性名><数据类型>[NULL|NOT NULL],...,

     [CONSTRAINT<主键名>PRIMARY KEY (主属性列表),]

     [CONSTRAINT<外键名>FOREIGN KEY (外键属性列表)REFERENCES<被参照表名(被参照表主键名)>,]...,

     [CONSTRAINT<检查名>CHECK<较验条件>]

     );

  示例:

     CREATE TABLE Grade

     (

      学号     VARCHAR2(12),

      课程号  VARCHAR2(7),

      成绩      NUMBER(3,0),

      CONSTRAINT PK_Grade PRIMARY KEY 学号,课程号,

      CONSTRAINT FK_Grade_To_Student FOREIGN KEY 学号 REFERENCES Student 学号,

      CONSTRAINT FK_Grade_To_Course FOREIGN KEY 课程号 REFERENCES Student 课程号,

     );

     /**

      *常用的数据类型参见如下:

      *VARCHAR2(size)                            储存可变长的字符数据

      *NUMBER(precision[,<scale>])        precision指定总位数,scale指小数点位(默认为0,范围是-84~127,为负时是左舍入)

      *DATE                                               存储日期和时间信息

      */

  2.表中插入数据

    INSERT INTO <表名>[(<属性列1>[,<属性列2>]...)] VALUES (<常量1>[,<常量2>]...);

    a.对于数字,直接写;

    b.对于字符列或者日期列,使用单引号

    c.插入数据须与表结构、实体完整性相符合

  示例:

    INSERT INTO Student VALUES ('201013137001','张三','M','13137',18);

  3.表中删除数据

    DELETE FROM <表名>[Where <条件>];

  示例:

    DELETE FROM Grade WHERE 学号=‘95001’;

  4.表中修改数据

    UPDATE <表名>SET <属性列名>=<表达式> [,<属性列名>=<表达式>]...

      [WHERE <条件>];

  示例:

    UPDATE Student SET 系名='电信' where 学号='05001';

  5.创建视图的命令格式

    CREATE VIEW <视图名>[(<列名>[,<列名>]...)]

    AS <子查询>

    [WITH CHECK OPTION];

  示例:

    CREATE VIEW IS_Student

    AS

    SELECT Sno,Sname,Sage

    FROM Student

    WHERE Sdept='IS';

  6.创建用户|角色的命令格式

    /*创建一个用户*/

    CREATE USER 用户名 IDENTIFIED BY 口令

    [DEFAULT TABLESPACE 默认表空间名]

    [QUOTA [数值K|M]|[UNLIMITED] ON 表空间名]

    [PROFILE 概要文件名]

    [ACCOUNT LOCK]|[ACCOUNT UNLOCK]

    指定一个已存在的表空间作为默认表空间,临时表空间一般使用Oracle中的temp

  示例:

    CREATE USER test IDENTIFIED BY test       /*IDENTIFIED BY 用于指定用户口令*/

    DEFAULT TABLESPACE users                      /*指定用户默认的表空间*/

    TEMPORARY TABLESPACE temp                /*指定用户的临时表空间*/

    QUOTA 3M ON users;                                     /*指定表空间的最大容量*/

    /*创建一个角色*/

    CREATE ROLE <角色名> IDENTIFIED BY <口令>

  7.实体授权命令

    GRANT <权限> ON [<用户名>] <表名> TO <用户名|PUBLIC>

        [WITH GRANT OPTION]                 /*WITH GRANT OPTION表示权限可授予其他用户*/

  示例:

    /*test拥有对Student表进行查询和修改的权限,且能将权限授予他人*/

    GRANT select,update ON Student TO test WITH GRANT OPTION;

     /**

    *常用权限如下:

    *select                              查询权

    *update                             修改权

    *delefte                             删除权

    *insert                               插入数据权限

    *ALL PRIVILEGES           所有操作权限

    */

  8.删除类命令

    /*删除一个表,如果存在依赖关系,请先删除被参照表*/

    DROP TABLE <表名>;

    /*删除一个视图*/

    DROP VIEW <视图名>;

    /*回收实体的权限*/

    REVOKE <权限> ON <表名> FROM <用户名>;

  9.查看表结构、用户权限类命令

    /*查看某个表的结构*/

    DESC <表名>;

    /*查看当前数据库中所有表

     *USER_TABLES是一个数据库系统表。数据库系统表是由DBMS创建并管理的,用于存储数据库信息,USER_TABLES表中包含所有用户的数据表

     */

    SELECT table_name FROM user_tables;

    /*

     *查看完整性约束条件

     */

    SELECT CONSTRAINT_NAME,CONSTRAINT_TYPE

    FROM user_constraints

    WHERE TABLE_NAME='GRANDE';//表名字符全大写

    /*

     *查看当前用户

     */

    show user;

小结和体会:

    Oracle编码把我狠狠的坑了一把,我在自己的笔记本上用notepad++写的sql语句,拿到实验室用start命令执行,然后全报未识别字符错误。。

    都是编码惹的祸,自己的是utf-8。Oracle字符集是ZHS16GBK。只能上win10记事本了。(以前编程都是ide,真的没关心过编码的问题)

    Oracle对个格式要求有点严,字符串用单引号括起,mysql好像单双都行。。。

猜你喜欢

转载自www.cnblogs.com/goodswarm/p/9064277.html