数据库主键

mysql 中的索引

怎甘沉沦 提交于 2019-12-01 01:59:38
转载于: https://www.cnblogs.com/songwenjie/p/9410009.html 什么是索引 索引(在 MySQL 中也叫“键key”)是存储引擎快速找到记录的一种数据结构 ——《高性能MySQL》 我们需要知道索引其实是一种数据结构,其功能是帮助我们快速匹配查找到需要的数据行,是数据库性能优化最常用的工具之一。其作用相当于超市里的导购员、书本里的目录。 索引类型 可以使用 SHOW INDEX FROM table_name; 查看索引详情 主键索引 PRIMARY KEY 它是一种特殊的唯一索引,不允许有空值。一般是在建表的时候同时创建主键索引。 注意:一个表只能有一个主键 唯一索引 UNIQUE 唯一索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。 可以通过 ALTER TABLE table_name ADD UNIQUE (column); 创建唯一索引 可以通过 ALTER TABLE table_name ADD UNIQUE (column1,column2); 创建唯一组合索引 普通索引 INDEX 最基本的索引,它没有任何限制。 可以通过 ALTER TABLE table_name ADD INDEX index_name (column); 创建普通索引 组合索引 INDEX 组合索引,即一个索引包含多个列

indexDB的用法

谁说胖子不能爱 提交于 2019-11-30 23:41:09
本文转自 http://www.ruanyifeng.com/blog/2018/07/indexeddb.html ,为了方便个人整理学习笔记所用 一、概述 随着浏览器的功能不断增强,越来越多的网站开始考虑,将大量数据储存在客户端,这样可以减少从服务器获取数据,直接从本地获取数据。 现有的浏览器数据储存方案,都不适合储存大量数据:Cookie 的大小不超过4KB,且每次请求都会发送回服务器;LocalStorage 在 2.5MB 到 10MB 之间(各家浏览器不同),而且不提供搜索功能,不能建立自定义的索引。所以,需要一种新的解决方案,这就是 IndexedDB 诞生的背景。 通俗地说,IndexedDB 就是浏览器提供的本地数据库,它可以被网页脚本创建和操作。IndexedDB 允许储存大量数据,提供查找接口,还能建立索引。这些都是 LocalStorage 所不具备的。就数据库类型而言,IndexedDB 不属于关系型数据库(不支持 SQL 查询语句),更接近 NoSQL 数据库。 IndexedDB 具有以下特点。 (1)键值对储存。 IndexedDB 内部采用对象仓库(object store)存放数据。所有类型的数据都可以直接存入,包括 JavaScript 对象。对象仓库中,数据以"键值对"的形式保存,每一个数据记录都有对应的主键,主键是独一无二的,不能有重复

数据库和表的设计

老子叫甜甜 提交于 2019-11-30 23:40:30
为什么需要数据完整性 数据的完整性是指数据的精确性和可靠性。它的目的是为了防止数据库中不符合语义规定的数据或者因错误信息的输入而造成无效的操作。 数据完整性分为4类: 实体完整性 域完整性 引用完整性 用户自定义完整性 1、实体完整性:实体就是数据库中所要表示的客观世界中存在的事物。 实体完整性将行定义为特定表的唯一实体,规定表的每一行记录在表中是唯一的。 实体完整性在表中的约束体现为:主键(Primary Key)约束、唯一(unique)约束。 主键:Primary Key,主要的键,一张表只能有一个字段可以使用对应的键,用来唯一的约束该字段里面的数据,不能重复,这种称之为主键。 一个表只能最多一个主键。 增加主键 SQL操作中有多种方式可以给表增加主键:大题分为三种, 1、在创建表的时候,直接在字段之后跟primary key关键字(主键本身不允许为空)。 2、在创建表的时候,在所有的字段之后,使用primary key(主键字段)来创建主键。 3、当表已经创建好之后,额外追加主键:可以通过修改字段属性,也可以直接追加 Alter table 表明 add primary key(字段列表); 前提:表中字段对应的数据本身是独立的(不重复) 主键约束 主键对应的字段中的数据不允许重复,一旦重复,数据操作失败(增和改) 唯一约束 可以用来确保在非主键列中不存在重复值

主键uuid

