1. 用Homebrew进行安装

brew install mysql

一直等到出现

We've installed your MySQL database without a root password. To secure it run:

mysql_secure_installation

MySQL is configured to only allow connections from localhost by default

To connect run:

mysql -uroot

To have launchd start mysql now and restart at login:

brew services start mysql

Or, if you don't want/need a background service you can just run:

mysql.server start

安装成功.

2. 对数据库进行初始化配置

启动服务

mysql.server start

初始化配置

mysql_secure_installation

根据提示进行数据库的配置

是否需要配置密码

Press y|Y for Yes, any other key for No: // 选择Y则需要配置8位数的密码

输入Y以后, 可以看到提示

LOW Length >= 8 // 长度大于等于8就可以

MEDIUM Length >= 8, numeric, mixed case, and special characters // 长度大于8数字、混合大小写和特殊字符

STRONG Length >= 8, numeric, mixed case, special characters and dictionary // 长度>= 8,数字,混合大小写,特殊字符和字典

file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG:

这里根据你的要求输入0 , 1 , 2就可以

然后会提示你输入密码

Please set the password for root here.

New password:

然后确认密码:

Re-enter new password:

如果密码输入的不符合要求, 会这样提示

Estimated strength of the password: 25

Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : Y

... Failed! Error: Your password does not satisfy the current policy requirements

当密码设置成功以后

是否移除不用密码的那个账户

Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : Y

By default, a MySQL installation has an anonymous user,

allowing anyone to log into MySQL without having to have

a user account created for them. This is intended only for

testing, and to make the installation go a bit smoother.

You should remove them before moving into a production

environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : // 是否移除不用密码的那个账户

输入

Y

是否禁止远程登录

Normally, root should only be allowed to connect from

'localhost'. This ensures that someone cannot guess at

the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : // 是否禁止远程登录

输入

N

是否删除test库

By default, MySQL comes with a database named 'test' that

anyone can access. This is also intended only for testing,

and should be removed before moving into a production

environment.

Remove test database and access to it? (Press y|Y for Yes, any other key for No) : // 是否删除test库

输入

Y

是否重新加载

Reloading the privilege tables will ensure that all changes

made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : // 是否重新加载

输入

Y

回车以后就可以看到

All done!

登录数据库

mysql -uroot -p

输入刚刚的密码, 就能够登录上现在的数据库了.

数据库服务

启动:brew services start mysql

停止:brew services stop mysql

数据库设计规范

数据库命名规范

所有数据库对象名称必须使用小写字母并用下划线分割

所有数据库名称禁止使用MySQL保留关键字

数据库对象的命名要做到见名知义, 并且不要超过32个字符

临时库表必须以temp为前缀, 并且以日期为后缀

备份库, 备份表必须以bak为前缀并以日期为后缀

所有存储想同数据的列名和列类型必须一致

数据库基本设计类型

所有表必须使用InnoDB存储引擎

mysql5.6版本以后InnoDB为默认引擎

支持事务, 行级锁, 更好的恢复性, 高并发下性能更好

数据库和表的字符集统一使用UTF8, 如果存储表情, 需要UTF8的扩展

可以避免字符集的乱码问题

所有的表和字段都需要添加注释

防止数据库字典的维护, 防止人员流失导致不知是啥

尽量控制单表数据量的大小, 建议控制在500万以内

500万并不是MySQL数据库的限制, MySQL并为对大小做限制

谨慎的使用MySQL分区表

分区表在物理上表现为多个文件, 在逻辑上表现为1个表, 查询效率会降低

建议使用物理分表

尽量做到冷热数据分离, 减小表的宽度

减少磁盘IO, 保证热数据的内存缓存命中率

利用更有效的利用缓存, 避免读入无用的冷数据

MySQL最多4096列

禁止预留字段

禁止在数据库中存储图片/文件等二进制文件

禁止在线上数据库做压力测试

禁止从开发/测试环境直接连接线上数据库

索引设计规范

