--使用子查询创建表
create table myemp as select * from emp; 创建一张与emp表 结构和数据完全相同的表
create table myemp as select * from emp where deptno=10; 创建一张只有部分结果的新表
create table myemp as select * from emp where 1=2; 创建一张只有emp表的结构,但是不含任何结果的空表
--添加字段 --alter table 表名 add 新列字段名 数据类型;
Alter table stu add age number(3);
--修改字段 --alter table 表名 modify 字段名 新的数据类型
Alter table stu modify Sage number(10);
--alter table 表名 rename column 原来的名字 to 新的名字;
alter table stu rename column age to Sage;
--删除字段 --alter table 表名 drop column 列名
Alter table stu drop column Sage;
--删除表
Drop table student; --重命名表 Rename student to student1;
-- 插入数据 INSERT INTO person(pid,name) VALUES (11,'张三');
--PRIMARY KEY:主键约束 --不能重复,不能为空
--例如:身份证号不能为空。
--UNIQUE:唯一约束,值不能重复(空值除外)
--人员中有电话号码,电话号码不能重复。
--CHECK:条件约束,插入的数据必须满足某些条件
--人员有年龄,年龄的取值只能是0~150岁之间
DROP TABLE person ;
CREATE TABLE person
(
pid NUMBER PRIMARY KEY NOT NULL ,
name VARCHAR(30) NOT NULL ,
tel VARCHAR(50) NOT NULL UNIQUE ,
age NUMBER CHECK(age BETWEEN 0 AND 150)
) ;
-- 插入数据
INSERT INTO person(pid,name,tel,age) VALUES (11,'张三','1234567',30);
-- 年龄的输入错误
INSERT INTO person(pid,name,tel,age) VALUES (12,'李四','2345678',-100);
--Foreign Key:外键
alter 命令为表添加约束 --、 为两个表添加主键:
--· person表 pid为主键:
ALTER TABLE person ADD CONSTRAINT person_pid_pk PRIMARY KEY(pid) ;
--为person表中的 tel添加唯一约束:
ALTER TABLE person ADD CONSTRAINT person_tel_uk UNIQUE(tel) ;
--为person表中的 age添加检查约束:
ALTER TABLE person ADD CONSTRAINT person_age_ck CHECK(age BETWEEN 0 AND 150) ;
--为book表中的 pid添加与 person的主-外键约束,要求带级联删除
ALTER TABLE book ADD CONSTRAINT person_book_pid_fk FOREIGN KEY (pid)
REFERENCES person(pid) ON DELETE CASCADE ; --删除约束:
ALTER TABLE book DROP CONSTRAINT person_book_pid_fk ;
alter table student drop unique(tel); --启用约束
ALTER TABLE book enable CONSTRAINT person_book_pid_fk ; --禁用约束
ALTER TABLE book disable CONSTRAINT person_book_pid_fk ;
--视图:是一个封装了各种复杂查询的语句,就称为视图。
--CREATE VIEW 视图名字(字段) AS 子查询
create view empv_all as select * from scott.emp;
--创建序列
Create sequence myseq
Start with 1
Increment by 1
Order
cache 20 --设置是否在内存里缓冲
Nocycle; --NextVal,CurrVal Select myseq.nextval from dual;
Select myseq.currval from dual;
--(必须先有 nextval,才能有currval)
--查询完之后就已经自增 1了
create table t1 (
id int
)
select * from t1;
Insert into t1 values(myseq.nextval) --这时候已经是2了
--用 cycle时,用法如下:
create sequence myseq2 start with 1 increment by 1 cycle maxvalue 3
nocache ;
Select myseq2.nextval from dual;
Select myseq2.currval from dual;
--这样到3之后,要会重新从1开始
--如果指定CACHE值,ORACLE就可以预先在内存里面放置一些sequence,这样存取的快些。cache里
--面的取完后,oracle自动再取一组到cache。 使用cache或许会跳号, 比如数据库突然不正常down掉
--(shutdown abort),cache中的sequence就会丢失. 所以可以在create sequence的时候用nocache防止
--这种情况
--不能改变当前值,但是可以改变增量
Alter sequence myseq increment by 3;
--同义词 --在任何一个用户下,都可以直接访问 dual,而不需要加上前缀的用户名如:scott.emp
Select * from dual;
--为什么?因为同义词的存在
--Dual其实是sys用户下的一张表
select table_name from user_tables where lower(table_name) = 'dual';
--作用:
--很方便的操作不同用户下的对象
--能使两个应用程序使用不同的名字指向同一张表
--使用不同的用户指向同一张表的。
Create synonym dept for soctt.dept;--(这样创建的同义词是私有的,只有创建者才能用)
Drop synonym dept;
Create public synonym dept for soctt.dept;--(这样创建的同义词才是公有的)
Drop public synonym dept;