Derby数据库使用手册(1)-----------DDL

来源:互联网 发布:ios图片模糊软件 编辑:程序博客网 时间:2024/06/03 23:45

    Derby数据库确实是不错,在小系统使用中是非常的方便。由于使用的人较少,文档、资料方面不太好找。接下来,打算做一个derby资料方面的收集,欢迎大家推荐。

现在就我参照Derby官方的手册翻译、整理出的一些基本使用方法分享给大家,请大家多多指教。

一:使用约定

1.双引号是用来划定与SQL92的特殊标识符的界限
比如: select name as "select" from user; 两边是特殊标识符as和from

2.单引号用来划定字符串的界限
比如: insert into user values(2,'echo')
而insert into user values(2,"huang")就会提示出错,与其他数据库不同,这一点让很容易让人费解。

3.单引号在字符串中要用两个单号转义,而双引号不用转义就可以在字符串中,但是在java中要转义双引号。
比如:insert into user values(2,'echo''house');insert into user values(2,'echo"house')

4.注释,单行注释用--,多行用/**/

5.标识符最大长度为128位,否则会报SQLException X0X11

二:DDL操作

8.修改表格(Table)
1)为表格增加一列
2)为表格增加一约束
3)删除一列
4)删除一约束
5)为varchar或者varchar for bit data增加宽度
6)覆盖或者删除行级别的锁
7)改变标示列的增长值和开始值(change the increment value and start value of the identity column)
8)改变列是否为空的约束
9)改变列的默认值

9.删除列
删除列时如果声明了restrict或cascade,
restrict会作出相就应的检查,如果检查到有不合法的会报异常
cascade会把检查到关联一起删除
检查项包括:视图,触发器,主键约束,外键约束,唯一性约束,检查约束和列特(column privlileges)
索引不在检查项中,列删除时,会把索引中相应列删除,如果只有一列的索引则直接删除索引。

10.修改列
修改列时不能减少宽度


11.约束种类
primary key, foreign key,check,unique

1)
修改表格语句会导致所有与这个表相关的语句被修改从而在下一次执行前被再次编译。
如果有与表格相关打开的游标,修改表格语句会被拒绝。
表格与索引如果模式不一样会报错。
索引默认以升序排序。
限定索引的模式名字不能以sys开头。

2)不能在primary key,unique约束的列上加索引,因为系统默认已经加上了。


12.创建语句
创建表格,函数,索引,存储过程,角色,模式,同义词,触发器,视图

1)函数
Derby的函数可以创建java函数;返回类型可以是表格。这个以后再研究,还是看一些简单的现说。

2)索引
一个索引只能使用一列一次,这是当然吧不然是重复或者冲突(比如排序方法)外没有什么好处。最多能用16列作为索引,索引名不超过128个字符。

3)存储过程
过程参数类型,in,out,inout,默认为in。有些类型是不能作为参数的比如:BLOB,CLOB,LONG VARCHAR,LOGN VARCHAR FOR BIT DATA AND XML

这句话以后实践去理解:the database manager will call the procedure as a public static method in a java class

4)角色
创建角色之前要查看derby.database.sqlAuthorization是否为true,这个负责开启认证。
角色名不能与用户名冲突。角色名不能以sys,public开头,这些都被当作保留。

5)创建序列
创建序列生成器,一个产生一个数字

create sequence [schemaName.] SQL92Identifier [sequenceElement]*
sequenceElement{
    AS dataType
    start with singedInteger
    increment by singedInteger
    maxvalue singedInteger | no maxvalue
    minvalue singedInteger | no minvalue
    cycle | no cycle
}

用next value for 表达式来回收下一个值
比如:create sequence order_entry_id as bigint start with 30000

6)别名
可以为表格和视图创建别名,在表格和视图不存在时也能创建,会得到一个警告,但是在使用之前必须要存在。不能与表格和视图
重名。
比如:create synonym bing_user for user_bing 


7)表格
创建表格有两种方式:
create table...和create table ... as(这种方式有点视图的样子,但没有数据with no data,保是利用列名和数据类型,当然也可以改变列名)
生成列描述:
generated {always | by default}as identity [(start with integerConstant [,increment by IntegerConstant])]
一个表格只能有一个标识列


8)触发器
触发器定义数据库事件发生时的一系列动作。比如:delete,insert,update等。
与约束一起,触发器可以巩固数据的完整性原则。可样的表格和事件可以定义多个触发器。
代码级别和行级别的触发器。
迭代层次是16次。

9)UDT(User defined type)用户定义类型
这个应该也是Derby的特色吧。
UDT是一个序列化的java对象,这个类型的列里存放java实体。不深究,有空看。


13.全局的临时表
只在当前连接中有效,当前连接断开时,表中数据被删除,内存中也会删除。只有当前连接能访问。
作用:
1)表结构在程序开始之前是不知道的;
2)其他用户不需要同样的表结构;
3)临时表中的数据只在使用这个程序时需要。
4)不需要拥有系统目录锁就能声明和删除表。

语法中有 [on commit [delete | preserve] rows] not logged [on rollback delete rows]

在提交时的动作,或删除或保留;在回滚时默认动作是删除行。

17.重命名rename
这个在不同的数据库基本不一致,让人头疼
作用于索引,列,表格
1)列  :rename column tablename.columnName to newColumnName
2)索引:rename index index-name to new-index-name
3)表格:rename table table-name to new-table-name


在使用中有比较多的限制,具体的参考refderby手册。
0 0
原创粉丝点击