限制单张表上的索引数量, 单张表索引不超过5个

索引可以提高效率, 同事降低插入效率

禁止给表中的每一列都建立单独的索引

每个InnoDB表必须有一个主键

如果没有主键, 那么会以第一个非空字段为主键

不能使用更新频繁的列作为主键, 不使用多列主键

不使用UUID, MD5, HASH, 字符串列为主键

主键建议使用自增ID值

常见索引列建议

在SELECT, UPDATE, DELETE等语句的WHERE从句中的列作为索引

包含在ORDER BY, GROUP BY, DISTINCT中的字段

多表JOIN的关联列

一般建立一个联合索引, 效率更高

如何使用索引列的顺序(MySQL从左到右)

区分度最高的列放在联合索引在最左侧

尽量把字段长度小的列放在联合索引的最左侧

使用最频繁的列放到联合索引的左侧

避免建立冗余索引和重复索引, 主键就是一个唯一, 非空的索引

对于频繁的查询优先考虑使用覆盖索引

覆盖索引: 就是包含了所有查询字段的索引

避免了InnoDB表进行索引的二次查找

可以把随机IO变为顺序IO加快查询效率

避免使用外键

降低写的性能

建议在业务端实现

数据库字段设计规范

优先选择符合存储需要的最小的数据类型

尽量将字符串转化为数字类型存储, 比如IP地址, 使用INET_ATON将字符串转成整型, 使用INET_NTOA将整型转化为字符串

对于非负数据采用无符号整型进行存储

VARCHAR(N)中N代表的是字符数, 而不是字节数, 使用UTF8存储汉字VARCHAR(255)=765个字节

过大的长度会消耗更多的内存

避免使用TEXT, BLOB数据类型

避免使用ENUM数据类型

尽量把所有的列定义为NOT NULL

索引NULL列需要额外空间来保存

进行比较和计算时, NULL需要额外处理

禁止使用使用字符串存储日期

使用TIMESTAMP(4个字节)或DATETIME(8个字节)类型

财务相关的必须使用Decimal类型

数据库SQL开发规范

建议使用预编译语句进行数据库操作, 防止sql注入等问题

避免数据类型的隐士转换

隐士转换会导致索引失效

充分使用表上已经存在的索引, 避免使用双%号的查询条件

程序连接不同的数据库使用不同的账号, 禁止跨库查询

禁止使用SELECT *来查询

消耗更多的CPUI和IO以及网络带宽资源

无法使用覆盖索引

可减少表结构变更带来的影响

禁止使用不含字段列表的INSERT语句

禁止使用子查询, 可以把子查询优化为join操作

避免使用JOIN关联太多的表

MySQL最多允许关联61个表, 建议不超过5个

减少同数据库的交互操作

数据库更适合处理批量操作

禁止使用order by rand()进行随机排序

会把表中符合条件的数据装在到内存中进行排序

会消耗大量的CPU和IO以及内存资源

建议在程序中获取一个随机值, 然后从数据库中获取数据的方式

WHERE从句中禁止对列进行函数转换和计算

拆分复杂的大SQL为多个小SQL

MySQL一个SQL只能使用一个CPU进行计算

SQL拆分后可以提高效率

