create table Game
(Gid char(6) primary key,
Tnumberh varchar(4) not null,
Tnumbera varchar(4) not null,
Rid char(18) not null,
Gcode char(10) not null,
Gdate date,
foreign key (Tnumberh) references Team(Tnumber),
foreign key (Tnumbera) references Team(Tnumber),
foreign key (Rid) references referee(Rid)
);
假设创建这个表,怎么才能使Tnumberh 与Tnumbera的数据不能相同

解决方案 »

  1.   

    触发器
    insert update时判断两字段值是否相同,相同就提示无法insert,update
      

  2.   

    还可以添加约束,可以一试
    alter table game add constraint ck_ha check(Tnumberh <> Tnumbera);
      

  3.   


    -- 使用 check 约束
    SQL> 
    SQL> create table test(a int, b int);
    Table created
    SQL> alter table test add constraint chk_a_b check (a<>b);
    Table altered
    SQL> -- 这条成功
    SQL> insert into test values(100,200);
    1 row inserted
    SQL> -- 这条失败
    SQL> insert into test values(100,100);
    insert into test values(100,100)
    ORA-02290: 违反检查约束条件 (TEST_USER.CHK_A_B)
    SQL> col a format a10;
    SQL> col b format a10;
    SQL> select * from test;
             A          B
    ---------- ----------
           100        200
    SQL> drop table test purge;
    Table droppedSQL> 
      

  4.   

    1、业务系统中限定
    2、触发器限定
    3、字段的check约束限定 
     alter table Game
      add constraint CK1
      check (Tnumberh !=Tnumbera);
      

  5.   

    1、前台页面JS判断,简单效率也高
    2、CHECK不错
    3、触发器效率太低,对这个问题不太适用