数据库主键

mysql学习笔记

匿名 (未验证) 提交于 2019-12-02 21:59:42
【前言】以前学过mongodb,几天的学习,也算入了MySQL的门。参考下面一个网站,慢慢的系统学习一下。 一个系统的网站 (点我) 一、基础介绍   1、数据库――表――列(及其指定的数据类型)。   2、行,表中的数据是按行存储的,保存的每个记录存储在自己的行内。   3、 主键(primary key): 一列或一组列,其值能够唯一区分表中的每一行;唯一标识表中每行的这个列(或这组列)称为主键。例如我设计的(Id)。要求: ① 任意两行都不具有相同的主键值; ② 每个行都必须具有一个主键值(主键列不允许NULL值); 二、基本操作   1、select排序检索 检索最高或最低值   select column from table orderby column desc limit 1;   column desc 告诉MySQL按照降序排列,limit 1告诉MySQL只返回一行的数据   2、 原文: https://www.cnblogs.com/huangfuyuan/p/9368357.html

jango 模型管理数据model,数据库外键主键与一对一,一对多,多对多关系

核能气质少年 提交于 2019-12-02 18:24:10
四.models.py 定义和管理模型: 4.1模型class的属性就映射与数据库的字段参数 继承models.Model class TestClass(models.Model): 4.2在数据库生成数据表: #django默认在makemigrations会为表对象创建主键id,id = models.AutoField(primary_key=True) 你也可以自定义一个主键对象: 4.2.1: 生成迁移文件python manage.py makemigrations 4.2.2执行迁移python manage.py migrate show tables; 检查数据库mysql mysql> desc app_grade; +------------+------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------+------------+------+-----+---------+-------+ | grade_id | int(11) | NO | PRI | NULL | | | grade_good | int(11) | NO | | NULL | | | grade_bad | int(11) | NO

Java开发数据库设计的14个技巧,你知道几个?

我是研究僧i 提交于 2019-12-02 16:33:02
1. 原始单据与实体之间的关系 可以是一对一、一对多、多对多的关系。在一般情况下,它们是一对一的关系:即一张原始单据对应且只对应一个实体。在特殊情况下,它们可能是一对多或多对一的关系,即一张原始单证对应多个实体,或多张原始单证对应一个实体。 这里的实体可以理解为基本表。明确这种对应关系后,对我们设计录入界面大有好处。 〖例1〗:一份员工履历资料,在人力资源信息系统中,就对应三个基本表:员工基本情况表、社会关系表、工作简历表。这就是“一张原始单证对应多个实体”的典型例子。 2. 主键与外键 一般而言,一个实体不能既无主键又无外键。在E—R 图中, 处于叶子部位的实体, 可以定义主键,也可以不定义主键(因为它无子孙), 但必须要有外键(因为它有父亲)。 主键与外键的设计,在全局数据库的设计中,占有重要地位。当全局数据库的设计完成以后,有个美国数据库设计专家说:“键,到处都是键,除了键之外,什么也没有”,这就是他的数据库设计经验之谈,也反映了他对信息系统核心(数据模型)的高度抽象思想。 因为:主键是实体的高度抽象,主键与外键的配对,表示实体之间的连接。 3. 基本表的性质 基本表与中间表、临时表不同,因为它具有如下四个特性: 原子性。基本表中的字段是不可再分解的。 原始性。基本表中的记录是原始数据(基础数据)的记录。 演绎性。由基本表与代码表中的数据,可以派生出所有的输出数据。 稳定性

自增主键用完了该怎么办

最后都变了- 提交于 2019-12-02 15:54:08
转自微信公众号“孤独烟” 简单版 我们先明白一点,在mysql中,Int整型的范围如下 我们以无符号整型为例,存储范围为0~4294967295,约43亿!我们先说一下,一旦自增id达到最大值,此时数据继续插入是会报一个主键冲突异常如下所示 //Duplicate entry '4294967295' for key 'PRIMARY' 那解决方法也是很简单的,将Int类型改为BigInt类型,BigInt的范围如下 就算你每秒10000条数据,跑100年,单表的数据也才 10000*24*3600*365*100=31536000000000 这数字距离BigInt的上限还差的远,因此你将自增ID设为BigInt类型,你是不用考虑自增ID达到最大值这个问题! 然而,如果你在面试中的回答如果是 你:"简单啊,把自增主键的类型改为BigInt类型就好了!" 接下来,面试官可以问你一个更坑的问题! 面试官:"你在线上怎么修改列的数据类型的?" 你:"what!我还是回等通知吧!" 怎么改 目前业内在线修改表结构的方案,据我了解,一般有如下三种 方式一:使用mysql5.6+提供的在线修改功能 所谓的mysql自己提供的功能也就是mysql自己原生的语句,例如我们要修改原字段名称及类型。 mysql> ALTER TABLE table_name CHANGE old_field

