MySQL配置、使用规范
一、表名 和 数据库名 不要用大小写混合(即驼峰式),应该全部用小写,使用下划线作为连接符。
Linux中表名默认区分大小写,Windows中默认不区分(全部转为小写),相互间的导入导出会有问题!!
> 修改配置使Linux下MySQL不区分大小写
1、ROOT用户登录,vi /etc/my.cnf
2、找到 [mysqld],在里面加入一行 lower_case_table_names=1
3、重启数据库 service mysqld restart
在Thinkphp中,M('表名')方法,大小写这种形式的表名会自动被转为下划线形式而导致无法读取,只能使用 M() 空方法来操作数据库,会给后面的开发带来诸多不便。
注意1:修改此配置时,会导致原来代码中的大写的数据库名读不了,而且MySQL-Front工具显示小写但打不开数据库,而phpMyAdmin则仍然显示大写名且可以管理,数据库名在此状态下大小写不统一,非常尴尬。所以必须先把数据库中的数据库名和代码中的数据库名全改成小写的,然后再改这个配置项。而MySQL没有直接修改数据库名的功能,只能在网站很低流量的时候(通常是凌晨),新建一个小写的数据库名把所有表都复制过去,再上传修改好的代码。
注意2:修改此配置时,会导致原来的大写的表名读取不了,MySQL-Front中能显示,但打不开表,phpMyAdmin中则没有这个表显示出来。查了一遍资料,原来是这样:为0时(Linux默认),大小写敏感,创建和查询都是区分大小写;为1时,创建表以小写,查询表也是以小写;为2时,创建表区分大小写,查询表以小写。所以对于原来的表名就有大写的数据库,设置这个参数非但不能兼容大小写,而且还会使本来有大写字母的表 无论写的SQL是大写还是小写 都查不出来。所以解决方案是,先截图保存现在的数据库表名,在网站低峰期修改表名为小写,再修改这个配置项,然后重启MySQL。注意修改表名到重启MySQL成功之前这一段时间,代码运行是会报错的。重启MySQL之后,网站就可以正常运行了。而代码中的SQL语句表名比较多而繁杂,可以慢慢改。
二、表格式
数据表一般使用 MyISAM 格式,少数修改非常频繁的数据表(如各种日志)使用 InnoDB 格式,通常使用 utf8_general_ci 编码。
三、写的代码中SQL关键字使用大写作为规范
比如 SELECT sth FROM theorder WHERE swhere ORDER BY id DESC; 这样用大写关键字写可以非常直观地分辨出语句的段落,而使用小写的话则分辨起来比较费神,也容易看错。况且,网上的参考资料也绝大部分是使用大写关键字,突然看到小写的话觉得比较突兀,而大小写混用的话情况会遭。
四、注意SQL的关键字非常多
like(喜欢数,sql关键字为模糊查询),order(订单,sql关键字为排序),等等这些很可能被误用而导致一些SQL语句不能执行。设计时注意规避,包括表名、列名。这里有个SQL关键字列表
五、如何让 MySQL where 查询条件区分大小写:
根本原因:MySQL一般的数据库编码格式都是 utf8,utf8_general_ci。
其中的ci是 case insensitive 的意思,即大小写不敏感!所以,查询的时候所用的条件是不区分大小写的。
比如:
SELECT * FROM member WHERE name='batsing'
会把名为 batsing 和 Batsing 等大小写不一样的都选了出来
解决方案1:在查询语句中的末尾加上 collate utf8_bin,即是指定该条语句区分大小写。但有些会报错,要自己多调试。如 :
SELECT * FROM member WHERE name='batsing' collate utf8_bin
解决方案2:修改数据库类型,可以修改整个数据库,也可以修改单个表,这个要根据自己的项目来决定,改为 utf8_bin 编码格式。
六、服务器上每个网站要用独立的SQL用户
比如 batsing.com 就使用 batsing 用户,设置单独的密码,而且数据库权限为一个数据库,不能操作其它不相关数据库。
如果可以设置多个数据库用户,那么应该分别设置代码使用的MySQL用户和管理使用的MySQL用户。代码使用的数据库用户只有localhost(如果数据库与代码不同服务器则加上指定几个IP),一般只需要分配 数据行的增删改查权限 ,如果代码是需要安装的(开源项目如wordpress,ecshop等)则添加 表的增删改索引权限 ,安装完后再去除表的权限。而管理账号最好设置登录权限为仅本地(phpMyAdmin用)和限定几个IP(用于远程管理)。注意不同的数据库用户账号和密码应该设置不同。下图所示是MySQL-Front的用户权限设置界面>>
如果只有一个数据库用户(虚拟空间),通常都是一个项目用一个空间、一个SQL空间和用户,那么只能从代码方面防SQL注入了。
没什么特别重大的事情不要以 root 用户登录和使用mysql。这些数据库配置只针对服务器,对于本地开发机不一定需要这样,直接用 root 也可以,但开发中也需要注意代码中账号的权限,不建议代码中对 表的结构 有操作。
七、不要在正式项目使用 test数据库以及 test_开头 的数据库
因为这些数据库是开放给所有的数据库用户的。
八、项目开发上线后,不宜对表和字段进行重命名、删除的操作
因为线上可能会出现代码需要回滚旧版的情况,如果修改或删除了表或字段的名字,会导致旧版的代码不能运行,只得又修改数据库。在线上修BUG的紧张时刻,越多操作越容易出错。而只是增加表或字段的话,则回滚旧版代码也不会出现数据库的表与代码的兼容问题,数据库不需要任何修改。
MySQL配置、使用规范的更多相关文章
- Mysql配置信息
MySQL配置信息 MySQl基本 由MySQL AB公司开发,隶属于Oracle公司 默认端口:3306 超级用户:root MySQL目录结构 两种安装方式 ZIP安装 MSI安装(仅Window ...
- linux下安装apache与php;Apache+PHP+MySQL配置攻略
1.apache 在如下页面下载apache的for Linux 的源码包 http://www.apache.org/dist/httpd/; 存至/home/xx目录,xx是自建文件 ...
- MySQL 配置
MySQL 配置 1.服务启动: (1)使用 service 启动:service mysqld start (2)使用 mysqld 脚本启动:/etc/inint.d/mysqld start ( ...
- mysql配置mysql-proxy读写分离
MySQL配置读写分离 192.168.23.131与192.168.23.132两台服务器,131是主,132是从,131是读写,132是只读.myql-proxy的IP是192.168.23.13 ...
- mysql配置之skip-external-locking
转载:http://www.kuqin.com/database/20120815/328905.html MySQL的配置文件my.cnf中默认存在一行skip-external-locking的参 ...
- MySQL配置
一.登录MySQL 要登录到MySQL只需要使用如下命令. mysql -h localhost -u root -p localhost:IP地址: root:用户名: database:数据库名( ...
- hive 的mysql配置
hive默认使用的是Derby数据库,Derby是一个嵌入式数据库,数据库一般创建在运行hive命令的目录,如果切换目录运行,则找不到数据库 hive mysql配置: 官网地址:https://cw ...
- 2016年5月19日php,mysql配置
1.php配置 1. 配置disable_functiondisable_functions = eval,assert,popen,passthru,escapeshellarg,escapeshe ...
- CentOS6.5 MySQL 配置设置总结笔记
三.登录MySQL 登录MySQL的命令是mysql, mysql 的使用语法如下: mysql [-u username] [-h host] [-p[password]] [dbname] u ...
- MySql配置参数很全的Mysql配置参数说明
MySql配置参数 很全的Mysql配置参数说明 1. back_log 指定MySQL可能的连接数量.当MySQL主线程在很短的时间内得到非常多的连接请求,该参数就起作用,之后主线程花些时间(尽管很 ...
随机推荐
- 高性能javascript学习笔记系列(6) -ajax
参考 高性能javascript javascript高级程序设计 ajax基础 ajax技术的核心是XMLHttpRequest对象(XHR),通过XHR我们就可以实现无需刷新页面就能从服务器端读 ...
- Html之 IFrame使用,注意几点
0x01 iframe的跳出框架 0x02 iframe样式设置 0x03 iframe重置高度 1.首先来一个,跳出iframe的好方法,直接可以在Login.aspx页面使用. if (windo ...
- position: fixed用在iframe里面失效了
iframe真是各种坑啊,,,可是找不到别的代替 $(parent.window).scroll(function(){ $('固定元素').css({ top : $(parent.window). ...
- iOS 获取网络状态
在iOS开发者,获取网络状态比较常用 -(NSString *)getNetWorkStates{ UIApplication *app = [UIApplication sharedApplicat ...
- AngularJS 参考手册
AngularJS 参考手册 AngularJS 指令 本教程用到的 AngularJS 指令 : 指令 描述 ng-app 定义应用程序的根元素. ng-bind 绑定 HTML 元素到应用程序数据 ...
- SharePoint 2013 配置Excel Services
前言:本文主要介绍如何启用SharePoint 2013版本Excel Services服务,并配置Excel Web Access部件,使Excel文档可以显示在Web页面中. 简单说一下流程,Sh ...
- Linux常用命令:文件与目录
目录与路径 cd:切换目录 例如:cd ~willhua,则回到用户willhua的主文件夹 cd ~或者cd,则表示回到自己的的主文件夹 cd -,则表示回到上个目录 pwd:显示目前所在目录 ...
- Xcode 创建.a和framework静态库(转载)
库介绍 库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行.库分静态库和动态库两种. iOS中的静态库有 .a 和 .framework两种形式:动态库有.dylib 和 .framew ...
- ant+findbugs 扫描代码生成报告
1. 下载安装ant.findbugs 下载ant.findbugs最新压缩包解压到本地磁盘合适位置,比如: D:\Program Files\apache-ant-1.9.7 D:\Program ...
- 对象映射工具AutoMapper介绍
AutoMapper是用来解决对象之间映射转换的类库.对于我们开发人员来说,写对象之间互相转换的代码是一件极其浪费生命的事情,AutoMapper能够帮助我们节省不少时间. 一. AutoMapper ...