MySql使用中的注意点(一)

这篇文章主要针对以前从事企业级应用开发的同学,因为企业级的应用,特别是金融企业通常选用Oracle或者DB2作为数据库。

与上述要花费大价钱的数据库软件相比,免费的MySql还是有一些局限性,以及一些MySql自身的特点要留心、注意。

1.在创建外键时,MySql仅支持数字类型的外键。

这点真的比较恶心,因为表的主键设计既可以有物理主键,同时也可以有逻辑主键。而逻辑主键通常并非仅是数字,可能包含业务说明的英文字母,那这样的逻辑主键是无法被设置为外键的。

但是如果选用物理主键作为外键,那么在做数据迁移时,特别是将测试环境的数据导入到生产环境中时,必须特别留心要保持数据之间关联关系。

那么要么把测试数据库中的主键值一起带入到生产数据库中,要么手动修改数据间关联。后者容易照成错误,而前者会破坏数据库主键连续的物理特性,

更坏的情况是,测试数据库中的主键在生产数据库中已经存在,而不得不使用再手动修改数据间关联的办法。

所以现在我们的数据库没有建立外键关联,虽然这是一柄双刃剑,但是多少会破坏数据库的完整性设计。

2.同一张表内设置默认当前时间的Timestamp类型的字段只能有一个。

例如,通常我们在建立一张表时,即有update_time,也有create_time。我们可能希望这两个字段的默认值都是当前时间,这样在业务程序中可以简化一些代码处理。

但是不幸的是,同一张表中只能有一个字段被DEFAULT CURRENT_TIMESTAMP修饰。

3.MySql的Timestamp类型的精度仅到秒。

这点也没什么好说的,如果业务需求一定要精确到毫秒,那么就保存long型的数字吧。

4.创建视图的where条件不能包含子查询。

例如:create view invalidView select * from A a where a.xxx = (select b.xxx from B b where ...)

即使上述语句去除前面create view invalidView部分可以正常运行,但是创建视图时会被禁止。

一种解决方案是将子查询变为表连接,另外一种方法是将子查询的逻辑提到字段的部分,即select和from中间。

5.没有对子查询进行算法优化。

例如:select * from A a where a.xxx = (select b.xxx from B b where ...)

上述语句当在Oracle中之间,后面的子查询只会被执行一次,但是在MySql中会被执行n次,n为A表中的数据量。

所以应该禁止子查询的使用。

解决办法首先是应该将子查询变为表连接的查询,如果不行,那么请将上述查询分拆为两次查询。

时间: 2024-08-24 13:20:50

MySql使用中的注意点(一)的相关文章

Mysql使用中的一些记录

1.Mysql系统时间自动获取: 列类型         显示格式 TIMESTAMP(14)  YYYYMMDDHHMMSS TIMESTAMP(12)  YYMMDDHHMMSS TIMESTAMP(10)  YYMMDDHHMM TIMESTAMP(8)   YYYYMMDD TIMESTAMP(6)   YYMMDD TIMESTAMP(4)   YYMM TIMESTAMP(2)   YY 它会自动地用当前的日期和时间标记你的INSERT或UPDATE的操作.如果一张表中有多个TIME

mysql使用中遇到的问题

问题一: 第一次mysql启动服务失败,未返回报错信息 解决方法: 执行mysqld -console命令,查看error信息,对症下药 但一般情况下,主要是因为mysql目录下的data文件夹中内容不正确,解决方法有以下两个 1.在开启服务前执行初始化命令 mysqld --initalize 然后启动服务 2.下载5.6或之前版本的mysql压缩包 将压缩包解压后里面的data文件夹复制到当前mysql所在文件夹根目录中 然后启动服务 无论是第一个操作还是第二个操作,记得先关掉服务在操作,操

关于Mysql Enterprise Audit plugin的使用

正如之前看到的一篇文章,假设想要知道是谁登陆了你的数据库server,干了什么东西,那么你须要使用Mysql Enterprise Audit plugin. 以下介绍一下Mysql Enterprise Audit plugin.的用法: 方法一: 1.在你的MySQL安装文件夹里找到audit_log.so.我的是在/usr/lib/mysql/plugin/文件夹下. 2.将plugin-load=audit_log.so增加你的my.cnf文件里,使MySQL在启动的时候启动审计日志功能

如何成为MySQL DBA

互联网高速发展的成功,得益于MySQL数据库的给力支持.MySQL本身发展的速度较快,性能方面提升显著,让传统企业也有想法使用MySQL提供服务.目前看来MySQL DBA的缺口非常大.所以欢迎加入到MySQL DBA的团队中来. 有同学一提到MySQL DBA或是DBA都把高难度入门联系到一块.我从事MySQL DBA差不多10几年了,在这里我也给大家讲述一下怎么成为一名MySQL DBA, 少走湾路,快速成为MySQL DBA. 首先MySQL大多是跑在Linux环境上的,所以我们需要学习一

Django笔记 —— MySQL安装

最近在学习Django,打算玩玩网页后台方面的东西,因为一直很好奇但却没怎么接触过.Django对我来说是一个全新的内容,思路想来也是全新的,或许并不能写得很明白,所以大家就凑合着看吧- 本篇笔记(其实我的所有笔记都是),并不会过于详细的讲解.因此如果有大家看不明白的地方,欢迎在我正版博客下留言,有时间的时候我很愿意来这里与大家探讨问题.(当然,不能是简简单单就可以百度到的问题-.-) 我所选用的教材是<The Django Book 2.0>,本节是我自己插入的数据库安装步骤,针对不大了解数

MySQL 和 Oracle 在 MyBatis 使用中的区别

MySQL 和 Oracle 在 MyBatis 使用中的区别: 区别 MySQL Oracle 存储过程的参数模式 mode 为 IN 时,是否需要指定 jdbcType 不需要:MyBatis 为 IN 模式提供了默认的 jdbcType,没有为 OUT 模式提供 如果入参存在 null 的情况,需要 存储过程的参数模式 mode 为 OUT 时,是否需要指定 jdbcType 需要 需要 是否支持游标参数 不支持 支持 原文地址:https://www.cnblogs.com/cag205

mysql,mybatis使用中遇到的类型转化的问题

产生原因还没有明白,先记录一下. 使用DATEDIFF函数,计算两个日期的时间差.在mybatis中,resultType 是map.在代码中,根据map的key取值的时候. 在mysql 5.5.39  中,得到的类型是Integer 在mysql 5.6.11 中,得到的类型是Long 目前解决方案是map取出的值,统一转化成string.在根据需要转化.产生原因目前还不清楚.先记录一下

xampp使用中mysql端口被占用问题的解决方案

如果在安装XAMPP前本机已经安装了mysql,并且添加了Windows服务中 使用xampp时,两个Mysql在Windows服务中有冲突 这意味着你之前在电脑上使用过mysql,路径.端口都被占用过了. 这种情况下XAMPP中的mysql自然是不能正常启动的, 会出现这样的提示信息 首先,尝试改变XAMPP Mysql 和Control Panel settings 的config里的端口值,依然报错 现在尝试提示信息的第二种方法(如果你以前装的不想再用的话),这个修改方法在百度经验就有不错

mysql优化-mysql最大连接数

########################### 修改mysql最大连接数 ############################### MYSQL数据库安装完成后,默认最大连接数是100, 一般生产环境的论坛或网站是远远不够的,以下提供两种修改MYSQL最大连接数的方法 ---------------------- 方法1:在线修改mysql最大连接数 --------------------------- 特点:对于mysql在使用中无法停机重启的情况,可以在mysql运行情况下修改