做VB,或DELPHI的(etc.),基本上都有一个共性,那就是把对数据合法性的检查全都放到VB,DELPHI(etc.)的代码里。对数据库应用程序来说,不去充分的运用Trigger,CONSTRAINT,如果哪个用户进到数据库里,随便修改一条数据,就有可能置应用程序于混乱中。这一点我深有体会,很多小软件公司也不会对这方面给予重视,因为他们招程序员时是这样要求的:熟悉SQL,这里的SQL大部分指的就是DML语言(SELECT,INSERT etc.),偶而有要求会Trigger,Procedure(Function)的,也不过是用来做为一种考核你会不会SQL的手段!
由于Oracle过于庞大,以致于俺的好多工作都是要抛开程序界面,在数据库上直接操作的,最常碰到的就是触发器和存储过程,错误的操作,是不会被数据所接受的。
对于表的约束条件,俺也不是太懂,今天大致翻了一下书,原来这部分也是很简单的。
UNIQUE 唯一键 PRIMARY KEY 主键 NOT NULL CHECK 检查,必须符合指定的条件 FOREIGN KEY 外键,用来创建一个与参考表之间的关系
语法:
CONSTRAINT constraint_name UNIQUE(column) CONSTRAINT constraint_name PRIMARY KEY(column) NOT NULL CONSTRAINT constraint_name CHECK(condition) CONSTRAINT constraint_name FOREIGN KEY(column) REFERENCING table_name(column)
ALTER TABLE table_name ADD CONSTRAINT constraint_name <UNIQUE | PRIMARY KEY | CHECK | FOEIGN KEY> (column) [REFERENCING table_name(column)] ALTER TABLE table_name <ENABLE | DISABLE> constraint_name ALTER TABLE table_name DROP CONSTRAINT constraint_name
举例:
CREATE TABLE X_APP_GUIDS( GUID NUMBER, TABLE_NAME VARCHAR2(50), UPD_DATE DATE, UPD_NAME VARCHAR2(20), USE_FLAG VARCHAR2(1) DEFAULT 'Y' ) ALTER TABLE X_APP_GUIDS ADD CONSTRAINT USE_FLAG_CK CHECK(USE_FLAG IN ('Y','N'))
INSERT INTO X_APP_GUIDS(GUID,TABLE_NAME,USE_FLAG) VALUES (1,'AA','S');
报以下错误: ORA-02290: 违反检查约束条件 (XLING.USE_FLAG_CK)
CREATE TABLE X_GNO_RULE( GUID NUMBER, SLIP_TYPE VARCHAR2(10), SECTION_SEQ NUMBER, SECTION_CODE VARCHAR2(10), SECTION_STRING VARCHAR2(100), COMP_NO VARCHAR2(20), ) ALTER TABLE X_GNO_RULE ADD (UPD_DATE DATE,UPD_NAME VARCHAR2(20)) ALTER TABLE X_GNO_RULE ADD CONSTRAINT SLIP_TYPE_COMP_NO_PK PRIMARY KEY(SLIP_TYPE,COMP_NO) |