数据库主键

数据库常见面试题(非DBA方向)

南楼画角 提交于 2020-03-17 11:47:07
数据库面试题总结之一 1.什么是事务?以及四个特性 事务(Transaction)是并发控制的基本单位。 所谓的事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。 事务是数据库维护数据一致性的单位,在每个事务结束时,都能保持数据一致性。 ACID 原子性:要么执行,要么不执行,也就是不可再分,已经最小了。 隔离性:所有操作全部执行完以前其它会话不能看到过程。 一致性:事务前后,数据总额一致。 持久性:一旦事务提交,对数据的改变就是永久的 事物的语句: 1.开始事务:BEGIN TRANSACTION 2.提交事务:COMMIT TRANSACTION 3.回滚事务:ROLLBACK TRANSACTION 2.索引是什么?有哪些作用和优缺点 索引就一种特殊的查询表,数据库的搜索可以利用它加速对数据的检索。 它很类似与现实生活中书的目录,不需要查询整本书内容就可以找到想要的数据。 索引可以是唯一的,创建索引允许指定单个列或者是多个列。 缺点是它减慢了数据录入的速度,同时也增加了数据库的尺寸大小 MySQL数据库几个基本的索引类型:普通索引、唯一索引、主键索引、全文索引 索引加快数据库的检索速度 索引降低了插入、删除、修改等维护任务的速度 唯一索引可以确保每一行数据的唯一性 通过使用索引,可以在查询的过程中使用优化隐藏器,提高系统的性能

SQL联合主键 查重

|▌冷眼眸甩不掉的悲伤 提交于 2020-03-17 06:21:11
2014年最后一天,今天在给数据库导入数据的时候,遇到一个问题,就是联合主键去重。 事情是这样的,现有一个表M,我想找个表中导入了许多数据,并需要将字段A(int)和B(int)联合设置为主键。 但是在设置主键时,告知我有重复的内容,无法设置主键。 正常情况下,这两个字段的组合是唯一的,不应该重复,为了找到重复数据,看看是什么方面出了问题。 采用distinct方式 但是发现 select count(distinct name, id) from A 这句话在SQL里不适用, http://www.cnblogs.com/rainman/archive/2013/05/03/3058451.html 这个里面写了,当然SQL里也会报错。 所以只能将两个字段进行转换并重新组合成一个字段进行查询 select cast(A as varchar(10))+cast(B as varchar(10)) newkey from M group by cast(A as varchar(10))+cast(B as varchar(10)) having count(cast(A as varchar(10))+cast(B as varchar(10)))>1 代码本身没有什么难度,就是在于要转换思想,不能仅仅纠结于两个int类型的主键,重新组合就方便查询了。 来源: https:/

count(1),count(*),count(主键) 性能对比

