首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【MySQL】我这样分析MySQL中的事务,面试官对我刮目相看!!

一个是:什么是事务,也就是让你说说事务的基本概念;另一个是:并发事务会带来哪些问题。 实则不然,听到面试官这样问,你不要随意回答。要用极短的时间思考一下,面试官究竟想要得到什么答案。...就只是让你简单的说说事务的基本概念吗?基本概念相信是个学过数据库的小学生都会,面试官为什么会问你这个问题呢?此时,你需要揣测面试官的心理。...知道问题,不知道如何解决问题,这样的面试者面试官能要吗?究其本质,面试官是想问你并发事务会带来哪些问题,有哪些解决方案能够解决这些问题!这才是面试官想要的答案!...脏读问题 一个事务正在对一条记录做修改,在这个事务完成并提交前,这条记录的数据就处于不一致状态;这时,另一个事务也来读取同一条记录,如果不加控制,第二个事务读取了这些“脏”数据,并据此做进一步的处理,就会产生未提交的数据依赖关系...默认的事务隔离级别是可重复读,用Spring开发程序时,如果不设置隔离级别默认用Mysql设置的隔离级别,如果Spring设置了就用已经设置的隔离级别

42840

mysql存储手机号为什么不用bigint?

因此,为什么不使用bigint存储手机号呢? 手机号一般是要加索引的吧。。bigint你用了like索引就失效了 1.首先,手机号的本质是字符串而不是数字,只是恰巧长得像数字而已。...4.在32位的某些应用中,bigint太大,会溢出,要进行各种转换,很麻烦。 5.手机号可能有-(座机),用int存不了。...,交给数字类型比较好,所有才会有这样的想法,int对比varchar总该有性能提升吧;当然这样做,也有局限性: 实现起来变麻烦了,不过对于13亿数据量来说本身就应该分表了,一张表200w数据后就可能操作起来显著变慢...开头,那就麻烦啦;当然按照人口发展规律,可能性不大;但是另一个恐怖的念头展现在我脑海中了,那就是物联网,如果要给每个接入物联网的设备一个唯一号码呢?...那int实现的扩展性将是致命的; 分析下来,int或许有些许性能优势,但其带来的复杂度和扩展上的劣势让我根本都不必动手,就打消了念头了;唉,也许这就是为什么大多数公司选择varchar存储手机号的原因吧

