三. DDL 数据定义语言
定义:用来定义 ”数据库对象“ 的操作语言。
DDL(定义语言) 和 DML(操纵语言) 的区别 :
1. DML 针对的是数据,DDL针对的是数据库对象
2. DML需要提交和回滚, DDL执行成功即生效
1.1 CREATE 创建
创建表需要有: 表名、列名、列的属性、(约束)、表名和列名命名规则。
表名和列名命名规则:
1.在1-30个字符之间;
2.只能用字母开头,不能用数字和特殊符号开头 ,例如a_1 可以;
3.不能和oracle 关键字重名;
4.不能重名。
语法1:create table 表名(列名1 字段属性,列名2 字段属性.... )
例如:create table zhiyun46(zno number(4),zname varchar2(30) ,zsr date )
语法2:create table 表名 as sql语句
例1:create table zy46 as select * from emp ---复制全部包括表内容
例2:create table zy46 as select * from emp where 1=2 ---只复制表结构
注意事项:
1.创建表的时候每个列必须紧跟着字段属性;
2.同一个用户下表名不能重复, 同一张表下面列名不能重复;
3.每一张表都有所属的用户。
1.2、 DROP --删除 数据库对象
语法:drop table 表名
例如:drop table zy46; ---直接删除该表
注意事项:
1.删除时会将表结构连同数据一并删除,删除前注意备份。
1.3 TRUNCATE --清空
语法:truncate table 表名
例如:truncate table emp1 ;
DELETE 和TRUNCATE 和drop的区别
1. delete属于 dml 语句 , 而 truncate 属于ddl 语句;
2.delete 回留下日志,truncate不会留日志;
3.之所以有了2的区别,所以 truncate执行效率会高于delete;
4.delete 能删除部分数据,truncate只能清空所有数据;
5.truncate 清空水位线,释放空间, delete不清空水位线,不释放空间;
6.drop 删除数据同时也删除表结构.
1.4ALTER --修改 表结构(分为4类)
1.41 添加字段
语法:alter table 表名 add (列名1 字段属性,列名2 字段属性…)
例如:alter table zy466 add (zno number(4),zname varchar2(30))
注意事项:
1.添加一列默认添加到最后
2.添加字段的时候不能和原有的名字重复
1.42 删除字段
语法:alter table 表名 drop (列名1,列名2…)
例如:alter table zy466 drop (zno,zname)
注意事项:
1.表至少保留一列。
1.43 修改表名 列名
修改表名的语法:alter table 旧表名 rename to 新表名
例如:alter table zy466 rename to zhiyun466
修改列名的语法:alter table 表名 rename column 旧列名 to 新列名
例如:alter table zhiyun46 rename column zno to zno1
注意事项:
1.修改表名和列名不能和已有的重复
2.强烈不建议使用重命名
1.44 修改字段属性
语法:alter table 表名 modify (列名1 字段属性,列名2 字段属性…)
例1:alter table zhiyun46 modify (zno number(5),zname varchar2(10))
例2:alter table zhiyun46 modify (zno varchar2(5),zname varchar2(10))
注意事项:
1.修改字段属性长度一般是往大了改, 如果想往小改,有数据时不得小于数据值;
2.修改字段属性,当有数据时不能修改非同类型字段。
例:
1)创建表 如上图
CREATE TABLE MEMBER(member_id NUMBER(10),first_name VARCHAR2(25),last_name VARCHAR2(25),address VARCHAR2(100),city VARCHAR2(30),phone VARCHAR2(15),join_date DATE,CONSTRAINT un_member UNIQUE(member_id));
2)创建序列MEMBER_ID_SEQ.,由101开始,每次增长1,无最大值限制,不放入内存。
CREATE SEQUENCE member_id_seqSTART WIT H 101 INCREMENT BY 1 NOMINVALUE MAXVALUE 500 NOCACHE CYCLE;
3)利用创建的序列向表member中添加数据,如下图
INSERT INTO MEMBER(member_id,first_name,last_name,address,city,phone,join_date) VALUES(member_id_seq.nextval,'carmen','velasquez','283 king street' , 'seattlr','206-899-6666',to_DATE('08-11-1990','mm-dd-yyyy'))
4)给表member创建只读视图。
CREATE TABLE MEMBER READ noly;
5)新增一列age 数字类型,并限制该列取值在20到60岁之间。
ALTER TABLE MEMBER ADD(age NUMBER(10)); ---新增字段
Alter TABLE MEMBER ADD CONSTRAINT member_id_seq check(age between 20 and 60); ---限制检查约束在20-60之间
6)修改表为只读或读写
alter table 表名 read only --只读
alter table 表名 read write --读写