学习MySQL:如何正确设置表格主键? (mysql数据库设置主键)

MySQL是当今更流行的数据库管理系统之一,无论你是在开发网站还是企业应用程序,都很可能使用MySQL来存储和管理数据。在MySQL中,表是最基本的存储单位,而表的主键则是表中数据行的唯一标识符。本文将带你学习如何正确设置MySQL表的主键。

一、什么是主键

主键是一种用于唯一标识表中数据行的列,所有主键值都必须是唯一的。如果表没有主键,那么它将被视为无序,不方便进行有效的数据管理和查询。因此,在设计数据库表时,设置主键是非常重要的。

二、主键的作用

1. 唯一性约束:主键值必须是唯一的,如果试图插入重复主键值的数据,MySQL将拒绝该操作,从而保证数据的唯一性。

2. 快速查询:主键可以作为索引,提高查询效率。在MySQL中,如果表有主键,则会自动生成一个主键索引,加快查询速度。

三、如何设置主键

MySQL中,有两种设置主键的方式:使用单列主键和使用复合主键。

1. 单列主键

单列主键是指使用一列进行主键设置,该列的值必须唯一,且不为空。常见的单列主键类型有int、bigint、char、varchar等。

例如,以下代码演示了如何使用单列主键设置表的主键:

“`sql

CREATE TABLE student

(

id INT PRIMARY KEY,

name VARCHAR(20) NOT NULL,

age INT NOT NULL,

gender CHAR(1) NOT NULL

);

“`

上面的代码创建了一个名为student的表,其中id列被设置为主键。

2. 复合主键

复合主键是指使用多个列进行主键设置,这些列的值在组合时必须唯一。在MySQL中,复合主键可以使用两种方式来设置:使用PRIMARY KEY约束或使用UNIQUE约束。

例如,以下代码演示了如何使用复合主键设置表的主键:

“`sql

CREATE TABLE course

(

id INT NOT NULL,

name VARCHAR(20) NOT NULL,

score INT NOT NULL,

PRIMARY KEY (id, name)

);

“`

上面的代码创建了一个名为course的表,其中由id和name两列组成的复合主键用PRIMARY KEY约束进行设置。

四、如何选择主键

在设置主键时,应当注意以下几点:

1. 主键必须唯一,因此它不能是空值。因此,应该考虑在设置主键时使用非空列。

2. 合理地选择数据类型。一般情况下,自增整数类型(如int、bigint)最适合作为主键。这些类型的数据存储量小,查询速度快,而且容易维护。

3. 合理选取主键的业务含义。主键可以被视为表的一种业务标识符,因此应该选择那些适合作为业务标识符的列作为主键。

5、结论

主键是MySQL表格设计中的重要组成部分,正确设置主键可以保证表格数据的唯一性,并提高数据的查询效率。在选择主键时,应该合理选择数据类型和业务含义。

本文主要介绍了MySQL中表格主键的作用、设置方式和选择方法,希望对读者有所帮助。

相关问题拓展阅读:

mysql 设置主键还要设置索引吗

可以的,修改语句如下

ALTER

TABLE

`数据库名`.`表名`

ADD

INDEX

`自定义索引名`

(`主键列名`);

不过mysql主键上默认就有聚集索引,除非是用于复合索引,否则没必要再对主键重复添加非聚集索引。

不需要,主键具备索引的功能了。

当你创建或设置主键的时候,mysql会自动添加一个与主键对应的唯一索引,不需要再做额外的添加。

如果查询的条件中没有用到主键,可以将你的查询字段设置为索引。如果你想在主键上设置索引的话,主键就有索引的功能。

扩展资料:

注意事项

1、主键一定是唯一性的索引,唯一性的所以不一定就是主键。

主键就是能够唯一标识表中某一行的属性或者是属性组,一个表只能有一个主键,但可以有多个候选索引。因为主键可以唯一标识一行记录,所以可以确保执行数据更新、删除的时候不会出现错误的。主键还经常和外键构成参照完整性约束,防止出现数据不一致。数据库管理系统对于主键自动生成唯一索引,所以主键也是一个特殊的索引。

2、一个表中可以有多个唯一索引,但是主键只能有一个。

3、主键列不允许为空值,而唯一性索引列允许空值。

4、主键也可以由多个字段组成,组成复合主键,同时主键也是唯一索引。