数据库标准-mysql

北战南征 提交于 2019-12-02 15:31:59
作者: 听风,原文地址: https://www.cnblogs.com/huchong/p/10219318.html 。JavaGuide 已获得作者授权。 数据库命令规范 数据库基本设计规范 1. 所有表必须使用 Innodb 存储引擎 2. 数据库和表的字符集统一使用 UTF8 3. 所有表和字段都需要添加注释 4. 尽量控制单表数据量的大小,建议控制在 500 万以内。 5. 谨慎使用 MySQL 分区表 6.尽量做到冷热数据分离,减小表的宽度 7. 禁止在表中建立预留字段 8. 禁止在数据库中存储图片,文件等大的二进制数据 9. 禁止在线上做数据库压力测试 10. 禁止从开发环境,测试环境直接连接生成环境数据库 数据库字段设计规范 1. 优先选择符合存储需要的最小的数据类型 2. 避免使用 TEXT,BLOB 数据类型,最常见的 TEXT 类型可以存储 64k 的数据 3. 避免使用 ENUM 类型 4. 尽可能把所有列定义为 NOT NULL 5. 使用 TIMESTAMP(4 个字节) 或 DATETIME 类型 (8 个字节) 存储时间 6. 同财务相关的金额类数据必须使用 decimal 类型 索引设计规范 1. 限制每张表上的索引数量,建议单张表索引不超过 5 个 2. 禁止给表中的每一列都建立单独的索引 3. 每个 Innodb 表必须有个主键 4.

MyBatis-plus 新增实例,主键ID从很大的数字开始

馋奶兔 提交于 2019-12-02 15:30:37
mybatis-plus是mybatis增强版,用mybatis-plus可以省去很多DAO层代码和数据库操作语句的编写。但是需要我们配置好条件。 情景:   向数据库新增一条实例,我们要调用 insert(T t)方法;向数据库批量新增实例,我们调用inserBatch(List<T> list)方法。 当然,这些都是mybatis-plus已经封装好的,我们直接用,DAO层代码和xml文件不用自己编写。但是,我们数据库新增实例,主键ID一般都是自增长的,不用人工给它赋值。 那么mybatis-plus在新增的时候,会出现主键ID从很大的数字开始(example ‘17629802347414’),而不是从1开始的。原因就在于,mybatis-plus在新增的时候,会给一个主键ID, 并且这个数字不规范,还不连续。这时候我们需要忽略掉这一点,不需要mybatis-plus给我们ID。 配置Bean对象: 给主键ID属性,加上一个Type,设置为自动,这样mybatis-plus就会忽略掉主键,转而用数据库自己的自增长模式。 来源: https://www.cnblogs.com/fengyuduke/p/11751750.html

MySQL 分页查询优化——延迟关联优化

女生的网名这么多〃 提交于 2019-12-02 14:34:18
目录 1. InnoDB 表的索引的几个概念 2. 覆盖索引和回表 3. 分页查询 4. 延迟关联优化 写在前面 下面的介绍均是在选用 MySQL 数据库和 Innodb 引擎的基础开展。我们先来学习索引的几个概念,帮助我们理解延迟关联优化的加快分页查询速度的原因。 一、 Innodb 表的索引的几个概念 InnoDB 表是基于聚簇索引建立的。 索引一般分为主键索引和普通索引(辅助索引),聚簇索引并不是主键索引这样的单独的索引类型,而是一种数据存储方式。通俗的来说,单独的索引是存储了索引信息的 B+Tree ,而聚簇索引是在同一个结构中保存了 B+Tree 和数据行,即通过主键索引 B+Tree 的结构建立数据文件(网上的说法是索引和数据存储在同一个文件中),因此聚簇索引是一种数据存储方式。 如果对于索引的概念不是很熟悉,建议去查阅相关资料学习,索引是一个很庞大的知识结构。 Innodb 表以主键索引建立后缀名为 .MYD 表存储文件,普通索引亦以 B+Tree 实现,并保存在后缀名为 .MYI 的文件中,具体结构图如下所示: 在查询时选用主键索引和普通索引有什么不一样呢? 以下面语句为例: · select * from table where id = 5; ( id 为主键索引) 检索过程如上图绿色箭头所示,直接在主索引树上根据主键检索 · select * from

