[Mysql] primary key 简明
数据库创建过程中,建立了若干个column之后,就需要选择其中的一个column为primary key
本文简单地说明:1.什么是primary key 2.如何选择一个好的primary key
目录
1.情景
2.什么是primary key
3.选择一个好的primary key
1.情景
现在我们正在数据库中创建一张最常见用户表usertable用来存储用户的账号和密码(当然,密码是不能存明文的,要用一些密码学的hash算法加盐生成一个定长的串存起来,每次做密码校验的时候再对用户输入的密码进行同样的hash运算,比对得到的结果,可以有效预防数据库被黑客攻破带来的严重后果)。
看看这家睿智的公司(2019):
被黑客攻破后,数据库中上亿密码全部公之于众,股价哗哗哗:
还有这个睿智(2012)(改密码,快点的~):
回到正题上:
在 mysql workbench中,我们已经创建了两个column,其中一列用来存账号username,一列用来存密码password
为什么username前面是一把小钥匙呢?
因为我将username设置成了primary key,中文常常翻译为:主键
2.什么是primary key
数据库使用key(中文常译为键)进行sort(排序),查询(search)等基本操作。
key的选择,很重要,没有key,数据库就没法存数据。即使是非关系型数据库,也是key-value的结构。
primary key,听名字primary就知道是各种key中最基础、最重要的。
一张表可以设置若干个主键:
例如在上图中我将三种不同的数据都设置成了主键,当然这是不合理的,假设A和B的女朋友同年同月同日生,而且A和B又恰好选择了他们的女票的生日作为密码,那么密码hash之后的结果就会相同,这时候就违反了主键的性质了:唯一性。
主键就是一行数据的ID,就像你的身份证号,唯一,而且不可修改。就像你可以修改你的密码,但是没有修改账号这种说法,那个叫重新注册。
接下来将删掉test列,并主键改回username一个:
当我们点击PK的时候,也会发现NN也被打上了勾,NN是Not Null的缩写,即对于主键而言,数据库的设计者规定了另一个性质是“非空”,但这个数学的意义上来看,这种规定是不合理的,因为,空集本身也是集合,空集也可以映射到其他对象。而且空也具有唯一性,但是人家这么规定了就这样吧。
总结就是:
主键性质:
1.唯一,能够代表一组数据的唯一性特征
可以有多个:如人的指纹、身份证号等
在关系型数据库中,主键是一行数据的特征值
2.非空,这个设计的确实不合理,但是已经规定了,那就这样
照理来说一个系统也是可以允许一个用户只输入密码不输入用户名进入的(账号为空也是唯一的)
3.选择一个好的primary key
1.能选数字类型优先选数字类型,学过《数字电路》就知道:数值大小的比较是硬件电路可以瞬间完成的,最快
2.如果要选字符串VARCHAR,那么越短越好
(字符串必定需要遍历每一个字符,如果不限制长度,那么查询的耗时肯定和长度成线性关系)
参考:一篇很赞的文章(By Mike Chapple)
[Mysql] primary key 简明相关推荐
- 零基础带你学习MySQL—primary key主键(二十三)
零基础带你学习MySQL-primary key主键(二十三) 一.约束 二.主键 三.主键的细节说明 主键不能重复而且不能为空 一张表最多只能有一个主键,但可以是复合键 使用desc 表名 可以看到 ...
- 数据库开发——MySQL——primary key
四,primary key 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键. 例如 学生表(学号,姓名,性别,班级) 其中每个学生 ...
- [MySQL] PRIMARY KEY 主键
SQL PRIMARY KEY 约束 PRIMARY KEY 约束唯一标识数据库表中的每条记录. 主键必须包含唯一的值. 主键列不能包含 NULL 值. 每个表都应该有一个主键,并且每个表只能有一个主 ...
- mysql primary key 多个_关于mysql中primary key重复的解决方法
我们都知道MySQL数据库中是讲究primarykey的唯一性的,如果primarykey出现了重复,则会影响其他的表制定的规则. 今天我们要和大家一起分享的是Mysql数据库中primarykey重 ...
- mysql的primary key_MySQL Primary Key约束
在本教程中,您将学习如何使用MySQL主键(Primary Key)约束来创建表的主键. MySQL主键简介 MySQL主键(Primary Key)是唯一标识表中每行的列或一组列.当定义表的主键时, ...
- MySQL主键(PRIMARY KEY)
"主键(PRIMARY KEY)"的完整称呼是"主键约束".MySQL 主键约束是一个列或者列的组合,其值能唯一地标识表中的每一行.这样的一列或多列称为表的主键 ...
- 2、MySQL主键(PRIMARY KEY)
主键(PRIMARY KEY)的完整称呼是"主键约束",是 MySQL 中使用最为频繁的约束.一般情况下,为了便于 DBMS 更快的查找到表中的记录,都会在表中设置一个主键. 主键 ...
- not null primary key什么意思_explain都不会用,你还好意思说精通Mysql查询优化?
Explain简介 Explain关键字是Mysql中sql优化的常用「关键字」,通常都会使用Explain来「查看sql的执行计划,而不用执行sql」,从而快速的找出sql的问题所在. 在讲解Exp ...
- ibatis mysql 同时删多个表报错_MySQL中Multiple primary key defined报错的解决办法
MySQL中Multiple primary key defined报错的解决办法 创建主键可以有两种方式: create table 表名( 字段名 类型, 字段名 类型, -- primary k ...
最新文章
- I/O模型之一:Unix的五种I/O模型
- 利用Travis CI 让你的github项目持续构建(Node.js为例)
- 发现一个ps抠毛发简单快捷高质量的方法
- 小汤学编程之JAVA基础day04——流程结构
- Win10使用Xrdp脚本远程桌面连接Ubuntu主机
- chmod 777命令_Linux shell命令总结
- Python学习心得--变量类型篇
- CANape 20拍了拍你,更新速递请查收~
- 【英语学习】【WOTD】feisty 释义/词源/示例
- 2022最新高通8155平台开源代码最新代码下载、编译方法
- 知道创宇云上安全三件套专治上云“水土不服”
- VBA字符串智能拼接与自动换行 VBA代码助手独家功能
- 蔚来回应测试车坠楼:初步确认为意外事故;首发苹果M2,新MacBook Pro 13英寸正式开售:9999元起|极客头条
- 180724 安卓-SSLPinning及反制
- 【模电】习题知识点总结(持续更新ing)
- Android 通用图标生成器
- I.MX6ULL_Linux_基础篇(11) DDR介绍与校准
- HTTP中200、302、304、404和500等响应状态码含义
- 2021阿里云申请免费SSL证书最新流程
- Python记录(1)-Python合并单元格