谁都会走 提交于 2019-11-30 21:41:36
UUID是一堆-分割的16进制的数字。 是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。 在UUID的算法中,可能会用到诸如网卡MAC地址,IP,主机名,进程ID等信息以保证其独立性。 通俗讲UUID就是可以让项目每条数据具有唯一标识。在java向数据库插入一条数据之前生成一个UUID码当主键,这样那条数据就具有了唯一标识,效果比ID主键自增长要好。 代码如下: String guid = UUID.randomUUID().toString().replaceAll("-", ""); UUID的生成类参考 在分布式的软件系统中(比如:DCE/RPC, COM+,CORBA)就能体现出来,它能保证每个节点所生成的标识都不会重复,并且随着WEB服务等整合技术的发展,UUID的优势将更加明显。根据使用的特定机制,UUID不仅需要保证是彼此不相同的,或者最少也是与公元3400年之前其他任何生成的通用唯一标识符有非常大的区别。UUID最少在3000+年内不会重复。 通用唯一标识符还可以用来指向大多数的可能的物体。微软和其他一些软件公司都倾向使用全球唯一标识符(GUID),这也是通用唯一标识符的一种类型,可用来指向组建对象模块对象和其他的软件组件。第一个通用唯一标识符是在网络计算机系统(NCS)中创建,并且随后成为开放软件基金会(OSF)的分布式计算环境(DCE

MySQL高级

帅比萌擦擦* 提交于 2019-11-30 20:47:11
目录 case when end 索引 索引的作用 索引的概念 索引的优缺点 索引的分类 普通索引 全文索引 视图 作用: 语法: 存储过程 优点: 缺点: 定义语法: 调用语法: 数据库设计 ER图 范式 三大范式 行转列 作业: case when end case when end 是sql的高级用法,会自动的开辟一个新的列,做用是把比较后的结果输出到一个新的列。可用别名做列名。可以和列(集合)比也可以和单个元素比,比较的结果也可以是列或者单个元素。并且,是列则都是有序对应的。(如此说来也可以列和列比较了,有可能行) 当colume 与condition 条件相等时结果为result。把colume列中所有等于condition的比较结果输出为result case colume when condition then result when condition then result when condition then result else result end 另一种方式反而更好用,把性别列的所有男都换成女,之后输出新的列,可以取别名,可以不用ELSE如果不用else那么例外的情况都会输出为null。 SELECT tb_stu.gender, tb_stu.id, CASE WHEN gender='男' THEN 'man' ELSE 'woman' END

MySQL详细知识点总结

杀马特。学长 韩版系。学妹 提交于 2019-11-30 18:33:18
1 Windows服务 -- 启动MySQL net start mysql-- 创建Windows服务 sc create mysql binPath= mysqld_bin_path(注意:等号与值之间有空格) 2 连接与断开服务器 mysql -h 地址 -P 端口 -u 用户名 -p 密码SHOW PROCESSLIST -- 显示哪些线程正在运行SHOW VARIABLES -- 显示系统变量信息 3 数据库操作 -- 查看当前数据库 SELECT DATABASE();-- 显示当前时间、用户名、数据库版本 SELECT now(), user(), version();-- 创建库 CREATE DATABASE[ IF NOT EXISTS] 数据库名 数据库选项 数据库选项: CHARACTER SET charset_name COLLATE collation_name-- 查看已有库 SHOW DATABASES[ LIKE 'PATTERN']-- 查看当前库信息 SHOW CREATE DATABASE 数据库名-- 修改库的选项信息 ALTER DATABASE 库名 选项信息-- 删除库 DROP DATABASE[ IF EXISTS] 数据库名 同时删除该数据库相关的目录及其目录内容 4 表的 操作 -- 创建表 CREATE

mysql 锁机制 详解 一

a 夏天 提交于 2019-11-30 16:44:02
1 背景 1 1.1 MVCC:Snapshot Read vs Current Read 2 1.2 Cluster Index:聚簇索引 3 1.3 2PL:Two-Phase Locking 3 1.4 Isolation Level 4 2 一条简单SQL的加锁实现分析 5 2.1 组合一:id主键+RC 6 2.2 组合二:id唯一索引+RC 6 2.3 组合三:id非唯一索引+RC 7 2.4 组合四:id无索引+RC 8 2.5 组合五:id主键+RR 9 2.6 组合六:id唯一索引+RR 9 2.7 组合七:id非唯一索引+RR 9 2.8 组合八:id无索引+RR 11 2.9 组合九:Serializable 12 3 一条复杂的SQL 12 4 死锁原理与分析 14 5 总结 16 背景 MySQL/InnoDB的加锁分析,一直是一个比较困难的话题。我在工作过程中,经常会有同事咨询这方面的问题。同时,微博上也经常会收到MySQL锁相关的私信,让我帮助解决一些死锁的问题。本文,准备就MySQL/InnoDB的加锁问题,展开较为深入的分析与讨论,主要是介绍一种思路,运用此思路,拿到任何一条SQL语句,都能完整的分析出这条语句会加什么锁?会有什么样的使用风险?甚至是分析线上的一个死锁场景,了解死锁产生的原因。 注: MySQL是一个支持插件式存储引擎的数据库系统

mysql索引原理

99封情书 提交于 2019-11-30 16:17:21
mysql索引原理 阅读目录    初识索引    索引的原理    索引的数据结构    聚集索引与辅助索引    MySQL索引管理    测试索引    正确使用索引    联合索引    查询优化神器-explain    慢查询优化的基本步骤    慢日志管理 一 初识索引 为什么要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句的优化显然是重中之重。说起加速查询,就不得不提到索引了。 什么是索引? 索引在MySQL中也叫是一种“键”,是存储引擎用于快速找到记录的一种数据结构。索引对于良好的性能 非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要。 索引优化应该是对查询性能优化最有效的手段了。索引能够轻易将查询性能提高好几个数量级。 索引相当于字典的音序表,如果要查某个字,如果不使用音序表,则需要从几百页中逐页去查。 你是否对索引存在误解? 索引是应用程序设计和开发的一个重要方面。若索引太多,应用程序的性能可能会受到影响。而索引太少,对查询性能又会产生影响,要找到一个平衡点,这对应用程序的性能至关重要。一些开发人员总是在事后才想起添加索引----我一直认为,这源于一种错误的开发模式。如果知道数据的使用

杂谈自增主键用完了怎么办

南笙酒味 提交于 2019-11-30 13:04:47
引言 在面试中,大家应该经历过如下场景 面试官:"用过mysql吧,你们是用自增主键还是UUID?" 你:"用的是自增主键" 面试官:"为什么是自增主键?" 你:"因为采用自增主键,数据在物理结构上是顺序存储,性能最好,blabla..." 面试官:"那自增主键达到最大值了,用完了怎么办?" 你:"what,没复习啊!!" (然后,你就可以回去等通知了!) 这个问题是一个粉丝给我提的,我觉得挺有 意(KENG)思(B)! 于是,今天我们就来谈一谈,这个自增主键用完了该怎么办! 正文 简单版 我们先明白一点,在mysql中,Int整型的范围如下 类型 最小值 最大值 存储大小 Int(有符号) -2147483648 2147483648 4 bytes Int(无符号) 0 4294967295 4 bytes 我们以无符号整型为例,存储范围为0~4294967295,约43亿!我们先说一下,一旦自增id达到最大值,此时数据继续插入是会报一个主键冲突异常如下所示 //Duplicate entry '4294967295' for key 'PRIMARY' 那解决方法也是很简单的,将Int类型改为BigInt类型,BigInt的范围如下 类型 最小值 最大值 存储大小 BigInt(有符号) -9223372036854775808 9223372036854775808 8

<转载>面试官: 讲讲MySql表设计需要注意什么?

ε祈祈猫儿з 提交于 2019-11-30 11:15:26
作者:孤独烟 出处: http://rjzheng.cnblogs.com/ 综述 近期由于复习了一下MySQL的内容看到一篇比较好的文章,转载分享一下。大家看完,其实能避开很多坑。而且很多问题,都是面试中实打实会问到的! 具体有下面这些问题: 为什么一定要设一个主键? 你们主键是用自增还是UUID? 主键为什么不推荐有业务含义? 表示枚举的字段为什么不用enum类型? 货币字段用什么类型? 时间字段用什么类型? 为什么不直接存储图片、音频、视频等大容量内容? 字段为什么要定义为NOT NULL? 正文 问题1:为什么一定要设一个主键? 回答:因为你不设主键的情况下,Innodb也会帮你生成一个隐藏列,作为自增主键。所以啦,反正都要生成一个主键,那你还不如自己指定一个主键,在有些情况下,就能显式的用上主键索引,提高查询效率! 问题2:主键是用自增还是UUID? 回答:肯定答自增啊。Innodb中的主键是聚簇索引。如果主键是自增的,那么每次插入新的记录,记录就会顺序添加到当前索引节点的后续位置,当一页写满,就会自动开辟一个新的页。如果不是自增主键,那么可能会在中间插入,就会引发页的分裂,产生很多表碎片!。 上面那句话看不懂没事,大白话一句就是:用自增插入性能好! 另外,附一个测试表给你们,表名带uuid的就是用uuid作为主键。大家看一下就知道性能差距了: 如上图所示