数据库主键

DAY2:MySQL进阶

时光总嘲笑我的痴心妄想 提交于 2019-11-27 07:39:28
一.数据库三范式 讲解: MySQL数据库范式 三范式的作用: 约束数据库建表的规范性。 三范式的最终目标: 不存在冗余数据 第一范式 : 不要向表中输入 完全重复的数据 (设置主键) 下面哪些字段可以作为主键 学号 email 姓名 年龄 023145 zhangs@xdf.com 张三 23 023146 lisi@xdf.com 李四 24 023147 wangw@xdf.com 王五 25 … 023258 zhaol@xdf.com 赵六 25 1.在多个字段可以被选择的情况下,作为主键的字段应该选择最符合逻辑的一个,一般选择 与业务无关的字段,比如自增的 Id 2. 由于效率的关系,请尽量选择一个数值类型的字段或者定长字符串。 第二范式 : 存在多对多关系时只有一个字段作为主键是不够的。 部分依赖,会产生冗余数据 ,需要分解表 学号 学生姓名 教师编号 教师姓名 023145 张三 988010 张老师 023146 李四 988010 张老师 023147 王五 988011 李老师 023145 张三 988011 李老师 023258 赵六 988010 张老师 学生教师关系表: 学号 教师编号 023145 988010 023145 988011 023147 988011 023146 988010 023258 988010 学生信息表 : 学号

MySQL学习笔记

荒凉一梦 提交于 2019-11-27 07:10:37
MySQL学习笔记 登录和退出MySQL服务器 # 登录MySQL $ mysql -u root -p12345612 # 退出MySQL数据库服务器 exit ; 基本语法 -- 显示所有数据库 show databases; -- 创建数据库 CREATE DATABASE test; -- 切换数据库 use test; -- 显示数据库中的所有表 show tables; -- 创建数据表 CREATE TABLE pet ( name VARCHAR(20), owner VARCHAR(20), species VARCHAR(20), sex CHAR(1), birth DATE, death DATE ); -- 查看数据表结构 -- describe pet; desc pet; -- 查询表 SELECT * from pet; -- 插入数据 INSERT INTO pet VALUES ('puffball', 'Diane', 'hamster', 'f', '1990-03-30', NULL); -- 修改数据 UPDATE pet SET name = 'squirrel' where owner = 'Diane'; -- 删除数据 DELETE FROM pet where name = 'squirrel'; -- 删除表 DROP

MySQL两种存储引擎: MyISAM和InnoDB 简单总结

允我心安 提交于 2019-11-27 04:53:35
MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的ISAM(Indexed Sequential Access Method:有索引的顺序访问方法)所改良。虽然性能极佳,但却有一个缺点:不支持事务处理(transaction)。不过,在这几年的发展下,MySQL也导入了InnoDB(另一种数据库引擎),以强化参考完整性与并发违规处理机制,后来就逐渐取代MyISAM。 InnoDB,是MySQL的数据库引擎之一,为MySQL AB发布binary的标准之一。InnoDB由Innobase Oy公司所开发,2006年五月时由甲骨文公司并购。与传统的ISAM与MyISAM相比,InnoDB的最大特色就是支持了ACID兼容的事务(Transaction)功能,类似于PostgreSQL。目前InnoDB采用双轨制授权,一是GPL授权,另一是专有软件授权。 MyISAM和InnoDB两者之间有着明显区别,简单梳理如下: 1) 事务支持 MyISAM不支持事务,而InnoDB支持。InnoDB的AUTOCOMMIT默认是打开的,即每条SQL语句会默认被封装成一个事务,自动提交,这样会影响速度,所以最好是把多条SQL语句显示放在begin和commit之间,组成一个事务去提交。 MyISAM是非事务安全型的,而InnoDB是事务安全型的,默认开启自动提交,宜合并事务,一同提交

hibernate中identity和increment区别

