草庐IT

主键自增

全部标签

mysql - 如何为具有组合主键的表创建索引?

我使用MYSQL创建了一个组合主键的表。例如,col_a和col_b一起用作键。我会经常使用col_a和col_b来获取一行,也会单独使用col_a或col_b来查询一些行。我的问题是,我将如何为它创建索引?我只需要一个复合索引,还是三个索引,其中两个索引用于分隔列?我认为MYSQL会为主键创建索引。但是它会为(col_a,col_b)创建一个复合索引,还是为每个列创建一个索引? 最佳答案 多列索引对于多列索引,索引从左到右工作。给定您的主键:(col_a,col_b)以下是可以使用它的情况:col_a:是。在col_a上搜索时可以

mysql - 数据库设计——主键命名约定

我很想知道人们对以下3种在MySQL中命名数据库表主键的不同约定的看法(以及为什么)?-例1-表名:用户,主键列名:user_id-例2-表名:用户,主键列名:id-例3-表名:用户,主键列名:pk_user_id只是想听听想法,也许在这个过程中学到一些东西:)谢谢。 最佳答案 我会选择选项2。对我来说,“id”本身就足够了。由于表是User,所以“user”中的“id”列表示它是User的标识标准。但是,我必须补充一点,命名约定都是为了保持一致性。通常没有对错之分,只要存在一致的模式并将其应用于整个应用程序,这可能是决定命名约定的

php - MySQL UUID 主键 - 由 PHP 或 MySQL 生成?

我的印象是,只要让MySQL通过UUID()生成主键,就会使该键在服务器等方面是唯一的。但是,thereisnowaytofetchthelastinsertedUUID,这要求我每次插入时都执行一个额外的select语句。是否可以让PHP生成与MySQL生成的完全相同的UUID()? 最佳答案 不,不可能让PHP生成与MySQL完全相同的UUID(),因为它是一个(完全)随机数。听起来您的问题是您喜欢在MySQL中使用UUID()但不想执行额外的查询来确定新的UUID是什么.那么为什么不让PHP创建UUID用作INSERT查询中的

php - Laravel - 加入具有复合主键的表

我的问题是在Laravel框架中连接2个表。一个是动态名称表(它是一个变量),第二个是复合主键。我必须使用查询构建器而不是where()。详情请看我的关注:我有2个表:CREATETABLE`details`(`id`int(10)unsignedNOTNULLAUTO_INCREMENT,`source_id`int(10)unsignedNOTNULL,`brand_id`int(10)DEFAULTNULL,PRIMARYKEY(`id`));CREATETABLE`links`(`source_id`int(10)unsignedNOTNULL,`brand_id`tinyin

mysql - 主键会加速索引吗?

除了方便的自动递增和UNIQUE功能外,PK是否真的加快了索引速度?无论是非PKed索引INT还是PKed(同一列,两个不同的测试),速度是否相同?如果我在同一个系统的同一个表上有相同的列,如果具有索引的UNIQUEINT列也启用了PK会更快吗?PK是否使与其共存的索引更快?拜托,实际结果只有系统统计数据,如果你能这么客气的话。 最佳答案 表格的主键代表您在最重要查询中使用的一列或一组列。它有一个关联索引,用于快速查询性能。查询性能得益于NOTNULL优化,因为它不能包含任何NULL值。使用InnoDB存储引擎,表数据是物理上组织的

mysql - 由于 "incorrectly formed foreign key constraint"错误,无法更改主键

我有一个具有以下架构定义的表:CREATETABLE`currency`(`id`int(11)NOTNULLAUTO_INCREMENT,`code`char(3)CHARACTERSETutf8COLLATEutf8_unicode_ciNOTNULL,`name`varchar(255)CHARACTERSETutf8COLLATEutf8_unicode_ciNOTNULLPRIMARYKEY(`id`),UNIQUEKEY`code_UNIQUE`(`code`))ENGINE=InnoDBAUTO_INCREMENT=2DEFAULTCHARSET=utf8;我想要的是删除

sql - MySQL:在 CREATE TABLE 语句中命名主键

建表时如何设置主键名?例如,我正在尝试创建一个名为“id”的主键,但这是无效的SQL。你能告诉我正确的方法吗?CREATETABLEIFNOTEXISTS`default_test`(`default_test`.`id`SMALLINTNOTNULLAUTO_INCREMENTPRIMARYKEY`id`,`default_test`.`name`LONGTEXTNOTNULL)澄清我想指定主键的名称-而不是默认名称“PRIMARY”我希望它被称为“id”或者“primary_id”,所以如果我稍后运行SHOWINDEXESFROMdefault_test,Key_name将是我指定

mysql自增主键用完

我维护一个ID为AUTOINCREMENTPRIMARYKEY的表。当我删除一个条目并重新添加一个条目时,新条目不会采用前一个条目的ID,而是再次递增1。这是正常的吗?是否建议不要改变这种行为?我只是觉得这是在创建一个不可扩展的系统,因为它最终可能会用完索引。 最佳答案 这是设计使然,数百万个数据库都有像这样的带有整数键的主键。如果您删除90%的插入,则在4亿行后您将用完键1)如果你这样做,你可以做一个ALTERTABLE`test`.`table1`MODIFYCOLUMN`item_id`BIGINTUNSIGNEDNOTNUL

mysql - 存在外键约束时更改 MySQL 主键

我有两个已经存在的表(部分)大致如下所示:CREATETABLEparent(old_pkCHAR(8)NOTNULLPRIMARYKEY)ENGINE=InnoDB;CREATETABLEchild(parent_keyCHAR(8),FOREIGNKEY(parent_key)REFERENCESparent(old_pk)ONUPDATECASCADEONDELETECASCADE)ENGINE=InnoDB;我想向parent添加一个新的自动递增整数id列并将其用作主键,同时仍保留old_pk作为唯一键并允许其他表(如child)在外键约束中引用它。不幸的是,简单地说ALTER

Mysql:2个ID的主键内部连接给出 "Range checked for each record"

在对具有2个值的PRIMARY键(使用IN或OR构造)执行INNERJOIN时,在EXPLAINSELECT中得到“检查每条记录的范围(索引映射:0x1)”这里是查询:SELECT*FROMmessageASmINNERJOINuserASuONu.id=m.sender_idORu.id=m.receiver_id在做解释时,它给了我:+----+-------------+-------+------+---------------+------+---------+------+-------+-------------------------------------------