Mysql guid作为主键?

Mysql guid作为主键?,mysql,primary-key,Mysql,Primary Key,我有一个mysql数据库,其中有3个表必须连接在一起。我接收到一些较小的数据库,这些数据库必须为这个mysql数据库提供数据,并在获得新数据时添加新数据。我的问题是,我得到的较小的dbs是由外部应用程序生成的,并不是真的要一起使用。因此,当我使用较小数据库的模式时,我无法知道这3个表中的所有记录是如何归属在一起的 我正在考虑插入一个guid作为主键,可以将其添加到表中,并在插入所有新数据时插入。 但是,我对使用char字段(用于存储guid)作为键持谨慎态度。这是一个合理的问题,还是使用char

我有一个mysql数据库,其中有3个表必须连接在一起。我接收到一些较小的数据库,这些数据库必须为这个mysql数据库提供数据,并在获得新数据时添加新数据。我的问题是,我得到的较小的dbs是由外部应用程序生成的,并不是真的要一起使用。因此,当我使用较小数据库的模式时,我无法知道这3个表中的所有记录是如何归属在一起的

我正在考虑插入一个guid作为主键,可以将其添加到表中,并在插入所有新数据时插入。
但是,我对使用char字段(用于存储guid)作为键持谨慎态度。这是一个合理的问题,还是使用char字段知道它将始终是一个guid是一个足够的解决方案?有人能推荐一个更好的方法吗


谢谢

很抱歉,我对MYSQL不是100%熟悉,在SQL Express中,有一个唯一的标识符类型,您可以设置一个列,它实际上是一个GUID。您甚至可以将其设置为自动编号,以便它选择随机编号

我的老板在工作中讨厌guid,我们经常使用离线/在线系统,所以他想出了另一个系统,在这个系统中,每个喂食数据库都被分配了一个ID(称为DEPT),每当他从一个较小的数据库插入主表时,他都会将DEPT写入一个单独的整数列,以便它易于排序


要实现这一点,您需要创建第二个键(使每个表都必须在双键表上执行导入)

例如:

PrimaryKey1    DEPT    Name
1              0       Slink
2              0       Fink
3              0       Werd
1              1       Slammer
2              1       Blam
1              2       Werrr
2              2       Soda

一些数据库(如ms sql server)提供了guid数据类型,我不确定mysql

通常,除非char或varchar太长,否则将它们作为主键是没有问题的。通常情况下,整数是首选的,因为它们的速度要快一点,但这取决于这对您是否重要

实际上,您还可以使用复合主键。一个组件可以是您的原始主键,它仅在一个db中是唯一的。第二个组件可以是数据库的编号,前提是您能够为每个数据库分配唯一的编号

您也可以使用以下方案:

int newId = dbNumber * 10000 + iDInSmallDb;

因此,最后4位是原始数据库,其他数字是数据库编号。

MySQL不提供GUID/UUID类型,因此您需要在用于将行插入数据库的代码中生成密钥。
char(32)
char(36)
(如果包含连字符)是存储GUID而不是实际GUID数据类型的最佳数据类型。

我在mysql中没有看到唯一标识符类型,但我将再次检查。我还考虑过对日期做一些处理——可能将其转换为整数或类似的性质。这是一个好主意,但是,我从中馈电的dbs由一个随机的4位数字标识。我觉得有一个复制品的可能性对我来说太大了。不要用他们的4位数,给他们分配一个你自己的。如果必须,请使用max(DEPT)+1,并插入带有该数字的所有内容。如果不想在代码中生成guid,请将默认值设置为UUID()!非常棒的东西谢谢大家!