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主线程在很短的时间内得到非常多的连接请求,该参数就起作用,之后主线程花些时间(尽管很 ...
随机推荐
- jQuery元宵猜灯谜特效(元宵十五日猜一个字)
在线体验:http://keleyi.com/keleyi/phtml/jqtexiao/35.htm jQuery元宵猜灯谜特效的HTML代码如下: <!DOCTYPE html> &l ...
- 移动web之用CSS样式写如苹果手机的开关键
话说这个问题纠结了近一个小时,为什么呢?看看就知道了. 在公司的商旅Web移动版本项目上有这么一个交互,需要模仿iphone自带的开关,好吧,肯定没什么问题. Tip:请使用Chrome查看以下案例 ...
- ERP入门
为什么想起写这个题目哪?其实这个问题很久就想写了,记得2005年时候,公司新招的二位刚毕业的大学生,一个专业是经济管理,一个是会计,东北大区培训后公司让我选择了一位带一带,我选择了一个会计专业的(因为 ...
- statusbarhidden stuff 状态栏的各种特性
plist 文件中的View controller-based status bar appearance 设置的是 在viewcontroller 中 对状态栏进行修改是否起作用. 设置状态栏隐藏和 ...
- compileDebugJavaWithJavac
学习笔记 compileDebugJavaWithJavac,缺少插件,在module app gradle文件最上面添加一段 apply plugin: 'me.tatarka.retrolambd ...
- iOS 用 SDWebImage 清理图片缓存
效果图如下: 1.找到 SDWebImage找到SDImageCache类 2.添加如下方法 - (float)checkTmpSize { ; NSDirectoryEnumerator *file ...
- 关于UIScollView 中的contentOffset 的理解
大家对UIScollView 中的contentOffset 一直有疑问, 虽然看是一个简单的问题, 实际上并不简单. 当时我也有好多疑问, 后来在网上找了一下资料, 发现没有找到合理的解释, 因此自 ...
- 开始使用 UIAlertController 吧
UIAlertView 与 UIActionSheet UIAlertView 样式 实现 - (void)showAlertView { self.alertView = [[UIAlertView ...
- Ajax.ActionLink参数详解
该语法会生成一个a标签,点击a标签会执行一个Ajax请求. 有12个方法重载,下面详解方法中的各项参数: 参数一:linkText string类型 说明:链接显示的文字内容 参数二:actionNa ...
- [转载]java之yield(),sleep(),wait()区别详解
原文地址:http://dylanxu.iteye.com/blog/1322066 1.sleep() 使当前线程(即调用该方法的线程)暂停执行一段时间,让其他线程有机会继续执行,但它并不释放对象锁 ...