3.5K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    粗聊Mysql——你会建库建表么?

    本文中说到的“建”,并非单纯的建一个库,或是建一张表,而是你建好的库和表在项目的运营中,是否能应付各种事件,下面我说说几个我在项目中遇到的问题以及处理的方法,算是一个小小的心得,给大家分享下。...比如现在有2张表,一张新闻栏目表,一张新闻表,现在两张表需要进行关联,我想大多数人的做法肯定是在新闻表里建一个新闻栏目id,然后把新闻栏目表里的主键ID(自增)写到这个字段里,通过这样进行两表关联。   ...如果你是这样做的,赶紧改掉这个习惯吧。也许你会问为什么,栏目id是主键啊,又是自增的,为什么这样操作不行?...至于性能,我本地测了下基本上没差异,网上也有人做了10W条数据的测试——《实测MYSQL UUID性能》。...还有就是,如果你是做cms这种通用后台,更别把字段限制得太“死”,因为你无法预料之后的每个项目的需求,所以还是把varchar设大一点,我现在是统一都设为255,如果很有可能会超过255的字段,比如URL

    5.2K10

    导入数据库时报错1067 – Invalid default value for ‘field’

    最近在优化yii主题时,修改了一个yii主题中新增的数据库字段名称,在更新数据库时,mysql报了1067-Invalid default value for 'comment_date'这样的错误,当时执行的是下面这条语句...,comment_date这个字段的默认值是无效的,这个问题有些令我不解(我的疑问:WordPress能建表成功,为什么会出现默认值无效的情况呢),后来突然想起我在yii主题成形的时候,对运行环境进行过一次升级...,PHP从5.6升级到了7.2,Apache从2.2升级到了2.4,MySQL从5.6升级到了5.7,会不会是因为MySQL升级导致的呢(因为MySQL的升级没有进行数据的重新导入,而是沿用了5.6的数据文件...如果是MySQL升级导致的问题,那么是什么原因呢,错误报告的是默认值无效,也就是说默认值是被限制的,那么先检查一下表结构: mysql> DESC wp_comments; +-------------...解决方案: 临时方案: 将NO_ZERO_IN_DATE,NO_ZERO_DATE这两个选项从sql_mode中暂时移除。

    1.1K40

    表设计的18条军规

    大家好,我是苏三,又跟大家见面了。前言对于后端开发同学来说,访问数据库,是代码中必不可少的一个环节。系统中收集到用户的核心数据,为了安全性,我们一般会存储到数据库,比如:mysql,oracle等。...如果是商品相关的业务表,可以在表名前面加个前缀:product_。例如:product_spu,product_sku等。这样做的好处是为了方便归类,把相同业务的表,可以非常快速的聚集到一起。...所以bigint(4),这里的4表示显示的长度为4个字节,实际长度还是占8个字节。4.字段个数我们在建表的时候,一定要对字段个数做一些限制。...不过我也见过,有些一对一的表关系,比如:用户表和用户扩展表,在保存数据时是一对一的关系。这样,用户扩展表的主键,可以直接保存用户表的主键。...这样调整之后,后面只需要查询订单表,即可查询出我们所需要的数据。不过冗余字段的方案,有利也有弊。对查询性能有利。但需要额外的存储空间,还可能会有数据不一致的情况,比如用户名称修改了。

    28620

    纯分享:将MySql的建表DDL转为PostgreSql的DDL.md

    该数据库我倒是想吐槽吐槽,它是基于Postgre 9.x的基础上改的,至于改了啥,我也没去详细了解,当初的数据库POC测试和后续的选型没太参与,但对于我一个开发人员的角度来说,它给我带来的不便主要是客户端...客户端GUI这块,pg的客户端软件目前知道几个: navicat,公司没采购正版,用不了,替代软件是开源的dbeaver pgAdmin,pg官方客户端,结果不知道这个国产化过程中改了啥,用pgAdmin...连上就各种报错,放弃 dbeaver,这个倒是可以用,就是我感觉操作太麻烦了,太繁琐 基于以上原因,一直用dbeaver来着,之前两次把mysql项目的表结构换成pg,一次是写了个乱七八糟的代码来做建表语句转换...支持的DDL类型,目前仅限于create table和drop table,目前能满足我个人需求了,反正mysqldump那些导出来的sql结构基本就这样。 暂不支持DML,如insert那些。...mysql中的各种类型查阅 https://dev.mysql.com/doc/refman/8.0/en/data-types.html pg中的各种类型查阅,我看得低版本的,谁让我们的信创数据库是基于

    98730

    使用go-mysql-postgresql实现 MySQL实时同步数据到PG

    MySQL to PG 的数据同步,可以通过canal 或者 bireme 来做,但是操作起来步骤都比较费事。...之前公司的同事,在go-mysql-elasticsearch的基础上,改了一下,将target从es改为了pg,工具名称叫做go-mysql-postgresql 。...【在上面的代码基础上,增加了MySQL分区表联合主键的等功能的支持】 下面是我的配置操作笔记: 1、 在源MySQL上开设同步专用的账号 grant replication slave, replication...vim /var/lib/pgsql/go-mysql-postgresql/master.info  将准备同步的binlog信息写入文件中 bin_name = "mysql-bin.000167"...start.sh 即可 日志大致类似这样的: [2019/08/21 13:02:36] [info] pgclient.go:199 pg delete event execute success!

    5K21

    MySQL建表语句转PostgreSQL建表语句全纪录

    个人习惯用MySQL workbench EER数据建模,然后生成SQL语句到数据库中执行,这样表之间的关系比较直观。 像下面这样: 画图 ? 正向工程,生成DDL语句: ?...前两天接了个新需求,于是我依然使用MySQL workbench EER建模,结果好不容易建模完成了,却被告知这个项目用的数据库是PostgreSQL!...依然用MySQL workbench导出DDL,然后自己将MySQL DDL转换成PostgreSQL DDL。 我选择了自己转换SQL语句。...开源的DDL转换工具 既然要转换SQL语句,我心想,业界肯定有相关的工具啊。...为什么不改进?因为没有时间,工具是为工作服务的,目前能达到我的目的,就没动力修改了,未来有需求再改进吧。

    3.2K20

    大数据实战【千亿级数仓】阶段二

    我希望在最美的年华,做最好的自己! 本篇博客,博主为大家带来的是大数据实战【千亿级数仓】阶段二的内容。 ?...然而,我们本次项目中真正用到的就只有这里面中的10个 ? 现在表全在MySQL中了,我们要做的就是使用Kettle将这10个表同步到Hive中。...确实没错,但这里使用Kettle是为了让我们对kettle的使用更熟练,毕竟Kettle的功能有多强大,相信看过博主前面的介绍kettle博文的朋友都知道。 ?...接下来我们就需要通过Kettle读取MySQL中的数据,输出到各个hive表存储在HDFS的路径下的parquent文件中即可。...组件连接好了之后,让我们来看看如何单独设置每个的内容 首先双击空白处,我们需要设置一个kettle中的参数,方便我们调用,用来做数据分区使用 ?

    48610

    能避开很多坑的mysql面试题,你知道吗?

    15、MySQL数据库cpu飙升到100%的话他怎么处理? 其实要想把这些问题具体的原理原因讲清楚,那每一个问题都可以啰嗦出一篇文章来。所以,在这里我可能不会深入的说明mysql底层的原理。...只会把工作中,我们的经验总结,有可能你会觉得,就是这样的做的,不这么做可能就会掉坑里去。当然,我给的回答可能并非标准答案,毕竟是自己的一些工作总结。各位读者有更好的回答,也欢迎交流!...2038年以后的时间,是无法用timestamp类型存储的。 但是它有一个优势,timestamp类型是带有时区信息的。一旦你系统中的时区发生改变,例如你修改了时区,该字段的值会自动变更。...bigint,也是8个字节,自己维护一个时间戳,查询效率高,不过数据写入,显示都需要做转换。 7:为什么不直接存储图片、音频、视频等大容量内容? 我们在实际应用中,都是文件形式存储的。...Mysql内存临时表不支持TEXT、BLOB这样的大数据类型,如果查询中包含这样的数据,查询效率会非常慢。   2. 数据库特别大,内存占用高,维护也比较麻烦。

    2K20

    spring+mybatis启动NoClassDefFoundError异常分析三部曲之一:稳定重现问题

    ,再结合异常去网上搜索,很快就定位到了问题所在,在mybatis的配置文件中,我们经常做如下配置: <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer...JSSE_OPTS%" 改成 set "JAVA_OPTS=%JAVA_OPTS% %JSSE_OPTS% -Xss160K" 低于160k的话,启动tomcat会失败,提示不能低于160k; 至于为什么调小了这个参数会使应用启动更容易报错...,其实启动报错的更本原因就是栈溢出StackoverFlowError(后面的章节会详细讨论),这里栈越小就越容易报错了; 准备数据库 mybatis相关的应用是和mysql数据库有关的,要建数据库和对应的表...; 准备代码 公司的代码拿来做实验和写博客自然是不太合适的,所以这里我准备了一套简单的demo,一样可以重现问题,demo的源码在git上,地址:git@github.com:zq2599/blog_demos.git...这是个普通的spring+mybatis的web应用,数据库的配置在jdbc.properties文件中,请读者结合自己的mysql配置进行修改; 这个应用可以直接在tomcat上运行起来,数据库准备好

    1.1K50

    2021-01-06:mysql中,我存十亿个手机号码...

    福哥答案2021-01-06: 答案来自此链接: 首先提出假设: 考虑一下这几个问题: 手机号码都是数字吗? 都是中国的手机号码吗? 会按照手机号等值查询吗? 会按照手机号范围查询吗?...考虑三种类型,BigInt,Char,Varchar 这几种类型在 InnoDB 引擎下默认行格式的存储方式为: 1.对于 bigint 类型,如果不为 NULL,则占用8字节,首位为符号位,剩余位存储数字...正是由于这个特性,对于可变长度字段的更新,一般都是将老记录标记为删除,在记录末尾添加新的一条记录填充更新后的记录。这样提高了更新速度,但是增加了存储碎片。...这样查询某个手机号是否存在这种业务就能更快,因为一张表被划分成了很多张小表。并且如果涉及多张小表 MySQL 还可以多线程并发查,效率提升很多。...同时为了提高准确性,可以通过号码号段,不同号段使用不同的布隆过滤器。在插入数据库的同时,放入布隆过滤器中。如果布隆过滤器中检测不存在,则肯定不存在。

    99310

    面试官:MySQL表设计要注意什么?

    各位读者有更好的回答,也欢迎交流! 这里我要说一下,我用mysql只用过innodb存储引擎,其他的引擎真没用过。因此我的回答,都是基于innodb存储引擎中的。...一旦你系统中的时区发生改变,例如你修改了时区 SET TIME_ZONE = "america/new_york"; 你会发现,项目中的该字段的值自己会发生变更。...(4)bigint,也是8个字节,自己维护一个时间戳,表示范围比timestamp大多了,就是要自己维护,不大方便。 问题7:为什么不直接存储图片、音频、视频等大容量内容?...回答:我们在实际应用中,都是用HDFS来存储文件。然后mysql中,只存文件的存放路径。mysql中有两个字段类型被用来设计存放大容量文件,也就是text和blob类型。...主要原因有如下两点 (1)Mysql内存临时表不支持TEXT、BLOB这样的大数据类型,如果查询中包含这样的数据,在排序等操作时,就不能使用内存临时表,必须使用磁盘临时表进行。

    1.6K20

    分布式唯一ID极简教程

    著名的例子就是身份证号码,身份证号码确实是对人唯一的,然而一个人是可以办理多个身份证的,例如你身份证丢了,又重新补办了一张,号码不变。 问题来了,因为系统是按照身份证号码做唯一主键的。...三,为什么要趋势有序 以mysql为例,InnoDB引擎表是基于B+树的索引组织表(IOT);每个表都需要有一个聚集索引(clustered index);所有的行记录都存储在B+树的叶子节点(leaf...这样就可以有效生成集群中的唯一ID,也可以大大降低ID生成数据库操作的负载。 五,UUID 常见的方式。可以利用数据库也可以利用程序生成,一般来说全球唯一。 优点: 1)简单,代码方便。...,未来很难做修改。...七,twitter twitter在把存储系统从MySQL迁移到Cassandra的过程中由于Cassandra没有顺序ID生成机制,于是自己开发了一套全局唯一ID生成服务:Snowflake。

    1.5K70

    短url服务的设计以及实现

    方便做一些统计.你点了链接会有人记录然后分析的. 安全. 不暴露访问参数. 这就是为什么我们现在收到的垃圾短信大多数都是短URL的原因了. 那么短URL是怎么做到的呢?...为了实现长短链接一一对应,我们需要付出很大的空间代价,尤其是为了快速响应,我们可以需要在内存中做一层缓存,这样子太浪费了....批量发号 每一次发号都需要访问一次MySQL来获取当前的最大号码,并且在获取之后更新最大号码,这个压力是比较大的....我们可以每次从数据库获取10000个号码,然后在内存中进行发放,当剩余的号码不足1000时,重新向MySQL请求下10000个号码.在上一批号码发放完了之后,批量进行写入....实现 由于我懒得写JDBC代码,更懒得弄Mybatis,所以代码中使用到MySQL的地方都使用了Redis. package util; import redis.clients.jedis.Jedis

    1.2K20

    宝塔面板用frm和ibd文件恢复Mysql数据

    作者自述: 写这篇文章我是非常不情愿的,我现在是在写这篇文章,但是同时我也在恢复我服务器数据库的数据,出这篇文章也是在我的意料之外,由于我正在这件事类,我就出一版这样的mysql.frm.ibd文件数据恢复教程...修改为独享表空间的方法是在my.ini配置文件中添加/修改此条: Innodb_file_per_table=1 mysql存储的所有数据文件都在data,而我们只有.frm与.ibd 这些在数据库里面可以看见...我这边用的是自己电脑windows下 做的 因为它操作肯定要比服务器方便 当恢复回来后在导回服务器 我们先创建数据库建议数据库名跟生前的数据库名是一样的,比如我的焕奇博客生前数据库名为51huanqi.cn...在mysql安装目录data文件夹下用文本编辑器打开.err文件 找到错误日志 然后删除当前表 新建4个字段的同名表,这里建议大家用可视设计mysql的软件来设置,比如Navicat,这样的话就可以更方便...最主要的是这种样式要跟生前一样`meta_id` bigint,里面的长度小数点主键外键都可以不管 然后再关闭mysql服务 net stop mysql 然后再复制备份的.frm覆盖新建的表.frm

    2.8K40
    领券