读书笔记 - Derby Reference Manual(一)

1、Derby主要遵循SQL_92标准,支持部分SQL_99标准。

2、预编译SQL语句依赖数据字典对象,当对应的数据字典对象被修改后,SQL将被重新编译。因为编译一般发生在SQL第一次被执行时,所以当编译失败了,执行的请求也就随之失败。

3、ALTER TABLE语句
  增/删列或者约束条件、修改VARCHAR列或者VARCHAR FOR BIT DATA列的长度、修改行级锁、修改标识列的增量值、设定标识列下一次生成的开始值、修改列是否可为null以及列的默认值。

  只能对标识列进行增量值修改操作。

  标记列生成时如果指定为"GENERATER BY DEFAULT",那么该列同时允许手动或者系统生成值,这样一来会导致手动插入的值与系统自动生成的值冲突。
   - CREATE TABLE tauto(i INT GENERATED BY DEFAULT AS IDENTITY, k INT)
   - CREATE UNIQUE INDEX tautoInd ON tauto(i)
   - INSERT INTO tauto(k) values 1,2
   - INSERT INTO tauto VALUES (3,3)
   - INSERT INTO tauto VALUES (4,4)
   - INSERT INTO tauto VALUES (5,5)
   - INSERT INTO tauto(k) values 6
  最后一条插入语句就将失败,因为系统自动生成的值将为3,与手动插入的记录冲突。而这时通过设定标记列开始值来解决,
   - ALTER TABLE tauto ALTER COLUMN i RESTART WITH 6
  ALTER TABLE的执行不会影响视图,所以如果需要同步,必须重新生成视图。

  Derby不支持修改列的数据类型以及添加列时使用DEFAULT子句

本节至此,"Derby also raises an error if you try to add a DEFAULT clause to a generated column."这句话实在没看懂,有知道,告诉一声啊,谢谢。出处:http://db.apache.org/derby/docs/dev/ref/rrefsqlj81859.html

  添加新列,几乎与CREATE TABLE语句没有区别。只有在指定列为NOT NULL时,有一点特殊,就是必须同时设定DEFAULT子句,这样之前存在的记录才会自动添加值,否则会抛出异常。

  可以添加所有表级别的约束,但会先检查约束的列是否符合约束。如不符合,则添加失败并抛出异常。

  删除列,分为级连删除(CASCADE)与约束式删除(RESTRICT),默认为级连。指定为约束式时,不能删除被依赖的列;指定为级连时,则会额外删除依赖该列的其它数据集。如:视图、触发器、主键约束、外键约束、值唯一性约束、检查约束和列级权限。(a schema object:views, triggers, primary key constraints, foreign key constraints, unique key constraints, check constraints, and column privileges)但无论是级连还是约束式删除,都不会给索引面子,指定删除那列就会删除那列。如果该列在索引中,则从索引中删除,如果该列为索引中的唯一列,则连索引也一并删了。无论如何,不可能删除表的最后一列。

  删除约束,原先没命名的可以通过在SYS.SYSCONSTRAINTS中找到对应的名字进行删除;而对于主键、值唯一性以及外键等约束,直接删除对应索引就行了。

  列的数据类型不允许修改,而VARCHAR和VARCHAR FOR BIT DATA对于长度的修改,只允许增加,不允许减少。当该列为主键、被外键约束依赖的值唯一性列或者本身为外键约束,则不允许对长度进行任何修改。

  在数据库系统默认锁为行级锁时,LOCKSIZE子句允许对行级锁进行变更。如果此时默认是表级别的,是不允许进行行级锁变更操作的。如施行了操作,Derby对于这种情况默许而不抛出异常。当然,操作结果肯定是失败的。除此之外,你可以在行级别/表级别锁之间通过LOCKSIZE任意进行切换。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值