对对,我想问的就是“表之间引用一致性的问题”
X中有的每一行数据都是唯一的,而且都与A,B,C,D表中的一个表的一条数据发生唯一的映射,也就是说X表有1000条数据,那么A,B,C,D(数据总合也就为1000)。我想做这样的查询,就是通过A,B,C,D表中的外键,来查询X表中的数据。
所以我就必须,确保在写入数据的时候,两个表中的数据保持同步。
X中有的每一行数据都是唯一的,而且都与A,B,C,D表中的一个表的一条数据发生唯一的映射,也就是说X表有1000条数据,那么A,B,C,D(数据总合也就为1000)。我想做这样的查询,就是通过A,B,C,D表中的外键,来查询X表中的数据。
所以我就必须,确保在写入数据的时候,两个表中的数据保持同步。
把插入表X的sql写在插入表A前面就行了
对表X中的total字段进行更新:
只管更新就行了,不考虑A的感受
(
id int not null auto_increment,
total int not null,
primary key ( id ),
)
engine = innoDB
default charset = ....//根据需求自己设置创建表A
create talbe a
(
name int not null,
id int not null,
type int not null,
primary key( name ),
foreign key (id) references x (id) on delete cascade on update cascade
)这样,在你删除或者修改表X的内容时,表A也会跟着做相应改变,用以保证表间数据的一致性,但是修改表A,并不影响表X。因为引用一致性只关心修改和删除操作,并不对插入操作有任何作用,想一想也知道,表X插入一个数据,表A不会自动跟着插入,因为其他字段是不确定的,所以在插入数据时,需要人为的进行一致性插入,和正常的写法一样,这也就是对于你第2个问题的回答。更新X表的total字段,也不影响A表的数据,所以更新的sql语句也可以正常写 updata...set....,这是对第3个问题的回答。我也是新手,理解有限,如果高手有更好的方法,也希望给出,我也学习一下。
创建表A
create talbe a
(
name int not null,
id int not null,
type int not null,
primary key( name ),
foreign key (id) references x (id) on delete cascade on update cascade
)
engine = innoDB
default charset = ....//根据需求自己设置
$last_id = mysql_insert_id();
mysql_query("insert into a (name,id ,type) values (***,".$last_id.",***) ");