有两表:A、B,都有字段id,name分别为PRIMARY KEY和UNIQUE KEY,现在我的需求是,向A或B中添加纪录,要求和另外一表中的id和name也要不重复,该怎么做比较好?第二问,我下面语句的本意是从A和B中查找出name为X的记录数,如果X的记录数不为0,说明X不可用,但实际的效果好像不对,各位帮我看看,谢谢!
select count(*) from A,B where A.name = X or B.name = X;
select count(*) from A,B where A.name = X or B.name = X;
不就行了。B表内只要没X,那么就算A表里有也因为unique不能插入啊。
INSTEAD OF insert
as
declare @sno varchar(10)
begin
select @sno = name from inserted
if exists(select id from Bwhere type=@sno)
begin
PRINT('already exist in table B')
rollback Tran
end
else
begin
insert into A(name) values(@sno)
end
end
MySQL 中如何在触发器里中断记录的插入或更新?
MySQL 不象其它有些数据库可以在触发器中抛出异常来中断当然触发器的执行以阻止相应的SQL语句的执行。在MySQL的目录版本中还无法直接抛出异常。这样我们如何实现呢? 下面是一种实现的方法。思路就是想办法在触发器中利用一个出错的语句来中断代码的执行。 mysql> create table t_control(id int primary key);Query OK, 0 row...
对于避免id的重复问题,我通过设置B表的id,AUTO_INCREMENT = 20000来处理。(id插入以后是不会被修改的)。
对于name的重复,可以通过一条sql语句查询出A、B两表的X记录数吗?谢谢!
select name from A where name = X union select name from B where name = X;