Oracle创建表、删除常用SQL

做个记录,以免忘记。

1. 建表

-- Create table创建表
create table STUDENT
(
  id         NUMBER PRIMARY KEY ,
  username   NVARCHAR2(10) not null,
  userage    NUMBER not null,
  usersex    NVARCHAR2(1) not null,
  userphone  NVARCHAR2(11),
  detail     NVARCHAR2(200),
  createtime DATE,
  valid      NUMBER default 1
)

补充:主键可创建也可不创建,看实际需求。创建主键的方式有两种:1.PRIMARY KEY:这种类型的主键唯一且必须不能为空,设置与不设置都会默认不为空。
2.unique:这种类型的主键唯一,你可以设置主键为空值或者不为空值
新增字段:ALTER TABLE student add(test varchar(1));
删除字段:ALTER TABLE student drop(valid);

2. 添加注释

-- Add comments to the table 
comment on table STUDENT
  is '用户表';
-- Add comments to the columns 添加注释
comment on column STUDENT.id is '主键id';
comment on column STUDENT.username is '姓名';
comment on column STUDENT.userage is '年龄';
comment on column STUDENT.usersex  is '性别';
comment on column STUDENT.userphone is '电话';
comment on column STUDENT.detail  is '其他信息';
comment on column STUDENT.createtime  is '创建时间';
comment on column STUDENT.valid is '是否有效';

3. 创建序列

--创建序列
create sequence seq_STUDENT_id
start with 1	--序列起始
minvalue 1	--序列最小值
increment by 1	--自增长度(每次自增加几)
nocache;	--不缓存(不设置默认缓存20)

补充:我习惯的格式 seq_+表名+自增的字段

4. 创建触发器

--创建触发器
create or replace trigger trg_STUDENT_id
before insert	--在新增操作之前执行
on STUDENT	--哪张表触发
for each row when (new.id is null)
begin
select seq_STUDENT_id.nextval into:new.id from dual;
end;

补充:创建了触发器,insert的时候id为空时,会自动补全id的值

5. 新增数据

--单条新增
--创建了触发器id就可以为空了
INSERT INTO 
student(id,username,userage,Usersex,userphone,detail,createtime,valid) 
VALUES (null,'小王',18,'男','15436365478','是不是',Sysdate,NULL);
--也可以不写
INSERT INTO student(username,userage,Usersex,userphone,detail,createtime,valid) 
VALUES ('小sd',18,'男','15436365478','是不是',Sysdate,NULL);

--批量新增
INSERT INTO student (username,userage,Usersex,userphone,detail,createtime)
SELECT '小明',18,'男','13566666666','其其他信息,其他信息',SYSDATE FROM dual
UNION
SELECT '小红',18,'女','15436365478','是不是',SYSDATE FROM dual
UNION
SELECT '小猫',18,'男','15345678915','是不是的是不是是不是',SYSDATE FROM dual
UNION
SELECT '小呆',18,'男','78965432156','看不看看看卡不卡看卡',SYSDATE FROM dual 
UNION
SELECT '小萌',18,'男','78978978931','奥斯卡的进口付贷款将',SYSDATE FROM dual
UNION
SELECT '小花',18,'女','15436365478','是不是的是不是是不是',SYSDATE FROM dual
UNION
SELECT '小李',18,'男','45678936945','阿萨德划分空间和咖啡',SYSDATE FROM dual
UNION
SELECT '小张',18,'男','45678936945','微弱IQ就回家快乐哈',SYSDATE FROM dual;

补充:因为创建的时候设置了字段valid默认值为1了,所以新增时不设置该列值的时候就会自动默认为1,如果新增的时候设置值为null 就不会填充默认值了,字段也会变为空值。

6. 修改数据

UPDATE student s SET s.createtime=SYSDATE WHERE s.id=1;

7. 删除

--删除数据
delete from student t where t.id = 10;

--删除存储过程,函数,触发器,表
drop procedure XXX;	--删除存储过程
drop function XXX;	--删除函数
drop trigger XXX;	--删除触发器
drop table XXX;	--删除表

truncate table XXX;--删除表

补充:drop (删除表):删除整个表结构,包括表的结构被依赖的约束(constrain),触发器(trigger)索引(index)等,依赖于该表的存储过程/函数将被保留,但其状态会变为:invalid,需要手动删除。
truncate (清空表中的数据):删除内容、释放空间但不删除定义(保留表的数据结构)。与drop不同的是,只是清空表数据而已。
delete (删除表中的数据):delete 语句用于删除表中的行。delete语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作。
truncate与delete的区别:truncate只用于删除表数据,不能根据条件删除;
delete可以用条件删除,也可以不加条件,如果不加条件语句也是删除表数据,但是他是逐条删除的,所以效率比truncate低。
三者的效率比较:
drop > truncate > delete

你可能感兴趣的:(Oracle)