Php 在表中使用datetime列作为外键安全吗?
我有两张桌子。表A和B。表A有一列,主键为自动递增Php 在表中使用datetime列作为外键安全吗?,php,mysql,sql-server,database,Php,Mysql,Sql Server,Database,我有两张桌子。表A和B。表A有一列,主键为自动递增 id name date_created 1 Kletian 12-12-12 12:12:12 2 Vormav 12-12-12 12:12:13 3 Agrias 12-12-12 12:12:14 4 Ramza 12-12-12 12:12:15 表B应该有一个外键引用表a中的id。但是由于id是自动递增的(由mysql生成),我不能使用服务器端编
id name date_created
1 Kletian 12-12-12 12:12:12
2 Vormav 12-12-12 12:12:13
3 Agrias 12-12-12 12:12:14
4 Ramza 12-12-12 12:12:15
表B应该有一个外键引用表a中的id。但是由于id是自动递增的(由mysql生成),我不能使用服务器端编程分配它(我使用PHP插入)。但是,在表A中,有一列date_是用datetime属性创建的
通常情况下,这是表B的外观:
id images
1 abc.jpg
1 def.png
1 ghi.jpg
2 jkl.png
3 mno.jpeg
3 pqr.png
这是我对表B的计划:
date_created images
12-12-12 12:12:12 abc.jpg
12-12-12 12:12:12 def.png
12-12-12 12:12:12
12-12-12 12:12:13
12-12-12 12:12:14
12-12-12 12:12:14 pqr.png
注:
- 通过服务器端编程(PHP)获取自动增量值是不可靠的。因为用户可以删除一条记录并打乱订单
- 我更改表结构的权限有限。小改动是可以的,但大改动是禁止的
- 我的计划安全吗,还是有其他选择
序号的
,并将其递增1即可
同样在表B中,将序列号
设置为外键,如下所示:
seq_no | images
1 | abc.jpg
3 | efg.jpg
以下是您对表DDL(模式)的要求:
表B将有一个外键引用到表a
我不确定您是否能够进行这些更改,但这将是理想的解决方案。表B应该有另一列,该列是表A的外键引用,如果您希望这样关联数据的话。我不会将日期时间用作外键引用。对您的团队来说,什么是主要的更改?设置外键和更改表上的索引只是一个小更改?在您的设计中,表B中是否有多行具有相同的日期时间?还有,不要收到你的第一张纸条。删除会弄乱什么顺序?@Alfabravo no.只有一个日期时间(date_created)和几个包含字符串/文本的列。@srayhunter根据我的表结构有什么建议吗?处理并发时使用max()是不安全的。如果OP担心排序问题,这将无法正常工作,我将在表中使用排序。但是,这似乎值得一试。嗯。。我不知道。似乎有很多变化。表A早于表B创建。添加一列或两列是可以的。恐怕有些反常现象。顺便提一下,很好的建议。@ashura91这里最重要的一点是,您可以为已经创建的表创建一个外键。如果已经创建了表B,则只需将另一列添加到表B中。在创建引用之前,可以将行设置为null。
seq_no | images
1 | abc.jpg
3 | efg.jpg
CREATE TABLE IF NOT EXISTS `table_a` (
`id` MEDIUMINT NOT NULL AUTO_INCREMENT,
`name` TEXT NOT NULL,
`created_date` TIMESTAMP NOT NULL DEFAULT NOW(),
PRIMARY KEY (`id`)
);
CREATE TABLE IF NOT EXISTS `table_b` (
`id` MEDIUMINT NOT NULL AUTO_INCREMENT,
`image` TINYTEXT NOT NULL,
`created_date` TIMESTAMP NOT NULL DEFAULT NOW(),
`table_a_id` MEDIUMINT NOT NULL,
PRIMARY KEY (`id`),
FOREIGN KEY (`table_a_id`) REFERENCES table_a(id) ON DELETE CASCADE
);