5、唯一索引表示索引值唯一,可以由一个或者几个字段组成,一个表可以由多个唯一索引。

不需要。因为当你创建或设置主键的时候,mysql会自动添加一个与主键对应的唯一索引,不需要再做额外的添加。

如下图在mysql中创建的一张表,可以看到CREATE TABLE语句中只设置了主键 PRIMARY KEY,并没有建立索引的语句,但索引信息处显示了唯一主键索引,这是由mysql自己创建的。

扩展资料

数据库主键和索引的区别与联系

1、主键是一定是唯一性索引,但唯一性索引不一定是主键。

数据库管理系统对于主键自动生成唯一索引

,所以主键是一个特殊的索引

2、唯一索引标识索引值唯一,一个表可以有多个唯一索引,但主键只能有一个。

3、主键列不能为空,但唯一索引列可以为空。

4、一张表只能有一个主键,但可以有多个索引。

通俗举例来说:主键相当于一本书的页码,索引相当于书的目录。

你看看你的程序 如果查询的条件中没有用到主键,可以将你的查询字段设置为索引。如果你想在主键上设置索引的话,不需要了,主键就有索引的功能

不需要的,主键具备索引的功能了

mysql数据库表用什么做主键?

1、主键定义

表中经常有一个列或多列的组合,其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键,通过它可强制表的实体完整性。当创建或更改表时可通过定义 PRIMARY KEY 约束来创建主键。一个表只能有一个 PRIMARY KEY 约束,而且 PRIMARY KEY 约束中的列不能接受空值。由于 PRIMARY KEY 约束确保唯一数据,所以经常用来定义标识列。

2、主键作用

1)保证实体的完整性;

2)加快数据库的操作速度

3) 在表中添加新记录时,数据库会自动检查新记录的主键值,不允许该值与其他记录的主键值重复。

4) 数据库自动按主键值的顺序显示表中的记录。如果没有定义主键,则按输入记录的顺序显示表中的记录。

3、主键的必要性

在有些数据库中,虽然主键不是必需的,但更好为每个表都设置一个主键,不管是单主键还是复合主键。它存在代表着表结构的完整性,表的记录必须得有唯一区分的字段,主键主要是用于其他表的外键关联,以及本记录的修改与删除。

4、主键的选择

1)编号作主键

此方法就是采用实际业务中的唯一字段的“编号”作为主键设计,这在小型的项目中是推荐这样做的,因为这可以使项目比较简单化,但在使用中却可能带来一些麻烦,比如要进行“编号修改”时,可能要涉及到很多相关联的其他表

2)自动编号主键

这种方法也是很多人在使用的,就是新建一个ID字段,自动增长,非常方便也满足主键的原则

a、优点:数据库自动编号,速度快,而且是增量增长,聚集型主键按顺序存放,对于检索非常有利;数字型的,占用空间小,易排序,在程序中传递也方便;如果通过非系统增加记录(比如手动录入,或是用其他工具直接在表里插入新记录,或老系统数据导入)时,非常方便,不用担心主键重复问题。

b、缺点:其实缺点也就是来自其优点,就是因为自动增长,在手动要插入指定ID的记录时会显得麻烦,尤其是当系统与其他系统集成时,需要数据导入时,很难保证原系统的ID不发生主键冲突(前提是老系统也是数字型的);如果其他系统主键不是数字型那就麻烦更大了,会导致修改主键数据类型了,这也会导致其他相关表的修改,后果同样很严重;就算其他系统也是数字型的,在导入时,为了区分新老数据,可能想在老数据主键前统一加一个“o”(old)来表示这是老数据,那么自动增长的数字型又面临一个挑战。

3)Max加一

由于自动编号存在那些问题,所以有些人就采用自己生成,同样是数字型的,只是把自动增长去掉了,采用在Insert时,读取Max值后加一,这种方法可以避免自动编号的问题,但也存在一个效率问题,如果记录非常大的话,那么Max()也会影响效率的;更严重的是并发性问题,如果同时有两人读到相同的Max后,加一后插入的ID值会重复,这已经是有经验教训的了。

4)自制加一

