首页 > 代码库 > 数据表的基本操作
数据表的基本操作
1. SQL语句
1.1. CREATE语句
创建BOOKINFO表:
CREATE TABLE BOOKINFO
(
BOOKID NUMBER ,
BOOKNAME CHAR ,
PUBLISH VARCHAR2(20),
PUBDATE VARCHAR2(20),
PRICE DECIMAL(7,2) DEFAULT 0.0,
AUTHOR CHAR,
STORE INT DEFAULT 0 NOT NULL,
READER NUMBER,
REMARKS VARCHAR2(50)
);
1.2. 修改用户密码
ALTER USER SYSTEM BY IDENTIFIED BY ROOT123;
ALTER USER SYSTEM ACCOUNT UNLOCK;
GRANT CONNECT TO SYSTEM IDENTIFIED BY ROOT123;
1.3. 查看当前用户表
SHOW USER;
SELECT TABLE_NAME FROM TABS;
SELECT TABLE_NAME FROM USER_TABLES;
SELECT TNAME FROM TAB;
1.4. 约束
1、约束
约束用于确保数据库数据满足特定的商业规则。在Oracle中,约束包括:not null、unique、primary key, foreign key和check五种。
A、not null(非空)
如果在列上定义了not null,那么当插入数据时,必须为列提供数据。
B、unique(唯一)
当定义了唯一约束后,该列值是不能重复的,但是可以为null。
C、primary key(主键)
用于唯一的标识表行的数据,当定义主键约束后,该列不但不能重复而且不能为NULL。一张表最多只能有一个主键,但是可以由多个unique约束。
D、foreign key(外键)
用于定义主表和从表之间的关系,外键约束要定义在从表上,主要则必须具有主键约束或是unique约束,当定义外键约束后,要求外键列数据必须在主表的主键列存在或是为NULL。
E、check
用于强制行数据必须满足的条件,假定在sal列上定义了check约束,并要求sal列值在1000~2000之间,如果不在1000~2000之间就会提示出错。
1.4.1. 检查约束
创建语法:
CONSTRAINT constraint_name CHECK (condition)
Condition:用来唯一标识表中一个列,一个表中的主键约束只能有一个,但是可以在一个主键约束中包含多个列;
CREATE TABLE BOOKINFO
(
BOOKID NUMBER ,
BOOKNAME CHAR ,
PUBLISH VARCHAR2(20),
PUBDATE VARCHAR2(20),
PRICE DECIMAL(7,2) DEFAULT 0.0,
AUTHOR CHAR,
STORE INT DEFAULT 0 NOT NULL,
READER NUMBER,
REMARKS VARCHAR2(50),
CONSTRAINT CK_PRICE CHECK (PRICE>= 0 AND PRICE<=100)
);
1.4.2. 非空约束表
给字段后面添加NOT NULL;
CREATE TABLE BOOKINFO_01
(
BOOKID NUMBER NOT NULL ,
BOOKNAME CHAR NOT NULL,
PUBLISH VARCHAR2(20),
PUBDATE VARCHAR2(20),
PRICE DECIMAL(7,2) DEFAULT 0.0,
AUTHOR CHAR,
STORE INT DEFAULT 0 NOT NULL,
READER NUMBER,
REMARKS VARCHAR2(50)
);
1.4.3. 唯一约束的表
语法:
CONSTRAINT constraint_name UNIQUE(colume_name)
CREATE TABLE BOOKINFO_02
(
BOOKID NUMBER NOT NULL ,
BOOKNAME CHAR NOT NULL,
PUBLISH VARCHAR2(20),
PUBDATE VARCHAR2(20),
PRICE DECIMAL(7,2) DEFAULT 0.0,
AUTHOR CHAR,
STORE INT DEFAULT 0 NOT NULL,
READER NUMBER,
REMARKS VARCHAR2(50),
CONSTRAINT UN_BOOKNAME UNIQUE(BOOKNAME)
);
1.4.4. 外键约束表
语法:
CONSTRAINT constraint_name FOREIGE KEY(colume_name)
REFERENCE table_name(colume_name)
关键字说明:
CONSTRAINT:创建约束的关键字
FOREIGE KEY:外键约束的关键字
REFERENCE:引用外表的关键字
table_name(colume_name):引用外表(父表),colume_name表示该表的列
注意:主外键字段的数据类型必须要相同;
--创建父表
CREATE TABLE PUBLISHINFO
(
PUBLISHID VARCHAR2(20) PRIMARY KEY,
PUBLISHNAME VARCHAR2(30)
);
--创建字表
CREATE TABLE BOOKINFO_03
(
BOOKID NUMBER NOT NULL ,
BOOKNAME CHAR NOT NULL,
PUBLISH VARCHAR2(20),
PUBDATE VARCHAR2(20),
PRICE DECIMAL(7,2) DEFAULT 0.0,
AUTHOR CHAR,
STORE INT DEFAULT 0 NOT NULL,
READER NUMBER,
REMARKS VARCHAR2(50),
CONSTRAINT FK_PUBLISH FOREIGN KEY(PUBLISH) REFERENCES PUBLISHINFO(PUBLISHID)
);
1.4.5. 含多个约束的表
CREATE TABLE BOOKINFO_05
(
BOOKID NUMBER NOT NULL ,
BOOKNAME CHAR NOT NULL,
PUBLISH VARCHAR2(20),
PUBDATE VARCHAR2(20),
PRICE DECIMAL(7,2) DEFAULT 0.0,
AUTHOR CHAR,
STORE INT DEFAULT 0 NOT NULL,
READER NUMBER,
REMARKS VARCHAR2(50),
CONSTRAINT UN_BOOKNAME_05 UNIQUE(BOOKNAME),
CONSTRAINT CK_PRICE_05 CHECK (PRICE <= 100)
)
1.5. 修改表
1.5.1. 修改表结构
语法:
ALTER TABLE table_name ADD colume_name | MODIFY colume_name | DROP COLUME colume_name
--ADD
ALTER TABLE BOOKINFO ADD ISBN VARCHAR2(10);
--MODIFY
ALTER TABLE BOOKINFO MODIFY PUBLISH VARCHAR2(80) NOT NULL;
--DROP
ALTER TABLE BOOKINFO DROP COLUMN ISBN;
1.5.2. 给表添加约束(主键)
语法:
ALTER TABLE table_name ADD colume_name CONSTRAINTS constraint_name PRIMARY KEY(colume_name)
--添加主键
ALTER TABLE BOOKINFO ADD CONSTRAINT PK_BOOKINFO PRIMARY KEY (BOOKID);
--删除主键
ALTER TABLE BOOKINFO DROP CONSTRAINT PK_BOOKINFO;
1.6. 表
1.6.1. 删除表
语法:
DROP TABLE <table_name>;
DROP TABLE BOOKINFO_05;
1.6.2. 清空表内容
语法:
DELETE FROM table_name;
DELETE FROM BOOKINFO_02;
语法:(截断表)
TRUNCATE TABLE table_name;
TRUNCATE TABLE BOOKINFO_03;
语法
delete from aa
truncate table aa
区别
1.delete from后面可以写条件,truncate不可以。
2.delete from记录是一条条删的,所删除的每行记录都会进日志,而truncate一次性删掉整个页,因此日至里面只记录页释放,简言之,delete from更新日志,truncate基本不,所用的事务日志空间较少。
3.delete from删空表后,会保留一个空的页,truncate在表中不会留有任何页。
4.当使用行锁执行DELETE语句时,将锁定表中各行以便删除。truncate始终锁定表和页,而不是锁定各行。
5.如果有identity产生的自增id列,delete from后仍然从上次的数开始增加,即种子不变,而truncate后,种子会恢复初始。
6.truncate不会触发delete的触发器,因为truncate操作不记录各个行删除。
总结
1.truncate和 delete只删除数据不删除表的结构(定义) drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的存储过程/函数将保留,但是变为invalid状态。
2.delete语句是dml,这个操作会放到rollback segement中,事务提交之后才生效;如果有相应的trigger,执行的时候将被触发truncate,drop是ddl, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger。
3.delete语句不影响表所占用的extent, 高水线(high watermark)保持原位置不动显然drop语句将表所占用的空间全部释放truncate 语句缺省情况下见空间释放到 minextents个 extent,除非使用reuse storage;truncate会将高水线复位(回到最开始)。
4.速度,一般来说: drop> truncate > delete。
5.安全性:小心使用drop 和truncate,尤其没有备份的时候.否则哭都来不及。
6.使用上,想删除部分数据行用delete,注意带上where子句. 回滚段要足够大,想删除表,当然用drop想保留表而将所有数据删除. 如果和事务无关,用truncate即可. 如果和事务有关,或者想触发trigger,还是用delete如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据。
1.6.3. 重命名表
语法:
RENAME oldname TO newname;
数据表的基本操作