sql--DDL_建表

一、DDL:定义构成数据库的结构信息
对象:表,试图,系统,同义词,索引过程,函数,触发器
 

1、表分类


堆表
分区表
簇表
外部表

引用外部表 ,不占用磁盘空间
导入外部表,存在文件或磁盘空间里
 

2、建表:


create table 表名 (column datatype|constrain(约束)|default...) tablespace <指定存放表空间> pctused< 用来做insert 操作的空间,默认为90%> pctfree<用来做update操作的空间,默认为10%>
//必须以字母开头a-z A-Z,里面只能包含0-9 _ # $ , 长度不能超过30个字符。dbca 建库时默认的表空间为users
users --10m 如果我们的users只有10m
假如我们只有9m的使用空间--只能用insert操作这9M的空间

3、

查看表


tab
user_tables //在当前用户下查看表
user_object //在当前用户下查看表

项目中我们必须自己新建一个表空间用来存放我们的数据,不能放到users下

 

select object_name,object_type from user_objects where object_tyep='TABLE';



二、

字符类型

(粉色为常用)


char:固定字符长度,不能超过2000字符;
varchar:变长字符类型,用多少,分配多少,最长只能达到4000个字符;
clob:大对象字符类型,长度为4GB-1;
number:数值型,包括浮点型,不能超过30个字符长度;
date:日期型,年月日十分秒,不能显示时区;
timestamp:时间戳,有时区,精确到毫秒;
blob:二进制数据类型,长度为4GB-1.可用来存储多媒体:视频,声音;
long:长整型;
rowid:存的列的编号,可以显示放到哪个数据文件,数据块,行号是多少;


三、

五类约束


1.not null :非空,只能创建列级,不能创建表级
 

SQL> create table ntest(name varchar2(20),dno number not null);
SQL>create table ntest(name varchar2(20)); //如果没有跟上约束,我们可以用alter进行修改 
          alter tabel ntext modify(name varchar2(20) not null);



列名最好不要超过30个,列的数量最好不要超过1000个,最好不要使用关键字。

2.unique :唯一性约束

>>>create table utest(name varchar2(20) unique) ; //列级约束
>>>create tabel utext (name varchar2(20) , unique(name));//表级约束
>>>create tabel utext ( name varchar2(20 )   constraint u_name uqique);//用u_name给我们的列级约束命名
>>>create tabel utext (name varchar2(20) , constraint  u_text_name unique(name));//u_text_name给我们的表级约束命名
  #两种约束,效果是一样的  
  #如果不给约束重命名,系统会自动给约束一个名字一般为sysxxxxx格式。




3.primary key:主键约束,值必须唯一而且非空

>>>create table ptest (name varchar2(20) primary key(name));
>>>>>>create table ptest (name varchar2(20) constraint pk_ptest_name primary key(name));//给我们的约束条件重命名




4.foreign:外建约束,主键的子集,被主键调用
 

>>>create table ftest(empno number(10) primary key,name varchar2(20),mgr number(10) references ftest(empno));
//外键用references 来指定
>>>create table ftest(empno number(10) primary key,name varchar2(20),mgr number(10) constraint fk_ftest_no  references ftest(empno));
>>>create table ftest(empno number(10) primary key,name varchar2(20),mgr number(10), fk_ftest_no foreign key(mgr) references ftest(empno));


5.check:检查约束,条件约束
>>>create table ctest (name varchar2(20), mail varchar2(30) check(mail like '%_%@%_%.%_%')); //列级约束

>>>create table ctest (name varchar2(20), mail varchar2(30) ,check(mail

like '%_%@%_%.%_%')); //表级约束

若建表的时候,出错,使用modify 去修改

表级约束与列级约束两种约束一样,只是语法上的区别
列级约束:创建表时,约束直接跟在列后
表级约束:创建表时,约束要用逗号隔开


user_constraints
user_cons_columns

>>>desc user_constraint //查看我们的哪些表有约束
>>> select constraint_name,table_name,constraint_type from user_constraint;
>>>desc user_cons_columes ; //查看约束建到了哪个列当中
>>> select constraint_name,table_name,constraint_type,column_name from user_cons_columes a ,uer_constrain b where a.constraint =b.constraint;




