首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更改现有用户的用户ID

更改现有用户的用户ID
EN

Drupal用户
提问于 2014-12-24 18:48:34
回答 5查看 3.4K关注 0票数 5

当我通过ID检查我的用户列表时,我得到如下的ID:

  • 用户:管理员 Id: 1
  • 用户:第二个用户 ID: 11
  • 用户:另一个用户 ID: 21

我希望它们是从1到N的连续数字。

我有什么问题?我怎么才能修好它?

EN

回答 5

Drupal用户

发布于 2014-12-25 08:27:21

虽然不建议更新用户id,但出于参数的考虑,您可以重置数据库中的用户id列。

--请注意,您还必须更新使用该用户id的所有引用表,以便这些表也使用新的用户id值-以维护"参考完整性“。否则,如果不更新所有相关的用户ids,则会损坏和混淆私有用户数据

例如,users_roles, file_managed, node, node_revision和其他表..。

为了使用户与新的uid匹配,您可以先将用户id导出到电子邮件地址。然后,您可以稍后进行另一个导出并交叉引用来自邮件地址的uid,以检查新的用户id匹配。请记住,默认情况下,drupal中的电子邮件地址并不是唯一的。

代码语言:javascript
复制
SELECT uid, mail FROM users;

首先备份users表。

然后你可以做一些可怕的事情,比如:

代码语言:javascript
复制
ALTER TABLE users DROP COLUMN uid;
ALTER TABLE users ADD uid INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;

这将删除并重新生成用户uid列。

更新:正如Berdir澄清的那样,奇怪的是,默认情况下,用户id字段不是Drupal 7中的自动递增字段。因此,您可能需要在重新创建UID序列并使用以下方法将其转换为普通int之后,删除自动增量属性:

代码语言:javascript
复制
ALTER TABLE users MODIFY uid int(10) unsigned;

注意:您需要使用以下方法重新生成匿名用户帐户:

代码语言:javascript
复制
INSERT INTO users (name, pass, mail, theme, signature, language, init, timezone) values ('', '', '', '', '', '', '', '');
UPDATE users SET uid = 0 WHERE name = '';

如果您只想隐藏uid字段值,可以尝试一个用户别名模块,如下所示:

https://www.drupal.org/project/me

票数 4
EN

Drupal用户

发布于 2014-12-31 10:00:39

Drupal 7和8中的用户ID不是自动增量,而是基于db_next_id()。这意味着它与例如批处理ID共享,这也是它不像节点ID那样计数的原因。

更改这一点几乎是不可能的,您不仅需要手动更新用户、users_roles、所有用户字段表、所有对用户的引用(如节点和注释作者、实体引用字段等),而且还必须重置db_next_id()的全局序列表,如果它们一直使用db_next_id()并依赖于它,则可能会中断Drupal中的其他位置。

所以不你不能。

票数 4
EN

Drupal用户

发布于 2014-12-25 07:58:50

不,你不能,或者不应该。用户id是数据库中用户表的自动增量值。关于用户的每一个信息(节点、字段值和任何其他东西)都与UID相关。

票数 2
EN
页面原文内容由Drupal提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://drupal.stackexchange.com/questions/141669

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档