Mybatis插入操作返回主键

一个人想着一个人 提交于 2019-12-02 11:34:06
Mybatis的insert操作返回插入的是插入成功的数据有多少条,但在某些场景下,我们需要将一条记录插入后,得到这条记录在数据库中的主键。 在主键自增的情况下,可以在mapper文件的insert定义中,添加如下修改可以实现这样的效果。 此时dao层的insertSelective函数返回的还是插入成功的数据有多少条,但是该函数入参的AuditRecord参数,id属性已经被mybatis赋值为该条记录插入后的主键值了,直接getId就可以获得主键。 来源: https://www.cnblogs.com/liangf27/p/11743240.html

MyISAM与InnoDB的索引差异

扶醉桌前 提交于 2019-12-02 11:22:04
MyISAM与InnoDB的索引差异 数据库的索引分为主键索引(Primary Inkex)与普通索引(Secondary Index) 一、MyISAM的索引 MyISAM的索引与行记录是分开存储的,叫做非聚集索引(UnClustered Index)。 其主键索引与普通索引没有本质差异: 有连续聚集的区域单独存储行记录 主键索引的叶子节点,存储主键,与对应行记录的指针 普通索引的叶子结点,存储索引列,与对应行记录的指针 MyISAM的表可以没有主键。 主键索引与普通索引是两棵独立的索引B+树,通过索引列查找时,先定位到B+树的叶子节点,再通过指针定位到行记录。 举个例子,MyISAM: t ( id PK , name KEY , sex , flag ) ; 表中有四条记录: 1 , shenjian , m , A 3 , zhangsan , m , A 5 , lisi , m , A 9 , wangwu , f , B 其B+树索引构造如上图: 行记录单独存储 id为PK,有一棵id的索引树,叶子指向行记录 name为KEY,有一棵name的索引树,叶子也指向行记录 二、InnoDB的索引 InnoDB的主键索引与行记录是存储在一起的,故叫做聚集索引(Clustered Index): 没有单独区域存储行记录 主键索引的叶子节点,存储主键,与对应行记录(而不是指针)

索引

a 夏天 提交于 2019-12-02 11:14:51
一.什么叫索引: 索引就是类似书的目录,提高检索数据的效率。 索引是系统按照某个具体的算法(哈希,散列,二叉树),将数据从全部数据里进行提取,维护成一个索引文件,然后系统在进行数据查询的时候,发现如果查询条件刚好满足索引条件,就可以从索引文件中快速的定位的数据所在位置。更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度。 ** 二.索引类型包括: 普通索引(index) 对数据没有要求,文件很大,效率比较低,但是查询速度相对较快。 ALTER TABLE 表名字 ADD INDEX index_name ( 需要加索引的列 ) 全文索引(fulltext) 全文索引只能用于InnoDB或MyISAM表,只能为CHAR、VARCHAR、TEXT列创建,Sysman支持全文索引。MySQL5.6.后InnoDB引擎也加入了全文索引对文本的内容进行分词,因为MySQL提供了支持中文、日文和韩文的内置全文ngram解析器。 具体化 ALTER TABLE 表名 ADD FULLTEXT ( 需要加索引的列 ) 唯一索引(unique key) 唯一索引可以有多个但索引列的值必须唯一,索引列的值允许有空值(null)。如果是组合索引,则列值的组合必须唯一。创建唯一索引的目的不是为了提高访问速度,而只是为了避免数据出现重复。 ALTER TABLE 表名 ADD UNIQUE