• 表的创建、修改及约束


    1、创建表

    CREATE TABLE EMP2 AS SELECT * FROM EMP WHERE 1=2;--只复制表结构
    CREATE TABLE TEST1 AS SELECT EMPNO,ENAME,JOB,SAL FROM EMP WHERE DEPTNO=10;--只复制另一个表中的某几个字段
    CREATE TABLE EMP2 AS SELECT * FROM EMP; --复制整张表,包括数据
    CREATE TABLE EMP2 AS SELECT * FROM EMP WHERE rownum<=10;--只复制前10行数据

    2、插入数据

    INSERT INTO DEPT VALUES(50,'DBA','HK');--所有字段都插入值
    INSERT INTO DEPT(DEPTNO,DNAME) VALUES(60,'TEST');--只插入其中几个字段值
    INSERT INTO EMP2 (SELECT * FROM EMP);--使用子查询插入数据时,不要加values或as
    INSERT INTO EMP2 (SELECT * FROM EMP WHERE ROWNUM<=10);

    3、更新表中的数据

    update emp2 set empno=2222,ename='rusky' where empno=1111;--如果不加where条件,则更新表中的所有行。
    update emp2 set (empno,ename)=(2222,'rusky') where empno=1111;--ORA-01767: UPDATE ...SET 表达式必须是子查询 
    update emp2 set (ename,job,hiredate)=(select ename,job,hiredate from emp where empno=7369) where empno=1111;--使用子查询修改表
    DELETE FROM TEST1 WHERE EMPNO=7782;--删除表中的某一行记录
    DELETE FROM TEST;--不加WHERE条件,清空表中所有记录
    DELETE FROM EMP2 WHERE DEPTNO=(SELECT DEPTNO FROM DEPT WHERE DNAME='SALES'); --使用子查询删除记录

    4、修改表结构

    ALTER TABLE DEPT2 ADD (MANAGER NUMBER(4)); --增加列
    ALTER TABLE DEPT2 MODIFY(MANAGER NUMBER(4));--修改列属性
    ALTER TABLE DEPT2 DROP COLUMN MANAGER;--删除表中的字段
    DROP TABLE DEPT2;--直接删除表,包括表数据和表结构。
    TRUNCATE TABLE DEPT2;--只清空表中的数据
    RENAME DEPT2 TO DEPT3;--修改表名
    COMMENT ON TABLE DEPT3 IS 'THIS IS A TEST TABLE'; --给表增加注释
    COMMENT ON COLUMN DEPT3.MANAGER IS 'THE MANAGER OF THIS DEPARTMENT';--给某个字段增加注释
    ----

    oracle:修改列名
    alter table 表名 rename column 现列名 to 新列名;
    mysql:
    alter table 表名 change column 现列名 新列名 varchar(10);

     

    5、相关查询及其它

    SELECT * FROM USER_TABLES; --查看用户所有表
    SELECT DISTINCT OBJECT_TYPE FROM USER_OBJECTS; --查看用户拥有的数据类型
    SELECT * FROM USER_CATALOG; --查看用户拥有的表、视图、同义词、序列
    查看表、字段、视图、同义词等的注释:
    ALL_COL_COMMENTS
    USER_COL_COMMENTS
    ALL_TAB_COMMENTS
    USER_TAB_COMMENTS

    ====
    几种不常见的数据类型
    LONG:可保存最大长度为2GB的字符数据
    CLOB:可保存最大长度为4GB的字符数据
    BLOG:可保存最大长度为4GB的二进制数据
    BFILE:在外部文件中存储的二进制数据,最大为4GB
    RAW and LONG RAW:存储二进行数据

    6、约束
    --约束用于确保数据库数据满足特定的商业规则。在Oracle中,约束包括:not null、unique、primary key, foreign key和check五种。

    CREATE TABLE Goods(
    GoodsId char(8) primary key, --主键
    GoodName varchar2(50),
    UnitPrice number(10,2) check(UnitPrice>0),--单价必须大于0
    Category varchar2(30),
    Provider varchar2(100));
    --添加注释
    COMMENT ON TABLE Goods is ' 商品表Goods(商品号GoodsId,商品名GoodName,单价UnitPrice,商品类别Categroy,供应商Provider)'
    
    CREATE TABLE Customers(
    CustomerId char(8) primary key, --主键
    Name varchar2(30) not null,--姓名允许为空
    Address varchar2(150),
    Email varchar2(100) unique, --Email唯一
    Gender char(2) default('') check(Gender in('','')), --性别只能是男或女
    CardId char(18));
    --添加注释
    COMMENT ON TABLE Customers is '客户表Customers(客户号CustomerId,姓名Name,住址Address,电邮Email,性别Gender,身份证CardId)'
    
    CREATE TABLE Purchases(
    CustomerId char(8) references Customers(Customerid), --外键
    GoodId char(8) references Goods(GoodsId),
    Num number(10) check(Num between 1 and 30));
    --添加注释
    COMMENT ON TABLE Purchases is '销售表Purchases(客户号CustomerId,商品号GoodsId,购买数量Num)'

    A、表级定义
    表级定义是指在定义了所有列后,再定义约束,这里需要注意,not null约束只能在列级上定义。
    案例:

    sql> create table Goods(
    GoodsId char(8),GoodsName varchar2(50), Category varchar(30),
    constraint PK_GoodsId primary key(GoodsId));

    B、列级定义
    列级定义是在定义列的同时定义约束。
    案例:

    sql>create table Goods(
    GoodsId char(8) constraint PK_GoodsId primary key ,--主键
    GoodName varchar2(50),
    UnitPrice number(10,2) check(UnitPrice>0),--单价必须大于0
    Category varchar(30),
    Provider varchar(100));

    --添加、修改约束
    --如果在建表时忘记建立必要的约束,则可以在建表后使用alter table命令为表增加约束,但是要注意:增加not null约束时,需要使用modify选项,而增加其他四种约束使用add选项。

    ALTER TABLE Goods modify GoodsId not null;
    ALTER TABLE Customers add constraint UQ_CardId unique(Cardid);

    --删除约束

    sql>alter table 表名 drop constraint 约束名称;
    ALTER TABLE Customers drop constraints UQ_CardId;

    --修改约束名

    ALTER TABLE EMPLOYEE RENAME CONSTRAINT PK_EMPLOYEE TO PK_EMPLOYEE1;

    特别说明:
    在删除主键约束的时候,可能有错误。比如
    alter table 表名 drop primary key;
    这是因为如果在两表存在主从关系,那么在删除主表主键约束时,必须带上cascade选项。
    sql> alter table 表名 drop primary key cascade;
    --查看约束:
    SELECT * FROM USER_CONSTRAINTS;
    SELECT * FROM USER_CONS_COLUMNS;
    ================
    其它示例:

    列级定义约束:
    CREATE TABLE DEPARTMENT(
    DEPTID NUMBER(2) PRIMARY KEY,--或者DEPTID NUMBER(2) CONSTRAINT PK_DEPARTMENT PRIMARY KEY,
    NAME VARCHAR2(12),
    LOC VARCHAR2(12)
    );
    表级定义约束:
    CREATE TABLE EMPLOYEE(
    EMPID NUMBER(4),
    NAME VARCHAR2(10),
    DEPTID NUMBER(2),
    CONSTRAINT PK_EMPLOYEE PRIMARY KEY(EMPID),
    CONSTRAINT FK_DEPARTMENT FOREIGN KEY(DEPTID) REFERENCES DEPARTMENT(DEPTID)
    );

    ====
    定义多列的复合约束

    CREATE TABLE DEPARTMENT2(
    DEPTID NUMBER(2),--或者DEPTID NUMBER(2) CONSTRAINT PK_DEPARTMENT PRIMARY KEY,
    DNAME VARCHAR2(12),
    LOC VARCHAR2(12),
    PRIMARY KEY(DEPTID,DNAME)
    );
    
    CREATE TABLE EMPLOYEE2(
    EMPID NUMBER(4) PRIMARY KEY,
    NAME VARCHAR2(10),
    DEPTID NUMBER(2),
    DNAME VARCHAR2(12),
    CONSTRAINT FK_DEPARTMENT1 FOREIGN KEY(DEPTID,DNAME) REFERENCES DEPARTMENT2(DEPTID,DNAME) ON DELETE CASCADE--当删除部门表中的某个部门信息时,级联删除员工表中的 
    DEPTNO,DNAME.或者这样:ON DELETE SET NULL,设为null
    );
  • 相关阅读:
    AOC的服务还不错
    浅谈Java、MySQL的中文排序问题
    祝cnBlogs的Blogger们新年快乐!
    GT 3.9.4以及今天的工作
    堆排序
    桶排序
    常用排序算法稳定性分析
    VS2010远程调试环境配置详解
    基数排序
    如何修改数据库的服务器名称
  • 原文地址:https://www.cnblogs.com/rusking/p/4155444.html
Copyright © 2020-2023  润新知