考虑Max加一的效率后,有人采用自制加一,也就是建一个特别的表,字段为:表名,当前序列值。这样在往表中插入值时,先从此表中找到相应表的更大值后加一,进行插入,有人可能发现,也可能会存在并发处理,这个并发处理,可以采用lock线程的方式来避免,在生成此值的时,先Lock,取到值以后,再unLock出来,这样不会有两人同时生成了。这比Max加一的速度要快多了。但同样存在一个问题:在与其他系统集成时,脱离了系统中的生成方法后,很麻烦保证自制表中的更大值与导入后的保持一致,而且数字型都存在上面讲到的“o”老数据的导入问题。因此在“自制加一”中可以把主键设为字符型的。字符型的自制加一中应该字符型主键可以应付很多我们意想不到的情况。

5)GUID主键

目前一个比较好的主键是采用GUID,推荐主键还是字符型的,但值由GUID生成,GUID是可以自动生成,也可以程序生成,而且键值不可能重复,可以解决系统集成问题,几个系统的GUID值导到一起时,也不会发生重复,就算有“o”老数据也可以区分,而且效率很高,在.NET里可以直接使用System.Guid.NewGuid()进行生成,在SQL里也可以使用NewID()生成。优点是:

同IDENTITY 列相比,uniqueidentifier 列可以通过NewID() 函数提前得知新增加的行ID,为应用程序的后续处理提供了很大方便。

a、优点:便于数据库移植,其它数据库中并不一定具有IDENTITY 列,而Guid 列可以作为字符型列转换到其它数据库中,同时将应用程序中产生的GUID 值存入数据库,它不会对原有数据带来影响。便于数据库初始化,如果应用程序要加载一些初始数据,IDENTITY 列的处理方式就比较麻烦,而uniqueidentifier 列则无需任何处理,直接用T-SQL 加载即可。便于对某些对象或常量进行永久标识,如类的ClassID,对象的实例标识,UDDI 中的联系人、服务接口、tModel标识定义等。

b:缺点是:

GUID 值较长,不容易记忆和输入,而且这个值是随机、无顺序的

GUID 的值有16 个字节,与其它那些诸如4 字节的整数相比要相对大一些。这意味着如果在数据库中使用uniqueidentifier 键,可能会带来两方面的消极影响:存储空间增大;索引时间较慢。

视频讲解的是mysql数据库中存储引擎的知识,使用命令的方式查看当前数据库服务器用的什么存储引擎。本视频的目的在于一方面学习熟悉命令,另一方面为后续的学习存储引擎知识做铺垫。

可以用自动标示做。

每增加1个人的名字,自动标示就自动增加数字1,永远都不会重复,就算你把其中一个删除掉了,它的标示数字也不会在出现,做到了永远不重复。

当然用id做主键了,要是有重名的你的数据库就存不了了,太局限了

关系型数据库的特点在于多个表之间使用关系联系起来

这样可以显著降低数据库的容量,并提高维护效率

主键并不是必须的

但是增加主键对单表查询的效率提升很高

所以从原理上来说只要该字段绝对不会重复

那么使用任何类型的字段,比如你上面所说的人名也是可以的

但是如果考虑到与其它表的相互连接

使用人名的可操作性就不是很好

所以,之一点,建议你另外增加一个自动编号的字段作为id,用来做主键

第二点,关系型数据库的特点就是多表之间有冗余,但是实际上是降低了整个数据库的维护难度,

鉴于你看起来对关系型数据库原理不清楚

更建议你先把关系型数据库原理再看看

在MySQL中如何设置主键和外键

添加主键~

alter

table

table_name

add

constraint

pk_name

primary

key(列名);

添加外键~

alter

table

table_name

add

constraion

pk_name

foreign

key(列名)

references

table_name(列名);

基础语法~其他条件自行添加在mysql中如何嫌此设巧差置主键孝者皮和外键

新建一个字段作为你所指定的主键

然后添加约束

用mysql的插件

添加主键~

ALTER

TABLE

table_name

ADD

CONSTRAINT

pk_name

PRIMARY

KEY(列名);

添加伏槐外键~

ALTER

TABLE

table_name

ADD

CONSTRAION

pk_name

FOREIGN

KEY(列名)

REFERENCES

table_name(列名);

基础语法~其他条晌厅雀件自宴早行添加

关于mysql数据库设置主键的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » 学习MySQL:如何正确设置表格主键? (mysql数据库设置主键)