我有两张桌子,而我想做的事情很简单,但同时又很复杂 - 如果有人能帮助我那就太棒了。
我有以下表格......
Table A
ClientID
1
2
3
Table B
ClientID ID
1
1
3
表B在表中有ClientID,表A也是如此。所以它们链接起来,我需要做的是将ID更新为唯一引用。
即。 clientID-UniqueID。例如,如果我更新了表B,我希望它看起来像这样(顺序)
Table B
ClientID ID
1 1-1
1 1-2
3 3-1
答案 0 :(得分:5)
没有任何理由这样做。只需使用table_b.id
上的标准自动增量主键。
使用InnoDB,架构看起来像:
CREATE TABLE `table_a` (
`id` UNSIGNED integer AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
CREATE TABLE `table_b` (
`id` UNSIGNED integer AUTO_INCREMENT,
`client_id` UNSIGNED integer,
PRIMARY KEY (`id`),
KEY (`table_a_id`),
CONSTRAINT `table_b_table_a_id_table_a_id`
FOREIGN KEY (`table_a_id`)
REFERENCES `table_a` (`id`)
ON DELETE CASCADE
) ENGINE=InnoDB;
你会注意到一些关键点:
InnoDB支持外键和相关的完整性强制执行操作。通过table_b
ON DELETE CASCADE
使用外键约束,table_a
随时删除条目table_b
,table_a_id
中ClientID
的所有条目均为_
({{1}}对应于已删除的条目也将自动删除。如果这不是期望的行为,则可以采取其他行动。
我已将您的列名标准化。出于便携性原因,您不应使用驼峰式列或表名。而是全部使用小写。如果您想区分短语中的单词,请使用{{1}}作为单词分隔符。
您应该具有一致的列和索引/键命名约定。每个表中的所有主键都应以相同的方式命名。此外,外键列应使用命名约定,该约定清楚地标识它们链接到的外部表和列。这有助于在尝试编写/调试/优化查询时使开发人员更容易,因为这不一定需要检查实际的模式来解决问题。
答案 1 :(得分:0)
您可能需要尝试以下内容(假设ID
已经是B
中的列):
ALTER TABLE B MODIFY COLUMN ID INT AUTOINCREMENT, ADD PRIMARY KEY (ClientID, ID)
如果ID
中尚未B
,您可以使用
ALTER TABLE B ADD COLUMN (ID INT AUTOINCREMENT), ADD PRIMARY KEY (ClientID, ID)
我认为这会使ID
为每个不同的ClientID
都有一个单独的增量计数器。