Oracle_基本建表语句
oracle数据库基本语句
oracle数据库基本语句oracle 数据库是一种常用的关系型数据库管理系统,常用的oracle数据库包括oracle10g、oracle11g和oracle12c。
要掌握oracle的基本用法,必须掌握其基本的语句。
oracle的常用基本语句有:一、数据定义语言(DDL)1、创建数据表:CREATE TABLE 表名(字段名数据类型[完整性约束条件],字段名数据类型[完整性约束条件],……);2、修改数据表: ALTER TABLE 表名 ADD(字段名数据类型[完整性约束条件],字段名数据类型[完整性约束条件],……);3、删除数据表: DROP TABLE 表名;4、创建索引:CREATE [UNIQUE] INDEX 索引名ON 表名[字段名[,字段名];5、删除索引: DROP INDEX 索引名;三、数据控制语言(DCL)1、建立用户: CREATE USER 用户名 IDENTIFIED BY 密码;2、删除用户: DROP USER 用户名;3、授权:GRANT 权限 ON 对象 TO 用户[WITH GRANT OPTION];4、回收授权: REVOKR 权限 ON 对象 FROM 用户;5、控制事务: COMMIT/ROLLBACK;四、数据库控制语言(DBCL)1、创建数据库:CREATE DATABASE 数据库名;2、删除数据库: DROP DATABASE 数据库名;3、创建表空间:CREATE TABLESPACE 表空间名 SEGMENT SPACE MANAGEMENT 自动;4、删除表空间: DROP TABLESPACE 表空间名;5、管理会话: ALTER SYSTEM KILL SESSION ['会话号'];。
Oracle根据Excel或者world数据字典自动生成建表语句和注释
Oracle根据Excel或者world数据字典⾃动⽣成建表语句和注释⼯作中⼀般会出现这种情况,和其他单位合作开发项⽬时,对⽅会给我们⼀份他们的数据字典,excl或者world的,这种情况下我们要根据数据字典将表结构建好,但是⼀个字段⼀个字段的去复制粘贴会点到⼿疼,⽽且还很容易出错,在这个情况下我⾃⼰做了⼀个⽣成建表脚本的⼩⽅法,详情如下:1、创建⽣成建表语句的存储过程:create table t_OUTString(Tname varchar2(50),OUTString clob,OUTSTRING2 clob,createddate date);create or replace procedure Pro_ExToSql(SStrin in varchar2 ,TString in varchar2) isRString varchar2(30000);RowString varchar2(30000);LeaveString varchar2(30000);midStr varchar2(30000);LeftStr varchar2(30000);RightStr varchar2(30000);V_Cname varchar2(100);V_Ctype varchar2(100);V_Ccomment varchar2(500);a number;b number;i number;j number;insertSql varchar2(30000);OUTString varchar2(30000);OUTString2 varchar2(30000);cursor curets isselect cname,ctype,ccomment from ets_temp order by createddate desc;beginj:=1;select replace(SStrin,'','#') into RString from dual;select instr(RString,chr(10)),substr(RString , j) into i,LeaveString from dual;while i>0 loopselect substr(LeaveString , j) into LeaveString from dual;select instr(LeaveString,chr(10)) into i from dual;if i is nullthengoto next;end if;select substr(LeaveString , 1 ,i ) into RowString from dual;j:=i+1;select instr(RowString,'#',1,1) ,instr(RowString,'#',1,2) into A,b from dual;select substr(RowString,a+1,b-a-1) ,substr(RowString,1,a-1),substr(RowString,b+1) into midStr,LeftStr,RightStrfrom dual;insertSql:='insert into ETS_temp(CComment,Cname,Ctype,createddate) values('''||midStr||''','''||LeftStr||''','''||RightStr||''',sysdate)';Execute IMMEDIATE insertSql;commit;end loop;<<next>>null;open curets;loopfetch curetsinto V_Cname, V_Ctype,V_Ccomment;exit when curets %NOTFOUND;OUTString:=''||OUTString||'COMMENT ON COLUMN '||TString||'.'||V_Cname||' is '''||V_Ccomment||''';'||chr(10)||'';outstring2:=''||outstring2||''||V_Cname||''||V_Ctype||','||chr(10)||'';end loop ;close curets;outstring2:='create table '||TString||''||chr(10)||'('||outstring2||');';select replace(replace(outstring2,''||chr(10)||',',','),','||chr(10)||');',');') into outstring2 from dual;insert into t_OUTString(Tname,OUTString,OUTSTRING2,createddate) values(Tstring,OUTString,OUTSTRING2,sysdate);commit;delete from ETS_temp;commit;EXCEPTIONWHEN OTHERS THENbegindelete from ETS_temp;commit;end;end Pro_ExToSql;2、执⾏过程会将建表语句insert到t_outstring表中outstring为创建注释语句,outstring2为建表语句:call pro_extosql('JGXLID 监管线路ID numberXLMC 线路名称 varchar2(50)DDFS 调度⽅式 varchar2(10)JHZLC 计划总⾥程 number(10,3)JHYYLC 计划营运⾥程 number(10,3)KSRQ 开始⽇期 datetimeZJZX 周⼏执⾏ varchar2(15)JHPCS 计划配车数 numberJHBCS 计划班次数 numberJHZGFPCS 计划早⾼峰配车数 numberJHWGFPCS 计划晚⾼峰配车数 numberJHZGFBCS 计划早⾼峰班次数 numberJHWGFBCS 计划晚⾼峰班次数 numberSZMC ⾸站名称 varchar2(50)MZMC 末站名称 varchar2(50)SZSB ⾸站⾸班 varchar2(5)SZMB ⾸站末班 varchar2(5)','TableName')3、在T_outstring表中取得以下信息:--outstring字段COMMENT ON COLUMN TableName.JGXLID is'监管线路ID';COMMENT ON COLUMN TableName.SZMB is'⾸站末班';COMMENT ON COLUMN TableName.DDFS is'调度⽅式';COMMENT ON COLUMN TableName.JHZLC is'计划总⾥程';COMMENT ON COLUMN TableName.JHYYLC is'计划营运⾥程';COMMENT ON COLUMN TableName.KSRQ is'开始⽇期';COMMENT ON COLUMN TableName.ZJZX is'周⼏执⾏';COMMENT ON COLUMN TableName.JHPCS is'计划配车数';COMMENT ON COLUMN TableName.JHBCS is'计划班次数';COMMENT ON COLUMN TableName.JHZGFPCS is'计划早⾼峰配车数';COMMENT ON COLUMN TableName.JHWGFPCS is'计划晚⾼峰配车数';COMMENT ON COLUMN TableName.JHZGFBCS is'计划早⾼峰班次数';COMMENT ON COLUMN TableName.JHWGFBCS is'计划晚⾼峰班次数';COMMENT ON COLUMN TableName.SZMC is'⾸站名称';COMMENT ON COLUMN TableName.MZMC is'末站名称';COMMENT ON COLUMN TableName.SZSB is'⾸站⾸班';COMMENT ON COLUMN TableName.XLMC is'线路名称';--outstring2字段create table TableName(JGXLID number,SZMB varchar2(5),DDFS varchar2(10),JHZLC number(10,3),JHYYLC number(10,3),KSRQ datetime,ZJZX varchar2(15),JHPCS number,JHBCS number,JHZGFPCS number,JHWGFPCS number,JHZGFBCS number,JHWGFBCS number,SZMC varchar2(50),MZMC varchar2(50),SZSB varchar2(5),XLMC varchar2(50));PS:这样就可以直接将SQL提取出来执⾏建表了!有更好的办法的希望⼤家在评论区留⾔,⼀起探讨!。
【Oracle】需要快速建表时常用到的语句
【Oracle】需要快速建表时常⽤到的语句-- 查emp表是否存在SQL>select count(*) from user_tables where table_name=upper('emp');COUNT(*)----------1-- 删除表SQL>drop table emp;表已删除。
-- 创建表SQL>create table emp(2 id int,3 name nvarchar2(20),4primary key(id));表已创建。
-- 给表插值SQL>insert into emp2select rownum,dbms_random.string('*',dbms_random.value(6,20))3from dual4 connect by level<3001;已创建3000⾏。
-- 给表增加⼀列SQL>alter table emp add(age int);表已更改。
-- 更新表中字段SQL>update emp set age=dbms_random.value(18,65) where1=1;已更新3000⾏。
-- 设置name⼀列的宽度,为查询做准备SQL>column name format a30;-- 查询有限条⽬SQL>select*from emp where rownum<6;ID NAME AGE---------- ------------------------------ ----------1 OQTXGOYACMTC 422 ZUMTOSZUQDLRGXKULA 413 GTTIQENYUVLUXIDL 274 SRLGYXFWRHBZ 535 TIFNKNDHKNJEURYHXDY 55-- 增加⼀列SQL>alter table emp add(dept int);表已更改。
oracle建表teacher语句sql
在Oracle 数据库中,创建表的SQL 语句通常包括表的名称、列名和每列的数据类型。
以下是一个简单的例子,创建一个名为teacher 的表,包含一些基本的教师信息:
CREATE TABLE teacher (
teacher_id NUMBER(10) PRIMARY KEY,
first_name V ARCHAR2(50),
last_name V ARCHAR2(50),
email V ARCHAR2(100),
hire_date DATE
);
在这个例子中,teacher表有以下列:
- teacher_id: 教师的唯一标识符,使用NUMBER数据类型,长度为10。
- first_name: 教师的名字,使用V ARCHAR2数据类型,最大长度为50。
- last_name: 教师的姓氏,同样使用V ARCHAR2数据类型,最大长度为50。
- email: 教师的电子邮件地址,使用V ARCHAR2数据类型,最大长度为100。
- hire_date: 教师的雇佣日期,使用DATE 数据类型。
请注意,这只是一个简单的例子,实际的表结构可能更加复杂,取决于你的需求。
在实际的数据库设计中,你可能还需要考虑约束、索引、外键等其他方面的内容。
Oracle_基本建表语句
Oracle_基本建表语句--创建⽤户create user han identified by han default tablespaceusers Temporary TABLESPACE Temp;grant connect,resource,dba to han; //授予⽤户han开发⼈员的权利--------------------对表的操作----------------------------创建表create table classes(id number(9) not null primary key,classname varchar2(40) not null)--查询表select * from classes;--删除表drop table students;--修改表的名称rename alist_table_copy to alist_table;--显⽰表结构describe test --不对没查到-----------------------对字段的操作-------------------------------------增加列alter table test add address varchar2(40);--删除列alter table test drop column address;--修改列的名称alter table test modify address addresses varchar(40;--修改列的属性alter table test modicreate table test1(id number(9) primary key not null,name varchar2(34))rename test2 to test;--创建⾃增的序列create sequence class_seq increment by 1 start with 1 MAXVALUE 999999 NOCYCLE NOCACHE;select class_seq.currval from dual--插⼊数据insert into classes values(class_seq.nextval,'软件⼀班')commit;--更新数据update stu_account set username='aaa' where count_id=2;commit;--创建唯⼀索引create unique index username on stu_account(username); --唯⼀索引不能插⼊相同的数据--⾏锁在新打开的对话中不能对此⾏进⾏操作select * from stu_account t where t.count_id=2 for update; --⾏锁--alter table stuinfo modify sty_id to stu_id;alter table students drop constraint class_fk;alter table students add constraint class_fk foreign key (class_id) references classes(id);--外键约束alter table stuinfo add constraint stu_fk foreign key (stu_id) references students(id) ON DELETE CASCADE;--外键约束,级联删除alter table stuinfo drop constant stu_fk;insert into students values(stu_seq.nextval,'张三',1,sysdate);insert into stuinfo values(stu_seq.currval,'威海');select * from stuinfo;create table zhuce(zc_id number(9) not null primary key,stu_id number(9) not null,zhucetime date default sysdate)create table feiyong (fy_id number(9) not null primary key,stu_id number(9) not null,mx_id number(9) not null,yijiao number(7,2) not null default 0,qianfei number(7,2) not null)create talbe fymingxi(mx_id number(9) not null primary key,feiyong number(7,2) not null, //共7位数字,⼩数后有两位 class_id number(9) not null}create table card(card_id number(9) primary key,stu_id number(9) not null,money number(7,2) not null default 0,status number(1) not null default 0 --0表可⽤,1表挂失)--链表查询select c.classname||'_'||s.stu_name as 班级_姓名,si.address from classes c,students s , stuinfo si where c.id=s.class_id and s.id=si.stu_id;insert into students values(stu_seq.nextval,'李四',1,sysdate); insert into stuinfo values(stu_seq.currval,'南京');--函数select rownum,id,stu_name from students t order by id asc;--中间表实现多对多关联--(1 1, 1 n,n 1,n n )--1 n的描述 1的表不作处理 n的表有1表的字段--1 1的描述主外键关联--n n的描述中间表实现多对多关联create table course(course_id number(9) not null,couser_name varchar2(40) not null)alter table course to couse;create table stu_couse(stu_couse_id number(9) primary key,stu_id number(9) not null,couse_id number(9) not null)create unique index stu_couse_unq on stu_couse(stu_id,couse_id); --唯⼀学⽣create sequence stu_couse_seq increment by 1 start with 1 MAXVALUE 999999 NOCYCLE NOCACHE;create sequence couses_seq increment by 1 start with 1 MAXVALUE 999999 NOCYCLE NOCACHE;insert into course values(couses_seq.nextval,'计算机原理');insert into course values(couses_seq.nextval,'编译原理');insert into course values(couses_seq.nextval,'数据库原理');insert into course values(couses_seq.nextval,'数据结构');insert into course values(couses_seq.nextval,'计算机基础');insert into course values(couses_seq.nextval,'C语⾔初步');commit;insert into stu_couse values(stu_couse_seq.nextval,1,1);insert into stu_couse values(stu_couse_seq.nextval,1,3);insert into stu_couse values(stu_couse_seq.nextval,1,5);insert into stu_couse values(stu_couse_seq.nextval,1,5);insert into stu_couse values(stu_couse_seq.nextval,2,1);commit;select * from stu_couse;select * from course;--select s.stu_name,sc.couse_id, c.couser_name from students s,course c,stu_couse sc where stu_id=1--select couse_id from stu_couse where stu_id=1select cl.classname,s.stu_name,c.couser_name from stu_couse sc, students s,course c,classes cl where s.id=sc.stu_id and sc.couse_id=c.course_id and s.class_id=cl.id and s.id=1;--班级——姓名select c.classname,s.stu_name from students s,classes c wheres.class_id=c.id and s.id=2;select * from students s where s.id=2--班级——姓名——课程select cl.classname,s.stu_name,c.couse_name from stu_couse sc,students s,classes cl,couse c where sc.stu_id=s.id and sc.couse_id=c.couse_id and s.id=26;--sql 语句的写法,现写出关联到的表,然后写出要查找的字段,第三写出关联条件,记住在写关联到的表时先写数据多的表,这样有助于提⾼sql的效率select c.couser_name,s.stu_name from stu_couse sc,students s,course c where c.course_id=1 and c.course_id=sc.couse_id and sc.stu_id=s.id;select s.stu_name from students s,stu_couse sc where s.id=sc.stu_id group by s.id,s.stu_name;select c.classname,count(sc.couse_id) from stu_couse sc,studentss,classes c where s.class_id=c.id and s.id=sc.stu_id group byc.classname;select s.stu_name, count(sc.couse_id) from stu_couse sc,studentss,classes cl where s.id=sc.stu_id group by s.id,s.stu_name having count(sc.stu_couse_id)>3;班级学⽣选课数量select cl.classname,count(sc.stu_couse_id) from stu_couse sc,students s,classes cl where s.id=sc.stu_id ands.class_id=cl.id group bycl.classname;--班级学⽣选课数量select cl.classname,s.stu_name,count(sc.stu_couse_id) from stu_couse sc,students s,classes cl where s.id=sc.stu_id and s.class_id=cl.id group by s.stu_name;select cl.classname,s.stu_name,count(sc.stu_couse_id) from stu_couse sc ,students s,classes cl where sc.stu_id=s.id and s.class_id=cl.id group by s.id;select cl.classname,s.stu_name,count(sc.stu_couse_id) from stu_couse sc,students s,classes cl where sc.stu_id=s.id and s.class_id=cl.id group by s.stu_name;--班级学⽣所选课程id 所选课程名称--创建试图⽬的把表联合起来然后看成⼀个表,在与其他的联合进⾏查询create view xsxk as select cl.classname,s.stu_name,c.couse_id,c.couse_name from stu_couse sc,students s,classes cl,couse c where sc.stu_id=s.id and sc.couse_id=c.couse_id and s.class_id=cl.id;select * from xsxkcreate view classstu as select s.id,c.classname,s.stu_name from students s,classes c where c.id=s.class_id;drop view classstu; --删除视图select * from classstu;create view stu_couse_view as select s.id ,c.couse_name from stu_couse sc,students s,couse c where s.id=sc.stu_id and sc.couse_id=c.couse_id; select * from stu_couse_view;create view csc as select cs.classname,cs.stu_name,scv.couse_name from classstu cs,stu_couse_view scv wherecs.id=scv.id;select * from csc;select * from classes cross join students; --全连接,相当于select * from classes,students;select * from classes cl left join students s on cl.id=s.class_id; --左连接不管左表有没有都显⽰出来select * from classes cl right join students s on cl.id=s.class_id; --右连接select * from classes cl full join students s on cl.id=s.class_id; --全连接insert into classes values(class_seq.nextval,'软件四班');create table sales(nian varchar2(4),yeji number(5));insert into sales values('2001',200);insert into sales values('2002',300);insert into sales values('2003',400);insert into sales values('2004',500);commit;select * from sales;drop table sale;select s1.nian,sum(s2.yeji) from sales s1,sales s2 wheres1.nian>=s2.nian group by s1.nian order by s1.nian desc;select s1.nian,sum(s2.yeji) from sales s1,sales s2 wheres1.nian>=s2.nian group by s1.nian;s年年业绩总和2001 2002002 5002003 9002004 1400create table test1(t_id number(4));create table org(org_id number(9) not null primary key,org_name varchar2(40) not null,parent_id number(9));create sequence org_seq increment by 1 start with 1 MAXVALUE 999999 NOCYCLE NOCACHE; drop sequence org_seq;insert into org values(1,'华建集团',0);insert into org values(2,'华建集团⼀分公司',1);insert into org values(3,'华建集团⼆分公司',1);insert into org values(4,'华建集团财务部',1);insert into org values(5,'华建集团⼯程部',1);insert into org values(6,'华建集团⼀分公司财务处',2);insert into org values(7,'华建集团⼀分公司⼯程处',2);select * from org;--不正确不能实现循环select /doc/5e8716366.html_id , /doc/5e8716366.html_name ,b.parent_id from org a,org b where/doc/5e8716366.html_id=7 and a.parent_id=/doc/5e8716366.html_id;select * from org connect by prior parent_id=org_id start with org_id=7 order by org_id;select * from org connect by prior org_id=parent_id start with org_id=1 order by org_id;create table chengji(cj_id number(9) not null primary key,stu_cou_id number(9) not null,fen number(4,1));insert into chengji values(1,1,62);insert into chengji values(2,2,90);insert into chengji values(3,3,85);insert into chengji values(4,4,45);insert into chengji values(5,5,68);insert into chengji values(6,6,87);commit;select * from chengji;select * from stu_couse;--在oracle 中好像不适⽤ alter table chengji change stu_cou_idstu_couse_id;alter table shop_jb change price1 price double;学⽣姓名平均分select s.stu_name,avg(cj.fen) from stu_couse sc,chengji cj,students s where s.id=sc.stu_id andsc.stu_couse_id=cj.stu_couse_id group bys.id,s.stu_name;select s.stu_name from students s,stu_couse sc,chengji cj wheres.id=sc.stu_id and sc.stu_couse_id=cj.stu_couse_id group bys.id,s.stu_name;select s.stu_name,cj.fen from students s,stu_couse sc,chengji cj where s.id=sc.stu_id and sc.stu_couse_id=cj.stu_couse_id and cj.fen>60;学⽣姓名科⽬成绩select s.stu_name,c.couse_name,cj.fen from stu_couse sc,studentss,couse c,chengji cj where sc.stu_id=s.id and sc.couse_id=c.couse_id and sc.stu_couse_id=cj.stu_couse_id and cj.fen>60 order by=;select * from stu_couse;--集合运算--选择了课程3的学⽣ union 选择了课程5的学⽣并集--选择了课程3 或者选择了课程5的学⽣select s.stu_name from students s,couse c,stu_couse sc wheres.id=sc.stu_id and sc.couse_id=c.couse_id and c.couse_id=3unionselect s.stu_name from students s,couse c,stu_couse sc wheres.id=sc.stu_id and sc.couse_id=c.couse_id and c.couse_id=5--选择了课程3,5,2 的学⽣ intersect 选择课程1,2,4的学⽣交集--求选择了课程 2 并且选择了课程 3 的学⽣交集select s.stu_name from students s,couse c,stu_couse sc wheres.id=sc.stu_id and sc.couse_id=c.couse_id and c.couse_id=2intersectselect s.stu_name from students s,couse c,stu_couse sc wheres.id=sc.stu_id and sc.couse_id=c.couse_id and c.couse_id=3;--选择了课程3,5,8的学⽣ minus 选择了课程1,7,8的学⽣ --差集-- 求所有课程的成绩都⼤于 60 的学⽣差集select distinct(s.stu_name) from stu_couse sc,students s,couse c,chengji cj where sc.stu_id=s.id andsc.couse_id=c.couse_id andsc.stu_couse_id=cj.stu_couse_id and cj.fen>60minusselect distinct(s.stu_name) from stu_couse sc,students s,couse c,chengji cj where sc.stu_id=s.id andsc.couse_id=c.couse_id andsc.stu_couse_id=cj.stu_couse_id and cj.fen<60;⼀、何謂分區表(索引)?分區表是⼀種數據庫的物理存儲機制,它將⼀個表的數據存儲在不同的存儲⽚段中,這些不同的存儲⽚稱為區(partition)。
Oracle建表SQL语句
Oracle建表SQL语句ALTER TABLE "USBP_TASK_PROGRESS_STAT"DROP CONSTRAINT FK_USBP_TAS_REFERENCE_USBP_TAS;DROP TABLE "USBP_TASK_PROGRESS_STAT" CASCADE CONSTRAINTS;/*==============================================================*//* Table: "USBP_TASK_PROGRESS_STAT" *//*==============================================================*/CREATE TABLE "USBP_TASK_PROGRESS_STAT"("STAT_ID"NUMBER NOT NULL,"TASK_ID"NUMBER,"OBJECT_TYPE_ID" NUMBER NOT NULL,"OBJECT_TYPE_NAME"VARCHAR2(32),"OBJECT_TYPE_CODE"VARCHAR2(16),"TOTAL_OBJECT_NUM"NUMBER,"COMPLETE_OBJECT_NUM"NUMBER,"SKIP_OBJECT_NUM"NUMBER,"UPDATE_TIME"DATE,"METERING_UNIT"VARCHAR2(16),CONSTRAINT PK_USBP_TASK_PROGRESS_STAT PRIMARY KEY ("STAT_ID"));COMMENT ON TABLE "USBP_TASK_PROGRESS_STAT" IS'任务进度汇总记录表。
Oracle数据库语句大全
Oracle数据库语句大全一.入门部分1.创建表空间create tablespace schooltbs datafile ‘D:\oracle\datasource\schooltbs.dbf’ size 10M autoextend on;2.删除表空间drop tablespace schooltbs[including contents and datafiles];3.查询表空间基本信息select *||tablespace_name from DBA_TABLESPACES;4.创建用户create user lihuaidentified by lihuadefault tablespace schooltbstemporary tablespace temp;5.更改用户alter user lihuaidentified by 123default tablespace users;6.锁定用户alter user lihua account lock|unlock;7.删除用户drop user lihua cascade;--删除用户模式8.oracle数据库中的角色connect,dba,select_catalog_role,delete_catalog_role,execute_catalo g_role,exp_full_database,imp_full_database,resource9.授予连接服务器的角色grant connect to lihua;10.授予使用表空间的角色grant resource to lihua with grant option;--该用户也有授权的权限11.授予操作表的权限grant select,insert on user_tbl to scott;--当前用户grant delete,update on er_tbl to scott;--系统管理员二.SQL查询和SQL函数1.SQl支持的命令:数据定义语言(DDL):create,alter,drop数据操纵语言(DML):insert,delete,update,select数据控制语言(DCL):grant,revoke事务控制语言(TCL):commit,savepoint,rollback2.Oracle数据类型字符,数值,日期,RAW,LOB字符型char:1-2000字节的定长字符varchar2:1-4000字节的变长字符long:2GB的变长字符注意:一个表中最多可有一列为long型Long列不能定义唯一约束或主键约束long列上不能创建索引过程或存储过程不能接受long类型的参数。
Oracle创建表语句(Createtable)语法详解及示例
Oracle创建表语句(Createtable)语法详解及⽰例创建表(Create table)语法详解1. ORACLE常⽤的字段类型ORACLE常⽤的字段类型有VARCHAR2 (size) 可变长度的字符串, 必须规定长度CHAR(size) 固定长度的字符串, 不规定长度默认值为1NUMBER(p,s) 数字型p是位数总长度, s是⼩数的长度, 可存负数最长38位. 不够位时会四舍五⼊.DATE ⽇期和时间类型LOB 超长字符, 最⼤可达4GCLOB 超长⽂本字符串BLOB 超长⼆进制字符串BFILE 超长⼆进制字符串, 保存在外的⽂件⾥是只读的.数字字段类型位数及其四舍五⼊的结果原始数值1234567.89数字字段类型位数存储的值Number 1234567.89Number(8) 12345678Number(6) 错Number(9,1) 1234567.9Number(9,3) 错Number(7,2) 错Number(5,-2) 1234600Number(5,-4) 1230000Number(*,1) 1234567.92. 创建表时给字段加默认值和约束条件创建表时可以给字段加上默认值例如 : ⽇期字段 DEFAULT SYSDATE这样每次插⼊和修改时, 不⽤程序操作这个字段都能得到动作的时间创建表时可以给字段加上约束条件例如: ⾮空 NOT NULL不允许重复 UNIQUE关键字 PRIMARY KEY按条件检查 CHECK (条件)外键 REFERENCES 表名(字段名)3. 创建表的例⼦CREATE TABLE DEPT(EPTNO NUMBER(2) CONSTRAINT PK_DEPT PRIMARY KEY,DNAME VARCHAR2(14),LOC VARCHAR2(13)) ;CREATE TABLE region(ID number(2) NOT NULL PRIMARY KEY,postcode number(6) default '0' NOT NULL,areaname varchar2(30) default ' ' NOT NULL);4. 创建表时的命名规则和注意事项1)表名和字段名的命名规则:必须以字母开头,可以含符号A-Z,a-z,0-9,_,$,#2)⼤⼩写不区分3)不⽤SQL⾥的保留字, ⼀定要⽤时可⽤双引号把字符串括起来.4)⽤和实体或属性相关的英⽂符号长度有⼀定的限制注意事项:1)建表时可以⽤中⽂的字段名, 但最好还是⽤英⽂的字段名2)创建表时要把较⼩的不为空的字段放在前⾯, 可能为空的字段放在后⾯3)建表时如果有唯⼀关键字或者唯⼀的约束条件,建表时⾃动建了索引4)⼀个表的最多字段个数也是有限制的,254个.5. 约束名的命名规则和语法约束名的命名规则约束名如果在建表的时候没有指明,系统命名规则是SYS_Cn(n是数字)约束名字符串的命名规则同于表和字段名的命名规则6. 使⽤约束时的注意事项约束⾥不能⽤系统函数,如SYSDATE和别的表的字段⽐较可以⽤本表内字段的⽐较想在事务处理后, 做约束的检查SQL> alter session set constraints deferred.7. 由实体关系图到创建表的例⼦ s_dept前提条件:已有region表且含唯⼀关键字的字段idSQL> CREATE TABLE s_dept(id NUMBER(7)CONSTRAINT s_dept_id_pk PRIMARY KEY,name VARCHAR2(25)CONSTRAINT s_dept_name_nn NOT NULL,region_id NUMBER(7)CONSTRAINT s_dept_region_id_fk REFERENCES region (id),CONSTRAINT s_dept_name_region_id_uk UNIQUE(name, region_id));8. 较复杂的创建表例⼦SQL> CREATE TABLE s_emp(id NUMBER(7)CONSTRAINT s_emp_id_pk PRIMARY KEY,last_name VARCHAR2(25)CONSTRAINT s_emp_last_name_nn NOT NULL,first_name VARCHAR2(25),userid VARCHAR2(8)CONSTRAINT s_emp_userid_nn NOT NULLCONSTRAINT s_emp_userid_uk UNIQUE,start_date DATE DEFAULT SYSDATE,comments VARCHAR2(25),manager_id NUMBER(7),title VARCHAR2(25),dept_id NUMBER(7)CONSTRAINT s_emp_dept_id_fk REFERENCES s_dept(id),salary NUMBER(11,2),commission_pct NUMBER(4,2)CONSTRAINT s_emp_commission_pct_ck CHECK(commission_pct IN(10,12.5,15,17.5,20)));8. 通过⼦查询建表通过⼦查询建表的例⼦SQL>CREATE TABLE emp_41 AS SELECT id, last_name, userid, start_dateFROM s_emp WHERE dept_id = 41;SQL> CREATE TABLE A as select * from B where 1=2;只要表的结构.10. ⽤⼦查询建表的注意事项1)可以关连多个表及⽤集合函数⽣成新表,注意选择出来的字段必须有合法的字段名称,且不能重复。
数据库转换Mysql-Oracle之建表语句
数据库转换Mysql-Oracle之建表语句Mysql建库语句(导出的):DROP TABLE IF EXISTS `tablename`;CREATE TABLE `tablename` (`C_DI_CDE` varchar(40) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,/*Mysql添加注释⽅法:在创建字段后直接填写COMMENT '注释内容'*/`C_PATER_CDE` varchar(40) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT ' ⽗代码',`C_NAME` varchar(200) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT ' 名称',`C_DESCRIBE` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT '0' COMMENT ' 描述',`C_STATE` varchar(10) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT '0' COMMENT ' 状态',PRIMARY KEY (`C_DI_CDE`),/*MySQL中的KEY为键的含义和索引定义相同,是索引约束,即主键外键也是索引的⼀种,故Unique KEY表⽰唯⼀性索引*/UNIQUE KEY `PK_WEB_BAS_DIC_DT` (`C_DI_CDE`) USING BTREE,KEY `IDX_WEB_BAS_DIC_DT_C_DICT_TYPE` (`C_DICT_TYPE`) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='CLM_C_DICD_DATAS';备注:表名和表字段上的符号不是单引号⽽是tab键上⾯的那个键的英⽂状态下的符号,加或不加都可以,在表字段名为关键字是需要加该符号防⽌与关键字冲突⽽建表失败。
抓取oracle建表语句及获取建表ddl语句
抓取oracle建表语句及获取建表ddl语句抓取oracle建表语句及获取建表ddl语句1.抓取代码如下: 1.1.产⽣表的语法资料DECLARE-- v_notPartTable VARCHAR2(1000):= '&2';--v_sql CLOB;v_partType VARCHAR2(20);v_partColumn VARCHAR2(50);v_subPartType VARCHAR2(50);v_subPartSql VARCHAR2(4000);v_seq NUMBER := 10;BEGINFOR v_cur in (SELECT table_name,partitioned,t.TABLESPACE_NAME,t.PCT_FREE, t.LOGGING, t.CACHE FROM user_tables twhere table_name = 'TEST1') LOOPv_seq := v_seq + 1;INSERT INTO tmp_tabsql(seq,table_name,table_sql) VALUES(v_seq, v_cur.table_name, 'CREATE TABLE ' || v_cur.table_name || '(' ); --columnsFOR v_column IN (SELECT CASE WHEN REGEXP_LIKE (COLUMN_NAME,'^\d+$') THEN '"'||COLUMN_NAME||'"' ELSE COLUMN_NAME END COLUMN_NAME, DATA_TYPE,DATA_LENGTH, DATA_PRECISION,DATA_SCALE,COLUMN_IDFROM user_tab_columnsWHERE table_name = v_cur.table_nameORDER BY column_id ASC) LOOPv_seq := v_seq + 1;INSERT INTO tmp_tabsql(seq, table_name, table_sql) VALUES(v_seq, v_cur.table_name,CASE WHEN v_column.column_id <> 1 THEN ' ,' END|| v_column.column_name || ' ' || v_column.data_type|| CASE v_column.data_type WHEN 'TIMESTAMP(6)' THEN '' WHEN 'DATE' THEN ''WHEN 'CLOB' THEN '' WHEN 'BLOB' THEN ''WHEN 'NUMBER' THENCASEWHEN v_column.data_scale is NOT NULL AND v_column.data_precision IS NOT NULL THEN'('||v_column.data_precision||','||v_column.data_scale||')'WHEN v_column.data_precision IS NOT NULL THEN '(' || v_column.data_precision|| ')'ENDELSECASE WHEN v_column.data_length IS NOT NULL THEN '(' || v_column.data_length || ')' ENDEND);END LOOP;v_seq := v_seq + 1;INSERT INTO tmp_tabsql(seq, table_name, table_sql) VALUES(v_seq, v_cur.table_name, ')');IF v_cur.partitioned = 'YES' THENSELECT t.partitioning_type, t.subpartitioning_type , tk.column_nameINTO v_partType, v_subPartType, v_partColumnFROM User_Part_Tables t, User_Part_Key_Columns tkwhere t.table_name = AND t.table_name = v_cur.table_name;v_seq := v_seq + 1;INSERT INTO tmp_tabsql(seq, table_name, table_sql) VALUES(v_seq, v_cur.table_name,' pctfree 0 nologging partition by ' || v_partType ||'('||v_partColumn||')' );-- subpartitionv_subPartSql := '';IF v_subPartType <> 'NONE' THENSELECT t.column_name INTO v_partColumn FROM user_subpart_key_columns tWHERE = v_cur.table_namev_subPartSql := 'subpartition by '|| v_subPartType ||'('|| v_partColumn ||') subpartition template (' ||CHR(10);FOR v_tmp in (SELECT t.subpartition_name, t.high_bound, t.subpartition_positionFROM User_Subpartition_Templates tWHERE TABLE_NAME = v_cur.table_nameORDER BY t.subpartition_position ASC) LOOPv_subPartSql := v_subPartSql || CASE WHEN v_tmp.subpartition_position > 1 THEN CHR(10) ||' ,' END|| 'subpartition '|| v_tmp.subpartition_name || ' values (' || v_tmp.high_bound || ')';END LOOP;v_subPartSql := v_subPartSql || CHR(10) || ')' ||CHR(10);END IF;v_seq := v_seq + 1;INSERT INTO tmp_tabsql(seq, table_name, table_sql) VALUES(v_seq, v_cur.table_name,v_subPartSql || '(partition P2011010100 values less than (to_date(''2011-01-01'',''yyyy-mm-dd'')));');ELSEv_seq := v_seq + 1;INSERT INTO tmp_tabsql(seq,table_name,table_sql) VALUES(v_seq, v_cur.table_name,' TABLESPACE ' || v_cur.tablespace_name|| ' PCTFREE ' || v_cur.pct_free|| CASE TRIM(v_cur.logging) WHEN 'NO' THEN ' NOLOGGING' END|| CASE trim(v_cur.cache) WHEN 'Y' THEN ' CACHE' END||';');END IF;COMMIT;END LOOP;END;/1.2.输出⽂本资料spool &1select table_sql from (SELECT 'set echo off;' table_sql,0 seq from dualUNION ALLSELECT 'set feedback off;', 1 seq FROM dualunion ALLSELECT table_sql,seq FROM tmp_tabsqlUNION ALLSELECT 'exit;',9999999999 seq from dual) order by seq asc;spool OFF;drop TABLE tmp_tabsql PURGE;EXIT;2 获取建表ddl语句2.1.获取ddl ##('TABLE','表名','⽤户名')SELECT DBMS_METADATA.GET_DDL('TABLE','ODRM','S6MISM') FROM DUAL;2.2. 得到⼀个⽤户下的所有表,索引,存储过程的ddlSELECT DBMS_METADATA.GET_DDL(U.OBJECT_TYPE, u.object_name) FROM USER_OBJECTS u where U.OBJECT_TYPE IN ('TABLE','INDEX','PROCEDURE');2.3.得到所有表空间的ddl语句SELECT DBMS_METADATA.GET_DDL('TABLESPACE', TS.tablespace_name) FROM DBA_TABLESPACES TS;2.4.得到所有创建⽤户的ddlSELECT DBMS_METADATA.GET_DDL('USER',ERNAME) FROM DBA_USERS U;。
oracle标准建表语句
oracle标准建表语句
Oracle标准建表语句的基本语法如下:
sql复制代码
CREATE TABLE table_name (
column1 datatype,
column2 datatype,
column3 datatype,
...
);
其中,table_name是要创建的表的名称,column1, column2, column3等是表的列名,datatype是列的数据类型。
在建表时,你可以为每列指定一个数据类型,例如:
•NUMBER:用于存储整数和浮点数。
•VARCHAR2:用于存储可变长度的字符串。
•DATE:用于存储日期和时间。
•CLOB:用于存储大型文本数据。
•等等。
你还可以为表中的某些列设置约束,例如:
•NOT NULL:指定该列不能为空。
•PRIMARY KEY:指定该列作为主键,用于唯一标识表中的每一行。
•FOREIGN KEY:指定该列是外键,用于建立表之间的关系。
•UNIQUE:指定该列的唯一性约束,确保该列中的值都是唯一的。
•等等。
以下是一个具体的例子,创建一个名为employees的表,包含id, name, 和salary三个列:
sql复制代码
CREATE TABLE employees (
id NUMBER PRIMARY KEY,
name VARCHAR2(50),
salary NUMBER(10, 2)
);
这只是一个简单的例子,实际上Oracle 支持更多的语法和功能,可以根据具体需求进行调整。
oracle系统表建表语句
oracle系统表建表语句1. 你想知道在Oracle里怎么建系统表吗?就像盖房子得有蓝图一样,建表也得有正确的语句。
比如说,要创建一个简单的员工信息表,CREATE TABLE employee (id NUMBER, name VARCHAR2(50), age NUMBER); 这里就定义了表名是employee,有id、name和age这几个列呢。
2. 哇塞,Oracle系统表建表语句可没那么神秘!想象你在做一个收纳盒,每个格子放不同的东西。
CREATE TABLE product (product_id NUMBER, product_name VARCHAR2(100), price NUMBER); 这就像做了个放产品信息的收纳盒,产品编号、名称和价格各有各的“格子”。
3. Oracle建表语句就像是给数据安排宿舍。
我给你举个例子,要是创建一个学生成绩表,CREATE TABLE score (student_id NUMBER, subject VARCHAR2(50),grade NUMBER); 就像给每个学生的科目成绩都安排了一个小“宿舍”呢。
4. 嘿建Oracle系统表的语句不难理解啦。
好比你要整理自己的书架,每个架子放不同类型的书。
CREATE TABLE book (book_id NUMBER, book_title VARCHAR2(100), author VARCHAR2(50)); 这就是给书的编号、书名和作者建了个“书架”。
5. 哎你可别觉得Oracle建表语句很复杂哦。
你看,如果要建一个订单表,就像给订单们造个家。
CREATE TABLE order_table (order_id NUMBER, customer_name VARCHAR2(100), order_date DATE); 这样订单的编号、顾客名字和日期都有地方住啦。
6. 天呐,建Oracle系统表就像在画画。
oracle查询表的建表语句
oracle查询表的建表语句表1: 学生信息表CREATE TABLE student_info (student_id NUMBER(10) PRIMARY KEY, -- 学生IDstudent_name VARCHAR2(20) NOT NULL, -- 学生姓名gender CHAR(1) CHECK (gender IN ('M', 'F')), -- 性别age NUMBER(2), -- 年龄address VARCHAR2(100), -- 地址phone_number VARCHAR2(20) UNIQUE, -- 手机号码email VARCHAR2(50), -- 邮箱birth_date DATE -- 出生日期);表2: 课程信息表CREATE TABLE course_info (course_id NUMBER(5) PRIMARY KEY, -- 课程IDcourse_name VARCHAR2(50) NOT NULL, -- 课程名称credit NUMBER(1), -- 学分department VARCHAR2(50), -- 开设院系teacher_id NUMBER(10), -- 教师IDCONSTRAINT fk_teacher_id FOREIGN KEY (teacher_id) REFERENCES teacher_info(teacher_id) -- 外键关联教师信息表);表3: 教师信息表CREATE TABLE teacher_info (teacher_id NUMBER(10) PRIMARY KEY, -- 教师IDteacher_name VARCHAR2(20) NOT NULL, -- 教师姓名gender CHAR(1) CHECK (gender IN ('M', 'F')), -- 性别age NUMBER(2), -- 年龄address VARCHAR2(100), -- 地址phone_number VARCHAR2(20) UNIQUE, -- 手机号码email VARCHAR2(50) -- 邮箱);表4: 成绩表CREATE TABLE score_info (student_id NUMBER(10), -- 学生IDcourse_id NUMBER(5), -- 课程IDscore NUMBER(3), -- 成绩CONSTRAINT fk_student_id FOREIGN KEY (student_id) REFERENCES student_info(student_id), -- 外键关联学生信息表CONSTRAINT fk_course_id FOREIGN KEY (course_id)REFERENCES course_info(course_id) -- 外键关联课程信息表);表5: 班级信息表CREATE TABLE class_info (class_id NUMBER(5) PRIMARY KEY, -- 班级IDclass_name VARCHAR2(20) NOT NULL, -- 班级名称department VARCHAR2(50) NOT NULL, -- 所属院系teacher_id NUMBER(10), -- 班主任教师IDCONSTRAINT fk_teacher_id FOREIGN KEY (teacher_id) REFERENCES teacher_info(teacher_id) -- 外键关联教师信息表);表6: 学生选课表CREATE TABLE student_course (student_id NUMBER(10), -- 学生IDcourse_id NUMBER(5), -- 课程IDCONSTRAINT fk_student_id FOREIGN KEY (student_id) REFERENCES student_info(student_id), -- 外键关联学生信息表CONSTRAINT fk_course_id FOREIGN KEY (course_id) REFERENCES course_info(course_id) -- 外键关联课程信息表);表7: 学生考勤表CREATE TABLE student_attendance (student_id NUMBER(10), -- 学生IDcourse_id NUMBER(5), -- 课程IDattendance_date DATE, -- 考勤日期status CHAR(1) CHECK (status IN ('P', 'A')), -- 考勤状态 (P: 出勤, A: 缺勤)CONSTRAINT fk_student_id FOREIGN KEY (student_id) REFERENCES student_info(student_id), -- 外键关联学生信息表CONSTRAINT fk_course_id FOREIGN KEY (course_id) REFERENCES course_info(course_id) -- 外键关联课程信息表);表8: 课程安排表CREATE TABLE course_schedule (course_id NUMBER(5), -- 课程IDweekday VARCHAR2(20), -- 星期几start_time VARCHAR2(10), -- 开始时间end_time VARCHAR2(10), -- 结束时间classroom VARCHAR2(20), -- 上课教室CONSTRAINT fk_course_id FOREIGN KEY (course_id) REFERENCES course_info(course_id) -- 外键关联课程信息表);表9: 教师授课表CREATE TABLE teacher_course (teacher_id NUMBER(10), -- 教师IDcourse_id NUMBER(5), -- 课程IDCONSTRAINT fk_teacher_id FOREIGN KEY (teacher_id) REFERENCES teacher_info(teacher_id), -- 外键关联教师信息表CONSTRAINT fk_course_id FOREIGN KEY (course_id) REFERENCES course_info(course_id) -- 外键关联课程信息表);表10: 学生班级关系表CREATE TABLE student_class (student_id NUMBER(10), -- 学生IDclass_id NUMBER(5), -- 班级IDCONSTRAINT fk_student_id FOREIGN KEY (student_id) REFERENCES student_info(student_id), -- 外键关联学生信息表CONSTRAINT fk_class_id FOREIGN KEY (class_id) REFERENCES class_info(class_id) -- 外键关联班级信息表。
oracle 查询表的建表语句
一、概述在日常的数据库管理工作中,我们经常需要查询某张表的建表语句,以便了解该表的结构和属性。
Oracle作为全球领先的数据库管理系统,其查看表的建表语句的操作方法值得探讨和总结。
二、使用DESCRIBE命令1. DESCRIBE是Oracle SQL中用来查看表结构的命令,可以用来查看表的列名、数据类型、长度等信息。
示例如下:DESCRIBE 表名;2. 通过DESCRIBE命令查看表的结构,可以得到表的列名和数据类型等信息,但无法直接得到创建该表的完整SQL语句。
三、使用用户对象查询1. Oracle中的用户对象查询是一种通过系统表查看数据库对象信息的方式。
2. 可以通过以下SQL语句查看指定表的建表语句:SELECT dbms_metadata.get_ddl('TABLE', '表名', '用户名') FROM dual;其中,'表名'为要查询的表名,'用户名'为表所属的用户名称。
四、使用数据字典查询1. 在Oracle中,数据字典是一个包含了数据库对象、用户信息、权限、表空间等数据库元数据的系统表。
2. 可以通过以下SQL语句查询指定表的建表语句:SELECT dbms_metadata.get_ddl('TABLE', '表名') FROM dual;其中,'表名'为要查询的表名。
五、使用SQL Developer工具1. SQL Developer是Oracle冠方推出的数据库管理工具,提供了丰富的表结构查看和管理功能。
2. 在SQL Developer中,可以通过右键点击表名,选择“SQL”,然后选择“生成DDL”来查看表的建表语句。
六、总结在Oracle数据库中,通过DESCRIBE命令、用户对象查询、数据字典查询以及SQL Developer工具,都可以方便地查询表的建表语句。
Oracle建表空间各种语句
在创建用户之前,先要创建表空间:其格式为:格式: create tablespace 表间名 datafile '数据文件名' size 表空间大小;如:SQL> create tablespace news_tablespace datafile'F:\oracle\product\10.1.0\oradata\news\news_data.dbf' size 500M;其中'news_tablespace'是你自定义的表空间名称,可以任意取名;'F:\oracle\product\10.1.0\oradata\news\news_data.dbf'是数据文件的存放位置,'news_data.dbf'文件名也是任意取;'size 500M'是指定该数据文件的大小,也就是表空间的大小。
现在建好了名为'news_tablespace'的表空间,下面就可以创建用户了:其格式为:格式: create user 用户名 identified by 密码 default tablespace 表空间表;如:SQL> create user news identified by news default tablespace news_tablespace;默认表空间'default tablespace'使用上面创建的表空间。
接着授权给新建的用户:SQL> grant connect,resource to news; --表示把 connect,resource权限授予news用户SQL> grant dba to news; --表示把 dba权限授予给news用户授权成功。
ok! 数据库用户创建完成,现在你就可以使用该用户创建数据表了!1.建表空间create tablespace hoteldata datafile'D:\java\Oracle\product\10.1.0\oradata\zznorcl\hoteldata.dbf'size200m autoextend on next 10m maxsize unlimited;2.建用户create user hotel identified by hotel default tablespace hoteldata account unlock;//identified by 后面的是密码,前面的是用户名3.用户授权grant resource,connect,RECOVERY_CATALOG_OWNER to hotel ;grant create table to hotel;alter user hotel quota unlimited ON OSDB;alter user hotel default tablespace hoteldata;4.删除表空间DROP TABLESPACE hoteldata INCLUDING CONTENTS AND DATAFILES;5.删除用户DROP USER hotel CASCADE6.删除表的注意事项在删除一个表中的全部数据时,须使用TRUNCATE TABLE 表名;因为用DROP TABLE,DELETE * FROM 表名时,TABLESPACE表空间该表的占用空间并未释放,反复几次DROP,DELETE操作后,该TABLESPACE上百兆的空间就被耗光了。
oracle sql 查建表语句
一、概述Oracle SQL是一种强大的关系型数据库管理系统,用于管理和操作大规模的数据。
在Oracle SQL中,建表语句是非常重要的一部分,它定义了数据库中表的结构和属性。
本文将介绍如何使用Oracle SQL语言编写建表语句。
二、建表语句基本格式在Oracle SQL中,建表语句的基本格式如下:CREATE TABLE table_name(column1 datatype,column2 datatype,column3 datatype,...);其中,CREATE TABLE是创建表的关键字,table_name是要创建的表的名称,column1、column2、column3等是表的列名,datatype是列的数据类型。
建表语句以分号结尾。
三、建表语句实例下面是一个简单的建表语句实例,用于创建一个名为employee的表,包含id、name和age三个列:CREATE TABLE employee(id NUMBER,name VARCHAR2(50),age NUMBER);在这个例子中,employee是表名,id、name和age分别是表的三个列,它们的数据类型分别是NUMBER和VARCHAR2。
四、建表语句的详细说明1. 列名和数据类型:在建表语句中,首先列出表的列名和对应的数据类型。
列名是用于标识每一列的名称,而数据类型则指定了列中可以存储的数据类型,例如数字、文本、日期等。
2. 约束条件:在建表语句中,还可以定义列的约束条件,包括主键约束、唯一约束、非空约束、外键约束等。
约束条件可以确保数据的完整性和一致性。
3. 默认值:建表语句还可以指定列的默认值,当插入数据时,如果没有指定该列的数值,则会采用默认值。
4. 外键关系:通过建表语句,还可以定义表与表之间的外键关系,以确保数据的一致性和完整性。
五、建表语句的注意事项在编写建表语句时,需要注意以下几点:1. 命名规范:表名、列名等命名需要符合数据库命名规范,通常采用大写字母、下划线等格式。
Oracle建表DDL语句
Oracle建表DDL语句除了用PL/SQL DEV,Toad等工具得到建表DDL语句,使用dbms_metadata.get_ddl 也可以,用法如下。
且不仅限与表,所有对象都可以dbms_metadata.get_ddl('OBJECT_TYPE','OBJECT_NAME','OWNER')SQL> select dbms_metadata.get_ddl('SYNONYM','DCUSTMSGHIS','PUBLIC') from dual;DBMS_METADATA.GET_DDL('SYNONYM','DCUSTMSGHIS','PUBLIC')--------------------------------------------------------------------------------CREATE PUBLIC SYNONYM "DCUSTMSGHIS" FOR "DBACCADM"."DCUSTMSGHIS"select dbms_metadata.get_ddl('TABLE','WCHG201305','DBCUSTADM') FROM DUAL;select dbms_metadata.get_ddl('INDEX','PK_WCHG201305','DBCUSTADM') FROM DUAL;我们都知道在9i之前,要想获得建表和索引的语句是一件很麻烦的事。
我们可以通过eXPort with rows=no来得到,但它的输出因为格式的问题并不能直接拿来用。
而另一种方法就是写复杂的脚本来查询数据字典,但这对于一稍微复杂的对象,如IOT和嵌套表等,还是无法查到。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
--创建用户
create user han identified by han default tablespace
users Temporary TABLESPACE Temp;
grant connect,resource,dba to han; //授予用户han开发人员的权利
--创建表
create table classes(
id number(9) not null primary key,
classname varchar2(40) not null)
--查询表select * from classes;
--删除表drop table students;
--修改表的名称rename alist_table_copy to alist_table;
--显示表结构
describe test --不对没查到
--增加列alter table test add address varchar2(40);
--删除列alter table test drop column address;
--修改列的名称alter table test modify address addresses varchar(40;
--修改列的属性alter table test modi
create table test1(
id number(9) primary key not null,
name varchar2(34)
)
rename test2 to test;
--创建自增的序列
create sequence class_seq increment by 1 start with 1 MAXVALUE 999999 NOCYCLE NOCACHE;
select class_seq.currval from dual
--插入数据insert into classes values(class_seq.nextval,'软件一班') commit;
--更新数据update stu_account set username='aaa' where count_id=2; commit;
--创建唯一索引create unique index username on
stu_account(username); --唯一索引不能插入相同的数据
--行锁在新打开的对话中不能对此行进行操作
select * from stu_account t where t.count_id=2 for update; --行锁
--alter table stuinfo modify sty_id to stu_id;
alter table students drop constraint class_fk;
alter table students add constraint class_fk foreign key (class_id) references classes(id);--外键约束
alter table stuinfo add constraint stu_fk foreign key (stu_id) references students(id) ON DELETE CASCADE;--外键约束,级联删除
alter table stuinfo drop constant stu_fk;
insert into students values(stu_seq.nextval,'张三',1,sysdate);
insert into stuinfo values(stu_seq.currval,'威海');
select * from stuinfo;
create table zhuce(
zc_id number(9) not null primary key,
stu_id number(9) not null,
zhucetime date default sysdate
)
create table feiyong (
fy_id number(9) not null primary key,
stu_id number(9) not null,
mx_id number(9) not null,
yijiao number(7,2) not null default 0,
qianfei number(7,2) not null
)。