Mysql主键和唯一键的区别点总结

什么是主键?

主键是表中唯一标识该表中每个元组(行)的列。主键对表实施完整性约束。表中只允许使用一个主键。主键不接受任何重复值和空值。表中的主键值很少更改,因此在选择主键是需要小心,要选择很少发生更改的地方。一个表的主键可以被另一个表的外键引用。

为了更好地理解主键,我们创建一个名为Student的表,它具有roll_number、name、batch、phone_number、citizen_id等属性。

在上面的示例中,roll_number属性永远不能具有相同的NULL值,因为在每个大学中注册的学生都拥有唯一的Roll_number,因此两个学生不能拥有相同的Roll_number,并且表中的每一行都可以用学生的roll_number属性作为唯一标识。因此,在这种情况下,我们可以将Roll_number属性作为主键。

什么是唯一键?

唯一键约束可以唯一地标识关系或表中的单个元组。与主键不同,一个表可以有多个唯一键。唯一键约束只能接受列的一个空值;唯一约束也由另一个表的外键引用。当有人想对非主键的列和列组实施唯一约束时,可以使用它。

为了更好地理解唯一键,我们使用带有Roll_number,Name,Batch,Phone_number和Citizen_ID属性的Student表;其中Roll_number属性已经给主键。

在这个示例中,可以为Citizen_ID分配唯一约束,其中Citizen_ID列中的每个条目都应该是唯一的,而不是重复的,因为一个国家/地区的每个公民都必须拥有其唯一标识号。但是,如果学生从其他国家迁移,在这种情况下,他或她将不具有Citizen_ID,并且该条目可能具有NULL值,因为在唯一约束中允许一个NULL。

主键和唯一键之间的主要区别:

1、当一个属性声明为主键时,它将不接受NULL值。另一方面,当声明为Unique的属性时,它可以接受一个NULL值。

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

3、定义主键时自动创建聚簇索引。相反,Unique键生成非聚集索引。

以上就是关于Mysql主键和唯一键的区别的全部内容,感谢大家对我们的支持。

(0)

相关推荐

  • MySQL limit性能分析与优化

    一.结论 语法结构: limit offset, rows 结论:rows 相同条件下,offset 值越大,limit 语句性能越差 二.测试 执行测试: 5750000 条数据 sql 1 执行时间: sql 6执行时间: 三.优化 方式一:可根据主键ID等其他索引字段定位到数据位置,然后使用 limit 0, rows 如: select * from gift_record_0 where id >= 43611207 limit 1000 0.14 s 方式二(根据业务需求):针对不需

  • getdata table表格数据join mysql方法

    public function json_product_list($where, $order){ global $_M; $this->table = load::sys_class('tabledata', 'new'); $p = $_M['table']['product']; $s = $_M['table']['shopv2_product']; if($_M['config']['shopv2_open']){//开启在线订购时 $table = $p.' Left JOIN '

  • 实例讲解MySQL中乐观锁和悲观锁

    数据库管理系统中并发控制的任务是确保在多个事务同时存取数据库中同一数据不破坏事务的隔离性和统一性以及数据库的统一性 乐观锁和悲观锁式并发控制主要采用的技术手段 悲观锁 在关系数据库管理系统中,悲观并发控制(悲观锁,PCC)是一种并发控制的方法.它可以阻止一个事务以影响其他用户的方式来修改数据.如果一个事务执行的操作的每行数据应用了锁,那只有当这个事务锁释放,其他事务才能够执行与该锁冲突的操作 悲观并发控制主要应用于数据争用激烈的环境,以及发生并发冲突时使用锁保护数据的成本要低于回滚事务的成本环境

  • 抽取oracle数据到mysql数据库的实现过程

    在oracle数据库迁移至mysql数据库,除了oracle数据库模型移到mysql外,还一个重要环节就是要将oracle数据库的数据移到mysql数据库,本人尝试用过多款数据迁移程序,性能都不是很好的,于是自己动手写一个针对于oracle数据库数据迁移到mysql数据程序,其具体过程如下: 1.要抽取mysql表.字段及过滤条件的配制文件imp_data.sql 2.建立一个目录ETL_DIR 3.运行oracle数据库程序P_ETL_ORA_DATA,生成各表的csv数据文件,同时也生成一个

  • 一个案例彻底弄懂如何正确使用mysql inndb联合索引

    有一个业务是查询最新审核的5条数据 SELECT `id`, `title` FROM `th_content` WHERE `audit_time` < 1541984478 AND `status` = 'ONLINE' ORDER BY `audit_time` DESC, `id` DESC LIMIT 5; 查看当时的监控情况 cpu 使用率是超过了100%,show processlist看到很多类似的查询都是处于create sort index的状态. 查看该表的结构 CREAT

  • Docker创建MySQL的讲解

    1.下载MySQL Image 命令: docker pull mysql 2.创建容器 命令样例: sudo docker run -p 3306:3306 --name mysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql 命令说明: 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具

  • PHP实现PDO操作mysql存储过程示例

    本文实例讲述了PHP实现PDO操作mysql存储过程.分享给大家供大家参考,具体如下: 一 代码 sql语句: create procedure pro_reg (in nc varchar(80), in pwd varchar(80), in email varchar(80),in address varchar(50)) begin insert into tb_reg (name, pwd ,email ,address) values (nc, pwd, email, address

  • MySQL常用SQL语句总结包含复杂SQL查询

    1.复杂SQL查询 1.1.单表查询 (1)选择指定的列 [例]查询全体学生的学号和姓名 select Sno as 学号,Sname as 姓名 from student; select Sno,Sname from student; (2)查询全部列 [例]查询全体学生的详细信息 select * from student; (3)对查询后的指定列进行命名 [例]查询全部学生的"姓名"及其"出生年"两列 select Sname as 姓名,(2014-Sage

  • 使用Python将Mysql的查询数据导出到文件的方法

    mysql官方提供了很多种connector,其中包括python的connector. 下载地址在:http://dev.mysql.com/downloads/connector/python/ 直接安装即可. 在python中: 1. 连接: import mysql.connector cnx = mysql.connector.connect(user='scott', password='tiger', host='127.0.0.1', database='employees')

  • Mysql Update批量更新的几种方式

    通常情况下,我们会使用以下SQL语句来更新字段值: UPDATE mytable SET myfield='value' WHERE other_field='other_value'; 但是,如果你想更新多行数据,并且每行记录的各字段值都是各不一样,你会怎么办呢?刚开始你可能会想到使用循环执行多条UPDATE语句的方式,就像以下的python程序示例: for x in xrange(10): sql = ''' UPDATE mytable SET myfield='value' WHERE

随机推荐