禁用和启用约束
alter table<> disable constraint <>; //禁用
alter table<> enable constraint<>; //启用
alter table <> drop constraint <>; //删除

四、表的基本操作
1、 增加列:
alter tabel <表名> add( 列名 数据类型);

2、修改字符长度:
alter table <表名> modify(col 数据类型)

>>> alter table ctest modify(mail varchar(20)) ; //一般改空,先导出数据,在进行修改

3、修改列名:
alter table <表名> rename column <old> to <new>;

4、删除列:
alter table <> drop column <>;

5、修改表名:
alter table <> rename to <>;

6、表只读read only;
alter table <> read only; //只能对表做查询和维护操作

维护操作
alter table cts mov ; //把数据块从一个移动到另一个
alter table cts enable rows movement; //打开行的移动
alter table cts shrink space ;//清理碎片
alter table cts disable rows movement; //关闭行的移动

7、表的读写
lter table <> read write;
8、删除表
drop table <>;//不能正真删除,只是放到回收站里,重命名了一下。
drop table <> purge; //直接删除,不放入回收站
show parameret resyslebin; //为on 则表明回收站打开的
show resyslebin ;//查看我们回收站中的内容
desc user_resyslebin;//查看我们回收站的内容,不仅能看到内容还能够看到索引
flashback table <表名> to before drop ;// 闪回,在回收站恢复我们删掉的表
flashback table <表名> to before drop rename to <>; //闪回的时候给他重命名
purge table <表名> ;// 清空回收站里指定的表
purge rscyclebin;//清空回收站
alter session set resyslebin=off;//关闭我们的回收站,只在当前会话生效
alter session set resyslebin=on;//打开我们的回收站,只在当前会话生效

五、ctas 建表方法

ctas====

子查询的方式建表
create table <> as select ...; //将其他表的表结构复制过来,内容也会一起复制
>>>create table emp1 as select * from emp;
>>>create table emp1 as select * from emp where 0=1;//只复制结构不要数据,因为给了一个为假的条件
>>>create table emp3 as select ename name.deptno dpo,job sjob from emp where 0=9;//复制表的时候修改列名
>>>create table emp3 (name,hdate,epo) as select ename,hiredate,empno from emp where 0=1;//复制的时候修改列名

转载于:https://my.oschina.net/liubaizi/blog/794382

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以使用以下步骤生成Java数据源的建表DDL: 1. 获取Java数据源的元数据信息,包括表名、列名、数据类型、长度等。 2. 根据元数据信息,生成建表DDL语句。例如,可以使用StringBuilder类构建DDL语句。 3. 将生成的DDL语句输出到控制台或写入文件中。 下面是一个简单的示例代码,仅供参考: ```java import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; public class GenerateDDL { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/test"; String user = "root"; String password = "123456"; try (Connection conn = DriverManager.getConnection(url, user, password)) { DatabaseMetaData metaData = conn.getMetaData(); ResultSet rs = metaData.getColumns(null, null, "my_table", null); StringBuilder sb = new StringBuilder(); sb.append("CREATE TABLE my_table ("); while (rs.next()) { String columnName = rs.getString("COLUMN_NAME"); String dataType = rs.getString("TYPE_NAME"); int columnSize = rs.getInt("COLUMN_SIZE"); boolean isNullable = rs.getBoolean("NULLABLE"); sb.append(columnName).append(" ").append(dataType).append("(").append(columnSize).append(")"); if (!isNullable) { sb.append(" NOT NULL"); } sb.append(", "); } sb.delete(sb.length() - 2, sb.length()); sb.append(");"); System.out.println(sb.toString()); } catch (SQLException e) { e.printStackTrace(); } } } ``` 这个例子使用Java的JDBC API来连接MySQL数据库,获取表“my_table”的元数据信息,然后根据元数据信息生成建表DDL语句并输出到控制台。您可以根据自己的需要修改代码以适应不同的数据源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值