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

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. hexo博客进阶-相册和独立域名

    之前我已经写了一篇文章详细的讲述了如何使用hexo搭建github博客.如果还没有看的可以去看看,hexo搭建博客 其实,根据这篇文章的过程我们就能够搭建一个专属于自己,并且非常美观的博客了.但是如果 ...

  2. js(jquery)解决input元素的blur事件和其他非表单元素的click事件冲突的方法

    HTML结构:很简单,就一个input,一个div,能说明问题就OK了: <input type="text" value="默认值"><br ...

  3. Android中的AlertDialog使用示例三(单向选择确定对话框)

    在Android开发中,我们经常会需要在Android界面上弹出一些对话框,比如询问用户或者让用户选择.这些功能我们叫它Android Dialog对话框,AlertDialog实现方法为建造者模式. ...

  4. [css]我要用css画幅画(九) - Apple Logo

    接着之前的[css]我要用css画幅画(八) - Hello Kitty,这次画的是苹果公司的logo 这次打算将分析和实现步骤尽量详细的说一说. 其实之前的也打算详细讲分析和设计过程,不过之前的图比 ...

  5. yii2分页的基本使用及其配置详解

    作者:白狼 出处:http://www.manks.top/yii2_linkpager_pagination.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置 ...

  6. SQL Server 2012 安装图解教程

    在安装微软最新数据库SQL Server 2012之前,编者先确定一下安装环境:Windonws 7 SP1,32位操作系统.CPU是2.1GHz赛扬双核T3500,内存2.93GB 安装SQL Se ...

  7. Tomcat中更改网站根目录

    Tomcat的默认目录是指向webapps下的root目录,输入http://localhost:8080,会打开root目录下的页面.我想让localhost指向我自己的目录.比如webapps/m ...

  8. Postgresql 导出表结构信息

    项目用了Postgresql 数据库,项目组要出表结构的文档,手写太麻烦,想用slq脚本导出一份.查了一番资料,似乎没有多好的方法.dump方式导出的脚本太乱,没法直接写在word文档里.只能自己写s ...

  9. 烂泥:阿里云RDS本地恢复数据

    本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb 公司目前使用的数据库是阿里云的RDS,目前RDS的版本为mysql5.6.如下: 现在要 ...

  10. Linux I/O多路复用

    Linux中一切皆文件,不论是我们存储在磁盘上的字符文件,可执行文件还是我们的接入电脑的I/O设备等都被VFS抽象成了文件,比如标准输入设备默认是键盘,我们在操作标准输入设备的时候,其实操作的是默认打 ...