mysql之数据库设计规范_MySql与数据库设计规范相关推荐

  1. mysql用户数据导入_mysql创建数据库、用户及导入数据_mysql数据库教程

    怎样mysql创建数据库.用户及导入数据 1. 修改MYSQL服务器字符集为utf8: 1.1 当前MYSQL服务器字符集设置 SHOW VARIABLES LIKE 'character_set_% ...

  2. mysql导入数据报错_MySQL导入数据库时报错,MySQL server has go away

    MySQL server has gone away意思就是数据库挂了这个是因为导入数据导致mysql挂了,那么碰到数据库导入数据挂了要如何处理,下面来看看处理办法. 用mysqldump命令导出My ...

  3. mysql查询数据库结构_mysql查询数据库下的表结构

    mysql查询数据库下的表结构 方法:1.使用DESCRIBE命令以表格的形式展示表结构,语法"DESCRIBE 表名;":2.使用"SHOW CREATE TABLE& ...

  4. mysql checking permissions 优化_MySQL 之数据库优化

    不管对于哪种服务,对于其优化,无非是从两个方面着手,第一个是对于硬件方面的优化,第二个是对系统以及服务本身的优化. 1.查询连接MySQL服务器的次数 mysql> show status li ...

  5. mysql表设计讲解_MySQL中数据库的设计归纳讲解

    谈到MySQL中数据库的设计,相信大家都知道这是实现实际业务的重要一步,因此对于Java学习者来说,深入了解和学习数据库的设计是十分有必要的.本文为大家准备了一份MySQL中数据库的设计归纳讲解,内容 ...

  6. mysql 跨库复制_Mysql跨数据库(在同一IP地址中)复制表

    数据库表间数据复制分类 在利用数据库开发时,常常会将一些表之间的数据互相导入.当然可以编写程序实现,但是,程序常常需要开发环境,不方便.最方便是利用sql语言直接导入.既方便而修改也简单.以下就是导入 ...

  7. mysql 附加数据库文件_mysql附加数据库文件

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  8. mysql sql实现原理_Mysql的数据库原理

    首先要了解原理.不得不说说.mysql的执行流程. Mysql是一个单进程的服务,对于每一个请求都是用线程来相应的.这就需要一个连接器来处理新用户的请求.相应,以及销毁. 1.客户端请求,服务端(连接 ...

  9. MySQL配置日志服务器_mysql配置数据库日志

    mysql配置数据库日志 云服务器(Elastic Compute Service,简称ECS)是阿里云提供的性能卓越.稳定可靠.弹性扩展的IaaS(Infrastructure as a Servi ...

最新文章

  1. pip安装提示PermissionError: [WinError 5]错误问题解决
  2. 【Python CheckiO 题解】The Most Wanted Letter
  3. ubuntu 报错E: Unable To Locate Package Software-properties-common
  4. js_DOM读写节点
  5. 在Windows Server 2008 R2(64位)上安装SharePoint 2007出现的一个错误的解决方法
  6. 0基础学python要多久-零基础零经验自学Python,到精通Python要多久啊?
  7. zookeeper学习(二)之java客户端API建立连接
  8. [记录] Ubuntu 配置Apache虚拟站点
  9. EtherCAT运动控制卡开发教程之Qt(上):开发环境配置与简单运动控制应用
  10. ubuntu16.04安装、编译LSD-SLAM遇到错误及解决
  11. linux误删文件后恢复
  12. python解密m3u8没有声音_ts文件解密+python脚本m3u8下载
  13. 如何在Ubuntu 14.04中读取MOBI文件
  14. 新浪微博2012校招笔试题
  15. alpine的介绍与使用
  16. break语句的题目
  17. 边工作边学习的现实选择
  18. 分答项目_知识点:如何获取jquery选择器生成的input元素数组中的每个input元素的值?
  19. DSP2833x_Device.h头文件中关于extern cregister volatile unsigned int IFR的解释
  20. 【已解决】 com.rabbitmq.client.ShutdownSignalException: connection error; protocol meth

热门文章

  1. MES:为ERP和生产管控架一座桥(转)
  2. mysql-面试题,包含建库、建表、数据及题目和参考答案分享
  3. [转载]华为老员工看华为(二):如何找到国际化人才
  4. oracle实验总结报告,oracle实验报告总结.doc
  5. 本地配置hosts文件
  6. Gem pooling、max pooling、average pooling
  7. 输变电设备物联网传感器数据通信规约_物联网大潮来袭,无线通讯模块如何连接未来?...
  8. JAVA文件读取和写入(内附简单的代码实现)
  9. android+源码usb驱动,安卓打印驱动最全驱动源码库(usbSerialForAndroid)
  10. 鸟哥的 Linux 私房菜学习总结(超赞!!!)