数据库主键

1031 笔记

拟墨画扇 提交于 2019-12-03 07:32:51
目录 pymysql 1.基本操作 1.新建表 2.增加数据 3.删除数据 4.更改数据 5.查找数据 6.断开连接 2.sql注入 解决方法 3.创建大数据库 索引 定义 作用 实现原理 B+树的性质 B+树的分类 InnoDB存储引擎表示索引组织表,即表中数据按照主键顺序存放。而聚集索引(clustered index)就是按照每张表的主键构造一棵B+树,同时叶子结点存放的即为整张表的行记录数据,也将聚集索引的叶子结点称为数据页。聚集索引的这个特性决定了索引组织表中数据也是索引的一部分。同B+树数据结构一样,每个数据页都通过一个双向链表来进行链接。 如果未定义主键,MySQL取第一个唯一索引(unique)而且只含非空列(NOT NULL)作为主键,InnoDB使用它作为聚簇索引。 如果没有这样的列,InnoDB就自己产生一个这样的ID值,它有六个字节,而且是隐藏的,使其作为聚簇索引。 由于实际的数据页只能按照一棵B+树进行排序,因此每张表只能拥有一个聚集索引。在多少情况下,查询优化器倾向于采用聚集索引。因为聚集索引能够在B+树索引的叶子节点上直接找到数据。此外由于定义了数据的逻辑顺序,聚集索引能够特别快地访问针对范围值得查询。 索引的种类 主键索引 primary key 唯一索引 unique(name) 唯一联合索引 uniqe (name, email) 普通索引

mysql面试题

◇◆丶佛笑我妖孽 提交于 2019-12-03 07:22:57
事务四大特性 原子性:不可分割的操作单元,事务中所有操作,要么全部成功;要么撤回到执行事务之前的状态 一致性:如果在执行事务之前数据库是一致的,那么在执行事务之后数据库也还是一致的; 隔离性:事务操作之间彼此独立和透明互不影响。事务独立运行。这通常使用锁来实现。一个事务处理后的结果,影响了其他事务,那么其他事务会撤回。事务的100%隔离,需要牺牲速度。 持久性:事务一旦提交,其结果就是永久的。即便发生系统故障,也能恢复。 MySQL 的事务隔离级别 未提交读(Read Uncommitted):允许脏读,其他事务只要修改了数据,即使未提交,本事务也能看到修改后的数据值。也就是可能读取到其他会话中未提交事务修改的数据 提交读(Read Committed):只能读取到已经提交的数据。Oracle等多数数据库默认都是该级别 (不重复读)。 可重复读(Repeated Read):可重复读。无论其他事务是否修改并提交了数据,在这个事务中看到的数据值始终不受其他事务影响。 串行读(Serializable):完全串行化的读,每次读都需要获得表级共享锁,读写相互都会阻塞 MySQL数据库(InnoDB引擎)默认使用可重复读( Repeatable read) 索引 数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。索引的实现通常使用 B_TREE。B

福大同好——项目系统设计与数据库设计

不羁的心 提交于 2019-12-03 05:22:32
这个作业属于哪个课程 班级链接 这个作业要求在哪里 作业要求的链接 团队名称 热情(PASSION) 这个作业的目标 实现软件系统设计与数据库制作 作业的正文 福大同好——项目需求分析 其他参考文献 《计算机软件文档编制规范》(GB-T8567-2006) 《软件工程》(Roger S.Pressman) 《构建之法》(邹欣) Github链接 Github地址 团队项目的开发计划(分工+时间) 历史进程: 预期开发计划: 体系结构设计、功能模块层次图 总体设计: 功能模块层次图: 设计类图: E-R分析图+表结构设计 注:红色文字为主键 标签: 举报: 申请: 通知: 意见反馈: 动态相关: 完整E-R图: 表结构设计: 用户表: 中文名 字段名 数据类型 长度 主键 可空 描述 用户ID UserID INT 是 否 用户唯一标识符 学号 StudentID CHAR 9 否 用户的学号,可用于登录 用户名 UserName VARCHAR 20 否 如果不设置用户名的话,那么用户名就是学号 密码 UserPassword VARCHAR 16 否 用户的密码,长度在6~16位 学院 College VARCHAR 20 否 用户所在学院 年级 Grade SMALLINT 否 用户所在年级 专业 Major VARCHAR 20 否 用户所在专业 签名 Signature

