版本:7.0.0

表管理 ​

表(TABLE)是数据库中最基本的数据存储逻辑单元,以行和列的形式组织并存储结构化数据,用户增删改查(INSERT、DELETE、UPDATE、SELECT)直接操作的对象就是表,创建表时必须存在TABLE_NAME、COLUMN_NAME以及对应的COLUMN_TYPE,此外,每一列属性可以指定额外的列约束(如DEFAULT、NOT NULL、 UNIQUE等)。

普通表创建 ​

在表空间OGRACSPACE上创建普通表EMPLOYEES。

sql
CREATE TABLE [Schema.]TABLE_NAME
(
    COLUMN_NAME1 COLUMN_TYPE [DEFAULT DEFAULT_VALUE] [{NOT | DEFAULT} NULL],
    COLUMN_NAME2 COLUMN_TYPE ...
) [TABLESPACE TABLESPACE_NAME];

-- 示例
CREATE TABLE EMPLOYEES
(
    ID INT NOT NULL,
    NAME VARCHAR(10) DEFAULT NULL,
    SALARY DECIMAL(10,2),
    HIRE_DATE DATE
) TABLESPACE OGRACSPACE;

更改表结构 ​

表重命名 ​

sql
ALTER TABLE TABLE_NAME RENAME TO TABLE_NAME_NEW;

添加、删除、更改列 ​

sql
-- 增加列
ALTER TABLE TABLE_NAME ADD COLUMN_NAME COLUMN_TYPE;
-- 删除列
ALTER TABLE TABLE_NAME DROP COLUMN_NAME;
-- 修改列类型
ALTER TABLE TABLE_NAME MODIFY COLUMN_NAME COLUMN_TYPE;

添加、删除、更改列约束 ​

sql
-- 向表EMPLOYEES的ID列添加主键约束
ALTER TABLE EMPLOYEES ADD CONSTRAINT PRIMARY_KEY1 PRIMARY KEY (ID);
-- 向表EMPLOYEES的NAME列添加唯一约束
ALTER TABLE EMPLOYEES ADD CONSTRAINT UNIQUE_NAME1 UNIQUE (NAME);
-- 向表EMPLOYEES的SALARY列添加范围CHECK约束
ALTER TABLE EMPLOYEES ADD CONSTRAINT SALARY_MIN_CHECK CHECK (SALARY > 12345);

-- 约束重命名
ALTER TABLE EMPLOYEES RENAME CONSTRAINT UNIQUE_NAME1 TO UNIQUE_NAME2;
ALTER TABLE EMPLOYEES RENAME CONSTRAINT PRIMARY_KEY1 TO PRIMARY_KEY2;

-- 删除主键约束
ALTER TABLE EMPLOYEES DROP CONSTRAINT PRIMARY_KEY2;
-- 删除SALARY_MIN_CHECK约束
ALTER TABLE EMPLOYEES DROP CONSTRAINT SALARY_MIN_CHECK;

约束开启与禁用 ​

用户可以使用ALTER TABLE ... DISABLE|ENABLE CONSTRAINT_NAME对表属性列添加的约束可以选择开启或关闭

sql
ALTER TABLE EMPLOYEES DISABLE CONSTRAINT UNIQUE_NAME1;
ALTER TABLE EMPLOYEES ENABLE CONSTRAINT UNIQUE_NAME1;

外键信息 ​

外键(Foreign Key)是一张表中的一个字段(或一组字段),它引用了另一张表的主键(Primary Key)或唯一键(Unique Key),用于建立两个表之间的链接。

sql
-- 创建表
DROP TABLE IF EXISTS departments;
DROP TABLE IF EXISTS students;

-- students表中的dept_id是departments的主键 dept_id可作为students表的外键
CREATE TABLE departments (
    dept_id   INT PRIMARY KEY,
    dept_name VARCHAR(100) NOT NULL UNIQUE
);

CREATE TABLE students (
    student_id INT PRIMARY KEY,
    name       VARCHAR(50) NOT NULL,
    dept_id    INT NOT NULL
);

-- 为表teachers与students创建外键 其父表为departments
ALTER TABLE students ADD CONSTRAINT FOR_KEY_1 FOREIGN KEY (dept_id) REFERENCES departments(dept_id);

-- 修改外键名称
ALTER TABLE students RENAME CONSTRAINT FOR_KEY_1 TO FOR_KEY_ST;

-- 删除外键
ALTER TABLE students DROP CONSTRAINT FOR_KEY_ST;

外键信息查看 ​

sql
-- 用户可使用DESC查看表列信息 
-- DESC TABLE_NAME
-- 示例
SQL> DESC STUDENTS

Name                                Null?    Type                                
----------------------------------- -------- ------------------------------------
STUDENT_ID                          NOT NULL BINARY_BIGINT                       
NAME                                NOT NULL VARCHAR(50 BYTE)                    
DEPT_ID                             NOT NULL BINARY_INTEGER                      

-- 用户可通过 SHOW CREATE 命令查看表的详细信息
-- SHOW CREATE TABLE TABLE_NAME
-- 示例
SQL> SHOW CREATE TABLE STUDENTS

CREATE TABLE "STUDENTS"
(
  "STUDENT_ID" BINARY_BIGINT NOT NULL,
  "NAME" VARCHAR(50 BYTE) NOT NULL,
  "DEPT_ID" BINARY_INTEGER NOT NULL
)
TABLESPACE "SYSTEM"
INITRANS 2
MAXTRANS 255
PCTFREE 8
FORMAT ASF;
ALTER TABLE "STUDENTS" MODIFY "STUDENT_ID" AUTO_INCREMENT;
ALTER TABLE "STUDENTS" AUTO_INCREMENT = 0;
ALTER TABLE "STUDENTS" ADD PRIMARY KEY("STUDENT_ID");
ALTER TABLE "STUDENTS" ADD CONSTRAINT "FOR_KEY_ST" FOREIGN KEY("DEPT_ID") REFERENCES "DEPARTMENTS"("DEPT_ID");

表数据清空与表删除 ​

表数据清空即删除该表中所有的行数据,仅保留表定义的结构信息,用户可通过TRUNCATE或者DELETE清空表数据:

sql
DELETE FROM STUDENTS;
DELETE FROM STUDENTS WHERE STUDENT_ID = 1234;
COMMIT; -- 可通过ROLLBACK回滚

TRUNCATE TABLE STUDENTS;

两者的区别在于,DELETE可以通过WHERE条件删除符合过滤条件的行,并且受事务管辖,可通过ROLLBACK回滚;TRUNCATE命令不能使用WHERE条件,并且无法回滚,谨慎使用。

用户可通过DROP TABLE命令删除表,删除表后表数据一同被删除,不支持ROLLBACK。

sql
DROP TABLE STUDENTS;
DROP TABLE IF EXISTS STUDENTS;