时间秒杀一切 提交于 2019-11-27 03:39:39
hibernate中identity和increment区别 identity:由底层数据库生成标识符。identity是由数据库自己生成的,但这个主键必须设置为自增长,前提条件是低层数据库支持自动增长字段类型 increment:由hibernate管理主键,自动以递增的方式生成标识符,每次增量为1。其在每次插入前取得一个当前最大的id+1作为主键,该主键必须为Integer类型 附: “assigned” 主键由外部程序负责生成,在 save() 之前指定一个。 “hilo” 通过hi/lo 算法实现的主键生成机制,需要额外的数据库表或字段提供高位值来源 “seqhilo” 与hilo 类似,通过hi/lo 算法实现的主键生成机制,需要数据库中的 Sequence,适用于支持 Sequence 的数据库,如Oracle。 “increment” 主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持一个变量,以保存着当前的最大值,之后每次需要生成主键的时候将此值加1作为主键。这种方式可能产生的问题是:不能在集群下使用。 “identity” 采用数据库提供的主键生成机制。如DB2、SQL Server、MySQL 中的主键生成机制。 “sequence” 采用数据库提供的 sequence 机制生成主键。如 Oralce 中的Sequence。 “native” 由

hibernate mapping 主键配置方式

萝らか妹 提交于 2019-11-27 03:39:30
1. 主键(id) Hibernate的主键生成策略有如下几种: 1) assigned 主键由外部程序负责生成,在 save() 之前指定。 2) hilo 通过hi/lo 算法实现的主键生成机制,需要额外的数据库表或字段提供高位值来源。 3) seqhilo 与hilo 类似,通过hi/lo 算法实现的主键生成机制,需要数据库中的 Sequence,适用于支持 Sequence 的数据库,如Oracle。 4) increment 主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持一个变量,以保存着当前的最大值,之后每次需要生成主键的时候将此值加1作为主键。这种方式可能产生的问题是:不能在集群下使用。 5) identity 采用数据库提供的主键生成机制。如DB2、SQL Server、MySQL 中的主键生成机制。 6) sequence 采用数据库提供的 sequence 机制生成主键。如 Oralce 中的Sequence。 7) native 由 Hibernate 根据使用的数据库自行判断采用 identity、hilo、sequence 其中一种作为主键生成方式。 8) uuid.hex 由 Hibernate 基于128 位 UUID 算法 生成16 进制数值(编码后以长度32 的字符串表示)作为主键。 9) uuid.string 与uuid.hex

索引相关

旧时模样 提交于 2019-11-27 03:38:36
索引 为社么要使用索引 避免全表扫描,快速查询数据 数据库中有什么信息可以成为索引 主键、唯一键及普通键等 索引的数据结构 生成索引,建立二叉查找树进行二分查找 生成索引,建立B-Tree结构进行查找 生成索引,按照B+-Tree结构进行查找 Mysql索引 生成索引,按照Hash结构进行查找 普通的二叉查找树会被深度限制搜索速度,深度增加1,就多进行一次IO。 B+Tree,Hash,BitMap MySQL不支持BitMap,且支持InnoDB和MYISAM的 MySQL不显式支持Hash B-Tree ​ 根节点至少包含两个孩子,根节点的孩子数为m ​ 树中每个节点最多含有m个孩子(m大于等于2) ​ 除了根节点和叶子节点外,其他每个节点至少含有ceil个节点(m/2向上取整) ​ 所有叶子节点都位于同一层 ​ 假设每个非终端节点中包含n个关键字信息,其中: ​ a: Ki 为关键字,关键字按升序排列,Ki<K(i-1) ​ b: 关键字个数n,:ceil<=n<=m-1 ​ c: 非叶子节点的指针:p[1],p[2],….p[m],其中p[1]指向关键字小于K[1]的子树,p[m]指向关键字大于K[m-1]的子树,其他p[i],指向关键字属于(K[i-1],K[i])的子树 B+ Tree 非叶子节点的子树指针与关键字个数相同 非叶子节点的子树指针P[i],

【MySQL】索引相关