mysql-connector-java8.0的坑

与世无争的帅哥 提交于 2019-12-03 05:03:51
今天在开发的时候遇到了一个8.0的坑,数据库主键一般都设的是bigint类型,在DO层接收的时候一般都用long类型来接收,今天在mybatis的insert操作之后想返回对象主键,但是一直报bigint不能转换为long类型,最后先通过将主键转换为string,在将string转换为long得以解决。。。个人猜测可能是因为在mysql建表的时候设置了主键为unsigned,unsigned转换为long的时候有可能引发位差问题。记在这里,希望下次长点记性 来源: https://www.cnblogs.com/qtlq/p/11779126.html

了解MyISAM与InnoDB的索引差异(转)

你说的曾经没有我的故事 提交于 2019-12-03 02:38:29
出处原文: 1分钟了解MyISAM与InnoDB的索引差异 数据库的索引分为 主键索引 (Primary Inkex)与 普通索引 (Secondary Index)。InnoDB和MyISAM是怎么利用B+树来实现这两类索引,其又有什么差异呢?这是今天要聊的内容。 一,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的 主键索引与 行记录是存储在一起的,故叫做

MySQL常见问题

巧了我就是萌 提交于 2019-12-03 01:46:33
事务四大特性 原子性:不可分割的操作单元,事务中所有操作,要么全部成功;要么撤回到执行事务之前的状态 一致性:如果在执行事务之前数据库是一致的,那么在执行事务之后数据库也还是一致的; 隔离性:事务操作之间彼此独立和透明互不影响。事务独立运行。这通常使用锁来实现。一个事务处理后的结果,影响了其他事务,那么其他事务会撤回。事务的100%隔离,需要牺牲速度。 持久性:事务一旦提交,其结果就是永久的。即便发生系统故障,也能恢复。 MySQL的事务隔离级别 未提交读(Read Uncommitted):允许脏读,其他事务只要修改了数据,即使未提交,本事务也能看到修改后的数据值。也就是可能读取到其他会话中未提交事务修改的数据 提交读(Read Committed):只能读取到已经提交的数据。Oracle等多数数据库默认都是该级别 (不重复读)。 可重复读(Repeated Read):可重复读。无论其他事务是否修改并提交了数据,在这个事务中看到的数据值始终不受其他事务影响。 串行读(Serializable):完全串行化的读,每次读都需要获得表级共享锁,读写相互都会阻塞 MySQL数据库(InnoDB引擎)默认使用可重复读( Repeatable read) 索引 数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。索引的实现通常使用 B_TREE。B

hibernate框架学习之主键生成策略generator

匿名 (未验证) 提交于 2019-12-03 00:43:02
1)手工控制 assigned(不限制类型) 2)数据库自动生成 uuid(字符串类型) increment(整型数值类型) identity (整型数值类型) sequence (整型数值类型) native(整型数值类型) assigned策略是由程序员手工控制输入数据模型OID的一种id生成策略 assigned策略不限定数据库中id字段的类型 assigned策略无法保障id的不重复性 assigned策略通常配合外部自定义的id生成策略使用,否则将具有很大的风险性 assigned策略对于集群式数据库id控制相对简单些,也可以理解为“为所欲为” 后期配合一些主键自增工具类(UuidService)完成 在UuidService基础上加入缓存机制有效提升其效率 ======= uuid策略是由以下4种数据联合计算得出的一种OID生成策略 IP地址 JVM启动时间(精确到250ms) 当前系统时间 JVM提供的计数器(保障唯一) uuid策略要求数据库中id字段为字符串类型 uuid策略可以保障id的唯一性,因此不具有风险性 ========= increment策略是由Hibernate内部控制生成OID的一种id生成策略 increment策略要求数据库中id字段为整型数值类型 increment策略首先从对应数据库表中取出当前已使用的最大id值max,然后在此基础上+1

