一、表名 和 数据库名 不要用大小写混合(即驼峰式),应该全部用小写,使用下划线作为连接符。

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配置、使用规范的更多相关文章

  1. Mysql配置信息

    MySQL配置信息 MySQl基本 由MySQL AB公司开发,隶属于Oracle公司 默认端口:3306 超级用户:root MySQL目录结构 两种安装方式 ZIP安装 MSI安装(仅Window ...

  2. linux下安装apache与php;Apache+PHP+MySQL配置攻略

    1.apache   在如下页面下载apache的for Linux 的源码包    http://www.apache.org/dist/httpd/;   存至/home/xx目录,xx是自建文件 ...

  3. MySQL 配置

    MySQL 配置 1.服务启动: (1)使用 service 启动:service mysqld start (2)使用 mysqld 脚本启动:/etc/inint.d/mysqld start ( ...

  4. mysql配置mysql-proxy读写分离

    MySQL配置读写分离 192.168.23.131与192.168.23.132两台服务器,131是主,132是从,131是读写,132是只读.myql-proxy的IP是192.168.23.13 ...

  5. mysql配置之skip-external-locking

    转载:http://www.kuqin.com/database/20120815/328905.html MySQL的配置文件my.cnf中默认存在一行skip-external-locking的参 ...

  6. MySQL配置

    一.登录MySQL 要登录到MySQL只需要使用如下命令. mysql -h localhost -u root -p localhost:IP地址: root:用户名: database:数据库名( ...

  7. hive 的mysql配置

    hive默认使用的是Derby数据库,Derby是一个嵌入式数据库,数据库一般创建在运行hive命令的目录,如果切换目录运行,则找不到数据库 hive mysql配置: 官网地址:https://cw ...

  8. 2016年5月19日php,mysql配置

    1.php配置 1. 配置disable_functiondisable_functions = eval,assert,popen,passthru,escapeshellarg,escapeshe ...

  9. CentOS6.5 MySQL 配置设置总结笔记

    三.登录MySQL 登录MySQL的命令是mysql, mysql 的使用语法如下:  mysql [-u username] [-h host] [-p[password]] [dbname]  u ...

  10. MySql配置参数很全的Mysql配置参数说明

    MySql配置参数 很全的Mysql配置参数说明 1. back_log 指定MySQL可能的连接数量.当MySQL主线程在很短的时间内得到非常多的连接请求,该参数就起作用,之后主线程花些时间(尽管很 ...

随机推荐

  1. HTML5漂亮实用的电子书

    效果体验:http://hovertree.com/texiao/html5/2.htm 点击这里下载 支持多种系统Mac,PC,Android,iPhone,iPad和Windows Phone 支 ...

  2. 【grunt第三弹】grunt在前端实际项目中的应用

    前言 [grunt第二弹]30分钟学会使用grunt打包前端代码(02) [grunt第一弹]30分钟学会使用grunt打包前端代码 经过前两次的学习,我们了解了grunt打包的一些基础知识,对于压缩 ...

  3. php中用foreach改变数组的值的问题

    翻到PHP文档的foreach那页这样写道: “foreach 语法结构提供了遍历数组的简单方式.foreach 仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量,或者未初始化的变量将发出错误 ...

  4. iOS 大文件断点下载

    iOS 在下载大文件的时候,可能会因为网络或者人为等原因,使得下载中断,那么如何能够进行断点下载呢? // resumeData的文件路径 #define XMGResumeDataFile [[NS ...

  5. iOS Block简介

    Block是对象,它封装了一段代码,这段代码可以在任何时候执行.block可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值.它和传统的函数指针很类似,但是有区别:block是inli ...

  6. SharePoint 2013 网站搜索规则的使用示例

    前言 SharePoint 2013搜索中,有一个非常好用的细化搜索结果的功能,就是“查询规则”.可以通过对于某些特定查询时,起到细化显示结果的作用.下面,我们简单的介绍一下该功能的使用和效果. 1. ...

  7. [DOM Event Learning] Section 4 事件分发和DOM事件流

    [DOM Event Learning] Section 4 事件分发和DOM事件流 事件分发机制: event dispatch mechanism. 事件流(event flow)描述了事件对象在 ...

  8. 关于hadoop

    hadoop 是什么? 1. 适合海量数据的分布式存储与计算平台. 海量: 是指 1T 以上数据. 分布式: 任务分配到多态虚拟机上进行计算. 2. 多个任务是怎么被分配到多个虚拟机当中的? 分配是需 ...

  9. sql 截取日期

    截取日期: select to_char( NEW_TIME( sysdate, 'GMT','EST'), 'yyyy-mm')from dual; 或得年或月或日   Year/ month/Da ...

  10. Windows Phone App Studio发布重要更新-支持Windows 8.1 源代码生成

    自2013年8月Apps Team发布Windows Phone App Studio以来,由于其低入门门槛和较好的易用性,用户和项目数量增长迅速,从Windows Phone Developer B ...