Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何获取刚插入的文件的主键id?_Sql_Mysql_Database Design_Normalization - Fatal编程技术网

Sql 如何获取刚插入的文件的主键id?

Sql 如何获取刚插入的文件的主键id?,sql,mysql,database-design,normalization,Sql,Mysql,Database Design,Normalization,今天早些时候,我问A——我糟糕的计划和B——我完全无视规范化数据库的做法,这是什么原因造成的。在过去的8个小时里,我阅读了有关规范化数据库和更精细的连接点的内容,并阅读了SQLZoo.com教程 我开悟了。我理解数据库规范化的目的以及它如何适合我。除了我不完全确定如何从程序的角度执行这一愿景 这是我以前的设想:1个名为files的表,它包含,比方说,一个文件id和一个文件url,以及该文件的等级 新视野!:1个表格用于文件,1个表格用于等级,以及一个连接表格用于调解 但那不是我的问题。这是一个非

今天早些时候,我问A——我糟糕的计划和B——我完全无视规范化数据库的做法,这是什么原因造成的。在过去的8个小时里,我阅读了有关规范化数据库和更精细的连接点的内容,并阅读了SQLZoo.com教程

我开悟了。我理解数据库规范化的目的以及它如何适合我。除了我不完全确定如何从程序的角度执行这一愿景

这是我以前的设想:1个名为files的表,它包含,比方说,一个文件id和一个文件url,以及该文件的等级

新视野!:1个表格用于文件,1个表格用于等级,以及一个连接表格用于调解

但那不是我的问题。这是一个非常基本的Q,我肯定有一个明显的答案-当我在文件中创建一个记录时,它会被自动分配递增的主键file_id。但是,从现在开始,我还需要将该文件id写入其他表。因为我没有手动分配那个id,我怎么知道它是什么

如果我上传text.doc,它得到了文件_id 123,我怎么知道它得到了123,以便将其写入成绩和连接表?我不能使用maxfile\u id,因为如果您有并发用户,您可能会使用不同的id。我只是不知道如何在没有手动分配的情况下获取file\u id值

您可能希望使用最后一个插入ID,如下例所示:

START TRANSACTION;
INSERT INTO files (file_id, url) VALUES (NULL, 'text.doc');
INSERT INTO grades (file_id, grade) VALUES (LAST_INSERT_ID(), 'some-grade');
COMMIT;
事务确保操作保持原子性:这保证两个插入要么成功完成,要么根本没有插入。这是可选的,但建议这样做是为了保持数据的完整性

对于最后一个插入ID,最 最近生成的ID在中维护 基于每个连接的服务器

它不会被其他客户端更改。 如果您更新,它甚至不会更改 另一个带有 非magic值,即 不为NULL且不为0

使用 最后插入ID和自动增量 同时从多个 客户是完全有效的。每个 客户端将接收最后插入的 该客户端上一条语句的ID 执行

资料来源和进一步阅读:


在PHP中,要获取自动生成的MySQL记录ID,请使用mysqli对象的属性

在您的程序忘记了上次插入id的值之后,明天您将如何查找条目


使用代理键是可以的,但是您的表仍然表示一个实体,您应该能够回答以下问题:什么可测量的属性定义了这个特定的实体?这些属性集是表的自然键,即使使用代理键,这样的自然键也应该始终存在,并且应该使用它从表中检索信息。使用代理键来强制引用完整性,为目的建立索引,并使连接更容易进行。但是

actual files(实际文件)表保存了大量关于该文件的数据—上传该文件的用户、该文件的唯一S3 URL等。这里的设想是其他用户根据一组搜索条件浏览这些文件。我可以将文件的id发布到显示脚本中,然后从那里将其撕下。