JPA(五) 主键生成策略

匿名 (未验证) 提交于 2019-12-03 00:30:01
1.1 IDENTITY: 主键由数据库自动生成 (主要是自动增长型) //用法: @Id @GeneratedValue (strategy = GenerationType.IDENTITY) private Long custId; 1.2 SEQUENCE :根据底层数据库的序列来生成主键,条件是数据库支持序列。 用法: @Id @GeneratedValue (strategy = GenerationType.SEQUENCE,generator= "payablemoney_seq" ) @SequenceGenerator (name= "payablemoney_seq" , sequenceName= "seq_payment" ) private Long custId; //@SequenceGenerator 源码中的定义 @Target ({TYPE, METHOD, FIELD}) @Retention (RUNTIME) public @ interface SequenceGenerator { //表示该表主键生成策略的名称,它被引用在@GeneratedValue 中设置的“generator”值中 String name(); //属性表示生成策略用到的数据库序列名称。 String sequenceName() default "" ; /

Hibernate―――― <id>元素(id生成策略)

匿名 (未验证) 提交于 2019-12-03 00:22:01
1、increment 对long、int、short的数据列生成自动增长主键。这种情况主要用于数据库中未把表格主键设置为自增,而又想表格主键自增时。此方式的实现机制为在当前应用实例中维持一个变量,以保存着当前的最大值,之后每次需要生成主键的时候将此值加1作为主键。 这种方式可能产生的问题是:如果当前有多个实例访问同一个数据库,那么由于各个实例各自维护主键状态,不同实例可能生成同样的键,从而造成主键重复异常。因此,如果同一数据有多个实例(并发量大)访问,此方式必须避免使用。只有在没有其他进程往同一张表中插入数据时才能使用。但是它的生成标识符机制不依赖于底层数据库系统,所以它适合于所有的数据库系统。 2、identity 对如SQL Server 、MySQL等支持自动增长列的数据库,如果数据列的类型时long、short或int,可使用该主键生成器来生成自动增长主键。但是由于它依赖于底层数据库,所以要求底层数据库系统必须支持自动增长字段类型。而且他需要底层数据库把主键定义为自动增长字段类型。 3、native 该生成器依据底层数据库对自动生成标识符的支持能力,来选择使用identity、sequence或hilo标识符生成器。能自动判断底层数据库提供的生成标识符的机制。适合跨平台开发,即同一个Hibernate应用需要连接多种数据库的场合。 4、sequence 对如Oracle

SpringBoot@GeneratedValue 四种参数

匿名 (未验证) 提交于 2019-12-03 00:05:01
按照大家学习SpringBoot的经验来看, SpringBoot的@GeneratedValue 是不需要加参数的,但是如果数据库控制主键自增(auto_increment), 不加参数就会报错.(血的教训, 看了@GeneratedValue源代码才知道) @GeneratedValue(strategy=GenerationType.IDENINY) PS:@GeneratedValue注解的strategy属性提供四种值: -AUTO主键由程序控制, 是默认选项 ,不设置就是这个 -IDENTITY 主键由数据库生成, 采用数据库自增长, Oracle不支持这种方式 -SEQUENCE 通过数据库的序列产生主键, MYSQL 不支持 -Table 提供特定的数据库产生主键, 该方式更有利于数据库的移植 参考地址 https://blog.csdn.net/ssjq123/article/details/79572016 来源:51CTO 作者: 那些年的代码 链接:https://blog.csdn.net/weixin_44018338/article/details/100041981