mysql设置主键有什么用

让我告诉你我当时陷入的关于MySQL主键的陷阱。

2 008 年我在上海做一个项目,第一次建大表,没有认真对待主键。
有一个用户表,我只是使用自增id作为主键。
结果呢?半路上我发现有一个功能可以提示用户按名字搜索。
如果名字一样可以吗?找了好久,被卡住了。
该表包含数十万条数据,并且没有索引。
扫描整个桌子真是太糟糕了。

后来我就明白了。
主键的第一个功能是确保唯一性。
想想看,每条记录都必须有自己唯一的“身份证”,否则数据就会混乱。
以后如何检查它们?如何改变呢?这个教训我记了很久。

再举个例子:2 01 4 年北京的另一个项目,有一个订单表,订单号是主键。
我们创建事务、锁等,依靠主键来锁定行。
如果没有主键并与其他字段一起锁定,则效率低下且容易出错。
这直接关系到数据一致性的问题,不能含糊其辞。

还有一些外键映射与主键有着千丝万缕的联系。
例如,Order 表和 User 表使用 Order number 作为主键,User 表使用 User ID 作为主键。
然后,用户 ID 作为外键链接到订单表中。
如果主键搞乱了,外键映射就会不正确,数据连接就会中断。
2 01 5 年我在深圳排错的时候就遇到过这样的事情,花了两天时间才搞清楚。

所以主键不仅是唯一标识符,也是效率的关键。
想一想,数据库中的索引是根据主键创建的。
没有主键,查找数据就像盲目搜索。
当时我有一个没有主键的表。
我花了很长时间准备一份报告,我的老板很生气。
后来我加了一个主键索引,结果几秒钟就出来了,老板表扬了我。

最后,主键仍然是标准化的。
当你设计一款手表的时候,想一想:这款手表的核心是什么?唯一的是什么?例如,在用户表中,用户ID必须是唯一的,订单表中的订单号必须是唯一的。
如果没有预先构建的唯一字段,那么创建自增字段比查找随机字段更好。

简而言之:不要低估主键。
当时我真的很难理解这一点。
现在,当您处理项目时,您需要做的第一件事就是找到主键。
这比什么都重要。

主键和外键在mysql中有什么作用

嘿...就是这样...在MySQL中...主键...和外键...这两个东西...非常有用...
我们来谈谈主键...想一想...在用户表中...这个user_id...是主键...它有什么作用?确保每个条目...都是唯一的...并且不能重复...就像您的身份证号码...您是全国唯一的...对吗?
主键...不能留空...它必须有值...否则...没有办法确定记录是谁...数据库不会让你插入...
而且...MySQL会自动为你创建一个索引...只是为了快速搜索...如果你要找的话,用户...使用主键来搜索...比大海捞针快得多...
有时...在表中...一个字段...还不够区分...就用两个字段...甚至三个...做一个复合主键...比如订单明细...这个order_id加一个product_id...这两个在一起...是唯一的...
至于外键...这个比较好理解...它指向另一个表的主键...比如orders表中有一个user_id...这是一个外键...它指向用户表的主键user_id...
所以...表与表相关...如果你想一想...订单...必须属于同一个用户...这是一对多的关系...可以通过外键体现...
外键也是一个强大的工具...这样可以防止盲目操作...比如...你想在orders表中添加一个user_id...但是这个user_id在users表中根本不存在...不会允许添加...并且会直接报错...这样可以保证数据的可靠性...
还可以设置级联....比如...如果你删除一个用户...他的所有订单...都会自动删除...这样就解决了问题...您不必一一更改它们...
外键字段...最好创建一个索引...否则...进行相关查询时...可能会很慢...尤其是表很大...。

一般来说...主键控制自己表中的数据...保证唯一性...外键控制表之间的关系...确保合法...两个人合作...数据就完整...
就这样...2 02 2 ...我在北京看到一个...公司...他们的数据库...设计得很好...users表使用主键user_id...orders表使用主键order_id...orders表使用外键user_id...user表链接...结果...效率相当高...没问题...