时间秒杀一切 提交于 2019-11-27 02:50:09
原文: http://106.13.73.98/__/27/ 目录 普通索引 唯一索引 主键索引 组合索引 正确使用索引的情况 索引的注意事项 执行计划 axplain 慢日志记录 分页性能相关方案 索引是数据库中专门用于帮助用户快速查找数据的一种数据结构. 类似于字典中的目录,查找字典内容可以根据目录查找到数据的存放位置,然后直接获取. 作用:约束和加速查找 常见的几种索引: - 普通索引 - 唯一索引 - 主键索引 - 联合索引(多列) -- 联合主键索引 -- 联合唯一索引 -- 联合普通索引 无索引和有索引的区别: 无索引: 从前往后一条一条查询. 有索引: 创建索引的本质,就是创建额外的文件,以某种格式存储,查询的时候,先去额外的文件找,确定了位置,然后再去原始表中直接查询,但是创建的索引越多,越会对硬盘有损耗. ——————————— 建立索引的目的: 额外的文件保存特殊的数据结构 查询快,但是插入更新删除依旧慢 创建索引之后,必须命中索引才能有效 索引的种类: hash索引: 查询单条快,范围查询慢 btre类索引: b+树,层数增多,数据量指数级增长 (InnoDB默认支持btree索引,这里就使用它) 索引名词: 覆盖索引: 在索引文件中直接获取数据 (例如:select name from userinfo where name = 'zyk';) 索引合并:

【MySQL】索引相关

假装没事ソ 提交于 2019-11-27 02:49:59
原文: http://106.13.73.98/__/27/ 目录 普通索引 唯一索引 主键索引 组合索引 正确使用索引的情况 索引的注意事项 执行计划 axplain 慢日志记录 分页性能相关方案 索引是数据库中专门用于帮助用户快速查找数据的一种数据结构. 类似于字典中的目录,查找字典内容可以根据目录查找到数据的存放位置,然后直接获取. 作用:约束和加速查找 常见的几种索引: - 普通索引 - 唯一索引 - 主键索引 - 联合索引(多列) -- 联合主键索引 -- 联合唯一索引 -- 联合普通索引 无索引和有索引的区别: 无索引: 从前往后一条一条查询. 有索引: 创建索引的本质,就是创建额外的文件,以某种格式存储,查询的时候,先去额外的文件找,确定了位置,然后再去原始表中直接查询,但是创建的索引越多,越会对硬盘有损耗. ——————————— 建立索引的目的: 额外的文件保存特殊的数据结构 查询快,但是插入更新删除依旧慢 创建索引之后,必须命中索引才能有效 索引的种类: hash索引: 查询单条快,范围查询慢 btre类索引: b+树,层数增多,数据量指数级增长 (InnoDB默认支持btree索引,这里就使用它) 索引名词: 覆盖索引: 在索引文件中直接获取数据 (例如:select name from userinfo where name = 'zyk';) 索引合并:

MySQL性能优化——索引

天涯浪子 提交于 2019-11-27 02:33:01
一、MySQL中索引的语法 1. 创建索引 1. 在创建表的时候添加索引 CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, INDEX [indexName] (username(length)) ); 2. 在创建表以后添加索引 ALTER TABLE my_table ADD [UNIQUE] INDEX index_name(column_name); 或者 CREATE INDEX index_name ON my_table(column_name); 注意: 1、索引需要占用磁盘空间,因此在创建索引时要考虑到磁盘空间是否足够 2、创建索引时需要对表加锁,因此实际操作中需要在业务空闲期间进行 2. 根据索引查询 具体查询: SELECT * FROM table_name WHERE column_1=column_2;(为column_1建立了索引) 或者模糊查询 SELECT * FROM table_name WHERE column_1 LIKE '%三' SELECT * FROM table_name WHERE column_1 LIKE '三%' SELECT * FROM table_name WHERE column_1 LIKE '%三%' SELECT *

数据库设计原则

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