我们两清 提交于 2020-03-15 06:17:21
前言 前段时间关于统计数量的sql问题和朋友进行了讨论,网上关于这三种查询方式说法不一,主要有以下两种说法。 count(*) = count(主键) > count(1) count(主键) > count(*) > count(1) 今天对这三种方式进行探究。 数据库为mysql 5.7.12,引擎为InnoDB。 建表 CREATE TABLE `user` ( `id` int ( 32 ) NOT NULL AUTO_INCREMENT, `name` varchar ( 500 ) DEFAULT NULL COMMENT '姓名' , `deleted` int ( 2 ) NOT NULL DEFAULT '1' COMMENT '逻辑删除' , `created_date` datetime DEFAULT NULL COMMENT '创建时间' , `created_by` varchar ( 255 ) DEFAULT NULL , `update_date` datetime DEFAULT NULL , `update_by` varchar ( 255 ) DEFAULT NULL , `version` int ( 11 ) NOT NULL DEFAULT '1' COMMENT '乐观锁' , PRIMARY KEY ( `id` ) USING

EF + SqlServer 表没有常规主键,无法更新 EntitySet

坚强是说给别人听的谎言 提交于 2020-03-14 15:20:56
错误描述: 1. U811.1 SqlServer数据库CurrentStock表,没有常规主键,对接系统时使用EF Code First提示: 生成过程中发现错误: 警告 6002: 表/视图“***.dbo.CurrentStock”未定义主键。已推断出该键,并将定义创建为只读的表/视图。 2. 调用EF处理材料出库时,提示: 无法更新 EntitySet“CurrentStock”,因为它有一个 DefiningQuery,而 <ModificationFunctionMapping> 元素中没有支持当前操作的 <UpdateFunction> 元素。 解决方法: 在edmx文件中找到CurrentStock的EntitySet节点,将节点内的DefiningQuery内容删除 来源: https://www.cnblogs.com/lnvc/p/12491959.html

数据库表结构设计方法及原则

偶尔善良 提交于 2020-03-12 15:27:33
http://www.cnblogs.com/RunForLove/p/5693986.html 数据库设计的三大范式:为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。   在实际开发中最为常见的设计范式有三个:第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式;第二范式在第一范式的基础之上更进一层。第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中;第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。总结一下,就是: 第一范式(确保每列保持原子性); 第二范式(确保表中的每列都和主键相关); 第三范式(确保每列都和主键列直接相关,而不是间接相关)。   在目前的企业信息系统中,数据库还是最佳的数据存储方式,虽然已经有很多的书籍在指导我们进行数据库设计,但应该那种方式是设计数据库的表结构的最好方法、设计时应遵从什么样的原则、四个范式如何能够用一种方式达到顺畅的应用等是我一直在思考和总结的问题

笔记:MySQL相关知识

孤街醉人 提交于 2020-03-12 09:03:48
MySQL背景介绍 MySQL发展史 MySQL分支介绍 MySQL的优点 MySQL数据库组成 MySQL的原理 MySQL执行流程 MySQL日志 MySQL事务、锁、索引与SQL优化 MySQL背景介绍 随着互联网企业的兴起,例如阿里巴巴、网易、Yahoo、Facebook等大型互联网公司的推动,目前Mysql已经成为世界上最流行的数据库,并一步步开始占领了原有商业数据库的市场,目前Mysql已经成为互联网公司甚至部分传统公司的首选数据库。 MySQL发展史 最初为AB公司的产品,Mysql5.0及之前的版本均由AB公司管理,在2008年的时候AB公司被Sun公司收购,Mysql也就归属到了Sun公司下,但在Sun还没待多久,Sun公司就被Oracle公司收购了,此期间诞生了一个Sun向Oracle的过渡版本:Mysql5.5(5.1-5.5之间没有发布过版本),直至5.6Mysql就彻底归属于Oracle公司旗下了,从Oracle收购Mysql以来,Mysql发展的速度及新的功能越来越强大,逐步向Oracle靠拢,如:表空间、redo、undo分离、隐藏索引,至2019年,Mysql8.0.15已经GA(官方发布稳定版本),整体发展过程如下(AB版本不做加入): 5.1 → 5.5 → 5.6 → 5.7 → 8.0 MySQL分支介绍 MySQL 是一个开源数据库

Mysql性能优化

巧了我就是萌 提交于 2020-03-12 03:01:34
1.1 Mysql数据库的优化技术   1、mysql优化是一个综合性的技术,主要包括       1. 表的设计合理化(符合3NF)       2. 添加适当索引(index) [四种: 普通索引、主键索引、唯一索引unique、全文索引]       3. 分表技术(水平分割、垂直分割)       4. 读写[写: update/delete/add]分离       5. 存储过程 [模块化编程,可以提高速度]       6. 对mysql配置优化 [配置最大并发数my.ini, 调整缓存大小 ]       7. mysql服务器硬件升级       8. 定时的去清除不需要的数据,定时进行碎片整理(MyISAM)   2、要保证数据库的效率,要做好以下四个方面的工作       1. 数据库设计       2. sql语句优化       3. 数据库参数配置       4. 恰当的硬件资源和操作系统       此外,使用适当的存储过程,也能提升性能。       这个顺序也表现了这四个工作对性能影响的大小 1.2 数据库表设计   1、通俗地理解三个范式        第一范式: 1NF是对属性的原子性约束,要求属性(列)具有原子性,不可再分解;(只要是关系型数据库都满足1NF)        第二范式: 2NF是对记录的惟一性约束,要求记录有惟一标识

mysql中插入数据时Duplicate entry ' value' for key 'PRIMARY'的解决方案

自闭症网瘾萝莉.ら 提交于 2020-03-11 13:08:00
该问题是插入数据表中遇到键重复 我开始以为是我的mysql版本问题,因为在开始导入一个sql文件时就是因为版本问题,5.5与5.7冲突,需要将(0)改为空。所以第一想到的是换版本。 后来上网查,确认是主建重复的问题。 我认为一共两种情况。 1、能肯定的是主键的数值重复了,这样的话可以通过设置主键自增长,在navicat中,可以在数据库手动将相关表设置ID为自增长。 2、还有一种情况是你导入的库重复了,这时候需要delete相关语句,或者直接删除重复的表,我的情况是数据库表更新了,但我重新粘贴过去时没有覆盖,导致重复。 来源: CSDN 作者: sand_wich 链接: https://blog.csdn.net/sand_wich/article/details/104793658

一条sql语句执行很慢的原因有哪些?(待补全)

生来就可爱ヽ(ⅴ<●) 提交于 2020-03-09 16:39:29
说实话,这个问题可以涉及到 MySQL 的很多核心知识,可以扯出一大堆,就像要考你计算机网络的知识时,问你“输入URL回车之后,究竟发生了什么”一样,看看你能说出多少了。 之前腾讯面试的实话,也问到这个问题了,不过答的很不好,之前没去想过相关原因,导致一时之间扯不出来。所以今天,我带大家来详细扯一下有哪些原因,相信你看完之后一定会有所收获,不然你打我。 开始装逼:分类讨论 一条 SQL 语句执行的很慢,那是每次执行都很慢呢?还是大多数情况下是正常的,偶尔出现很慢呢?所以我觉得,我们还得分以下两种情况来讨论。 1、大多数情况是正常的,只是偶尔会出现很慢的情况。 2、在数据量不变的情况下,这条SQL语句一直以来都执行的很慢。 针对这两种情况,我们来分析下可能是哪些原因导致的。 针对偶尔很慢的情况 一条 SQL 大多数情况正常,偶尔才能出现很慢的情况,针对这种情况,我觉得这条SQL语句的书写本身是没什么问题的,而是其他原因导致的,那会是什么原因呢? 数据库在刷新脏页我也无奈啊 当我们要往数据库插入一条数据、或者要更新一条数据的时候,我们知道数据库会在 内存 中把对应字段的数据更新了,但是更新之后,这些更新的字段并不会马上同步持久化到 磁盘 中去,而是把这些更新的记录写入到 redo log 日记中去,等到空闲的时候,在通过 redo log 里的日记把最新的数据同步到 磁盘 中去。 不过

数据库部分 面经集合

大兔子大兔子 提交于 2020-03-08 18:21:18
1、Mysql 主键是什么概念 “主键(PRIMARY KEY)”的完整称呼是“主键约束”。MySQL 主键约束是 一个列或者列的组合 ,其值能 唯一地标识表中的每一行。 这样的一列或多列称为表的主键,通过它可以强制表的实体完整性。 2、主键和索引的关系与区别 主键一定是唯一性索引,唯一性索引并不一定就是主键。 一个表中可以有多个唯一性索引,但只能有一个主键。 主键列不允许空值,而唯一性索引列允许空值。 主键和索引都是键,不过主键是逻辑键,索引是物理键,意思就是 主键不实际存在,而索引实际存在数据库中 3、 MyISAM与Innodb MySQL有多种存储引擎,每种存储引擎有各自的优缺点,比较常用的是 MyISAM 与 Innodb: Innodb 支持事务,支持外键;MyISAM 都不支持。 MyISAM 适合查询以及插入为主的应用,其索引和数据是分开的,而且其索引是压缩的,可以更好地利用内存。所以它的查询性能明显优于INNODB。压缩后的索引也能节约一些磁盘空间。 InnoDB 事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定和外键。MySQL 5.5.5 之后,InnoDB 作为默认存储引擎。 4、辅助索引、聚集索引与非聚集索引 索引是关系型数据库中给数据库表中一列或多列的值排序后的存储结构,数据库的主流索引结构有 B+ 树以及 Hash 结构,B