精华内容
下载资源
问答
  • 创建数据库的语句是:【CREATE DATABASE [IF NOT EXISTS] [[DEFAULT] CHARACTER SET ] [[DEFAULT] COLLATE ];】。本文操作环境:windows10系统、mysql 5.7、thinkpad t480电脑。(学习视频分享:mysql视频教程)详细...

    创建数据库的语句是:【CREATE DATABASE [IF NOT EXISTS] [[DEFAULT] CHARACTER SET ] [[DEFAULT] COLLATE ];】。

    419d36f24caa53dd07eb66079d771350.png

    本文操作环境:windows10系统、mysql 5.7、thinkpad t480电脑。

    (学习视频分享:mysql视频教程)

    详细介绍:

    在 MySQL 中,可以使用 CREATE DATABASE 语句创建数据库,语法格式如下:

    [ ]中的内容是可选的。语法说明如下:

    :创建数据库的名称。MySQL 的数据存储区将以目录方式表示 MySQL 数据库,因此数据库名称必须符合操作系统的文件夹命名规则,不能以数字开头,尽量要有实际意义。注意在 MySQL 中不区分大小写。

    IF NOT EXISTS:在创建数据库之前进行判断,只有该数据库目前尚不存在时才能执行操作。此选项可以用来避免数据库已经存在而重复创建的错误。

    [DEFAULT] CHARACTER SET:指定数据库的字符集。指定字符集的目的是为了避免在数据库中存储的数据出现乱码的情况。如果在创建数据库时不指定字符集,那么就使用系统的默认字符集。

    [DEFAULT] COLLATE:指定字符集的默认校对规则。

    举例:

    在 MySQL 中创建一个名为 test_db 的数据库。在 MySQL 命令行客户端输入 SQL 语句CREATE DATABASE test_db;即可创建一个数据库,输入的 SQL 语句与执行结果如下。

    “Query OK, 1 row affected (0.12 sec);”提示中,“Query OK”表示上面的命令执行成功,“1 row affected”表示操作只影响了数据库中一行的记录,“0.12 sec”则记录了操作执行的时间。

    相关推荐:mysql教程

    展开全文
  • 一、基础规范: 1.必须使用InnoDB存储引擎... 解读:utf8mb4是utf8的超集,emoji表情以及部分不常见汉字在utf8下会表现为乱码,故需要升级至utf8mb4。 默认使用这个字符集的原因是:“标准,万国码,无需转码,无...

    一、基础规范:

    1. 必须使用InnoDB存储引擎

       解读:支持事务、行级锁、并发性能更好、CPU及内存缓存页优化使得资源利用率更高

    2. 新库默认使用utf8mb4字符集

       解读:utf8mb4是utf8的超集,emoji表情以及部分不常见汉字在utf8下会表现为乱码,故需要升级至utf8mb4。

                默认使用这个字符集的原因是:“标准,万国码,无需转码,无乱码风险”,并不“节省空间”。

    3. 数据表、数据字段必须加入中文注释

        解读:N年后谁tm知道这个r1,r2,r3字段是干嘛的

    4. 禁止使用存储过程、视图、触发器、Event

        解读:高并发大数据的互联网业务,架构设计思路是“解放数据库CPU,将计算转移到服务层”,并发量大的情况下,这些功能很可能将数据库拖死,

        业务逻辑放到服务层具备更好的扩展性,能够轻易实现“增机器就加性能”。数据库擅长存储与索引,CPU计算还是上移吧

    5. 禁止存储大文件或者大照片 

        解读:为何要让数据库做它不擅长的事情?大文件和照片存储在文件系统,数据库里存URI多好

    6. 禁止使用应用程序配置文件内的帐号手工访问线上数据库

    7. 禁止非DBA对线上数据库进行写操作,修改线上数据需要提交工单,由DBA执行,提交的SQL语句必须经过测试

    8. 分配非DBA以只读帐号,必须通过VPN+跳板机访问授权的从库

    9. 开发、测试、线上环境隔离

    10. 不在数据库做计算,cpu计算务必移至业务层

    11. 平衡范式与冗余,为提高效率可以牺牲范式设计,冗余数据 

    12. 拒绝3B(big),大sql,大事务,大批量

     

    二、命名规范

    1. 只允许使用内网域名,而不是ip连接数据库

       解读:使用域名,在切换数据库服务器的时候,只需要改DNS域名解析,不需要改配置文件。达到一处更改,多处生效的效果。

       不只是数据库,缓存(memcache、redis)的连接,服务(service)的连接都必须使用内网域名,机器迁移/平滑升级/运维管理…太多太多的好处,

       如果朋友你还是采用ip直连的,赶紧升级到内网域名吧。

    2. 线上环境、开发环境、测试环境数据库内网域名遵循命名规范

       业务名称:xxx

       线上环境:dj.xxx.db

       开发环境:dj.xxx.rdb     (r 是research, rd 是 research and development 的简称)

       测试环境:dj.xxx.tdb

       从库在名称后加-s标识,备库在名称后加-ss标识 (从库,secondary database)

       线上从库:dj.xxx-s.db

       线上备库:dj.xxx-sss.db

    3. 库名、表名、字段名:小写,下划线风格,不超过32个字符,必须见名知意,禁止拼音英文混用

    4. 表名t_xxx,非唯一索引名idx_xxx,唯一索引名uniq_xxx    (idx :索引文件(Index file))

     

    三、表设计规范

    1. 单实例表数目必须小于500

    2. 单表列数目必须小于30

    3. 表必须有主键,例如自增主键

        解读:

        a)主键递增,数据行写入可以提高插入性能,可以避免page分裂,减少表碎片提升空间和内存的使用

        b)主键要选择较短的数据类型, Innodb引擎普通索引都会保存主键的值,较短的数据类型可以有效的减少索引的磁盘空间,提高索引的缓存效率

        c) 无主键的表删除,在row模式的主从架构,会导致备库夯住

    4. 禁止使用外键,如果有外键完整性约束,需要应用程序控制

       解读:外键会导致表与表之间耦合,update与delete操作都会涉及相关联的表,十分影响sql 的性能,甚至会造成死锁。高并发情况下容易造成数据库性能,

       大数据高并发业务场景数据库使用以性能优先

    5. 控制单表数据量,单表记录控制在千万级

     

    四、字段设计规范

    1. 必须把字段定义为NOT NULL并且提供默认值

       解读:

       a)null的列使索引/索引统计/值比较都更加复杂,对MySQL来说更难优化

       b)null 这种类型MySQL内部需要进行特殊处理,增加数据库处理记录的复杂性;同等条件下,表中有较多空字段的时候,数据库的处理性能会降低很多

       c)null值需要更多的存储空,无论是表还是索引中每行中的null的列都需要额外的空间来标识

       d)对null 的处理时候,只能采用is null或is not null,而不能采用=、in、<、<>、!=、not in这些操作符号。如:where name!=’shenjian’,如果存在name

            为null值的记录,查询结果就不会包含name为null值的记录

    2. 禁止使用TEXT、BLOB类型

        解读:会浪费更多的磁盘和内存空间,非必要的大量的大字段查询会淘汰掉热数据,导致内存命中率急剧降低,影响数据库性能

    3. 禁止使用小数存储货币

        解读:使用整数吧,小数容易导致钱对不上

    4. 必须使用varchar(20)存储手机号

       解读:

       a)涉及到区号或者国家代号,可能出现+-()

       b)手机号会去做数学运算么?

       c)varchar可以支持模糊查询,例如:like“138%”

    5. 禁止使用ENUM,可使用TINYINT代替

        解读:

        a)增加新的ENUM值要做DDL操作

        b)ENUM的内部实际存储就是整数,你以为自己定义的是字符串?

    6. 禁止使用小数存储国币

        有朋友问存储前乘以100,取出后除以100是否可行,个人建议“尽量少的使用除法”。

        曾经踩过这样的坑,100元分3天摊销,每天摊销100/3元,结果得到3个33.33。后来实施对账系统,始终有几分钱对不齐,郁闷了很久(不是几分钱

        的事,是业务方质疑的眼神让研发很不爽),最后发现是除法惹的祸。

        解决方案:使用“分”作为单位,这样数据库里就是整数了。

    7. 字段选择类型更小的通常更好:

        解读:更小的数据类型通常更快,因为他们占用更少的磁盘、内存和CPU缓存,并且处理需要的CPU周期也更少。

    8. 简单就好:

        解读:简单的数据类型的操作通常需要更少的CPU周期。例如:整型比字符串操作的代价更低,因为字符集和校对规则(排序规则)是字符串比较比整型比较更复杂。

                 这里有两个例子:一个是应该使用MySQL内建的类型而不是字符串来存储日期和时间,另外一个是应该使用整型存储IP地址。

    9. 因为需要额外的空间和计算开销,所以应该尽量只在对小数进行精确计算时才使用DECIMAL。在数据量比较大的时候,可以考虑使用BIGINT代替DECIMAL,

       将对应的值扩大N倍。

    10. 二进制比较的优势并不仅仅体现在大小写敏感上。MySQL比较BINARY字符串是,每次按一个字节,并且根据该字节的数值进行比较。因此,二进制比字符比较简单

         的多,所以也就更快。

    11. 可以使用BIGINT类型存储微秒级别的时间戳。

    12. 一旦选择了一种类型,要确保在所有关联表中都使用同样的类型。会用不同数据类型可能导致性能问题,即使没有性能影响,在比较操作时隐式类型转换也可能

         导致很难发现错误。

    13. 如果可能,应该避免使用字符串类型作为标识列,因为它们很消耗空间,并且通常比数字类型慢。

    14. 范式(修改多,关联查询少)和反范式(查询多,修改少)的选择

    15. 合理使用缓存表、汇总表、计数器表

     

    五、索引设计规范

    1. 单表索引建议控制在5个以内

    2. 单索引字段数不允许超过5个

       解读:字段超过5个时,实际已经起不到有效过滤数据的作用了

    3. 禁止在更新十分频繁、区分度不高的属性上建立索引

       解读:

       a)更新会变更B+树,更新频繁的字段建立索引会大大降低数据库性能

       b)“性别”这种区分度不大的属性,建立索引是没有什么意义的,不能有效过滤数据,性能与全表扫描类似

    4. 建立组合索引,必须把区分度高的字段放在前面

        解读:能够更加有效的过滤数据

     

    参见:58到家数据库30条军规解读

             再议数据库军规

             mysql笔记01 MySQL架构与历史、Schema与数据类型优化

     

    MyISAM和INNODB的区别:

    1. 事务安全(MyISAM不支持事务,INNODB支持事务)

    2. 外键 MyISAM 不支持外键, INNODB支持外键. 

    3. 锁机制(MyISAM是表锁,innodb是行锁)

    4. 查询和添加速度(MyISAM批量插入速度快)

    5. 支持全文索引(MyISAM支持全文索引,INNODB不支持全文索引)

    6.MyISAM内存空间使用率比InnoDB低

    参见:https://blog.csdn.net/itcats_cn/article/details/82154600

     

    varchar(10) 和 varchar(100) 存储5个字节的数据,是否一样?

    如现在用户需要存储一个地址信息。根据评估,只要使用100个字符就可以了。但是有些数据库管理员会认为,反正Varchar数据类型是根据实际的需要来分配长度的。还不如给其大一点的呢。为此他们可能会为这个字段一次性分配200个字符的存储空间。这VARCHAR(100)与VARCHAR(200)真的相同吗?结果是否定的。虽然他们用来存储90个字符的数据,其存储空间相同。但是对于内存的消耗是不同的。对于VARCHAR数据类型来说,硬盘上的存储空间虽然都是根据实际字符长度来分配存储空间的,但是对于内存来说,则不是。其时使用固定大小的内存块来保存值。简单的说,就是使用字符类型中定义的长度,即200个字符空间。显然,这对于排序或者临时表(这些内容都需要通过内存来实现)作业会产生比较大的不利影响。解释可以参见这里。所以如果某些字段会涉及到文件排序或者基于磁盘的临时表时,分配VARCHAR数据类型时仍然不能够太过于慷慨。还是要评估实际需要的长度,然后选择一个最长的字段来设置字符长度。如果为了考虑冗余,可以留10%左右的字符长度。千万不能认为其为根据实际长度来分配存储空间,而随意的分配长度,或者说干脆使用最大的字符长度。

    1. 虽然用varchar(100)和varchar(10)储存’abc’在硬盘上的大小一样, 但是, 在内存里前者占100个字节, 后者只占10个字节. 对需要排序操作的字段, 不能分配varchar(100000)这样的长度, 而是需要根据业务, 仔细定一个最大值. 

    2. 不能大于最大长度, 例如, varchar(1), 收到’abc’也会报错 

    3. CHAR(1)与VARCHAR(1)两这个定义,会有什么区别呢?虽然这两个都只能够用来保存单个的字符,但是VARCHAR要比CHAR多占用一个存储位置。这主要是因为使用VARCHAR数据类型时,会多用1个字节用来存储长度信息。这个管理上的开销CHAR字符类型是没有的。

    4. 需要经常变化长度的字段使用char(20)比使用varchar(20)好, 这样可以避免碎片和额外的调整工作。char(20)给字符串分配的空间就是20,而varchar分配的不一定是20,如果字符串更改,超过原来的长度,varchar可能需要额外的调整。

       三是从碎片角度进行考虑。使用CHAR字符型时,由于存储空间都是一次性分配的。为此某个字段的内容,其都是存储在一起的。单从这个角度来讲,其不存在碎片的困扰。而可变长度的字符数据类型,其存储的长度是可变的。当其更改前后数据长度不一致时,就不可避免的会出现碎片的问题。故使用可变长度的字符型数据时,数据库管理员要时不时的对碎片进行整理。如执行数据库导出导入作业,来消除碎片。

    参见:https://blog.csdn.net/imzoer/article/details/8435540/ 

               http://tech.it168.com/a2011/0426/1183/000001183173.shtml#articlecomment

     

    转载于:https://www.cnblogs.com/Jtianlin/p/10224094.html

    展开全文
  • 因为时间一长如果名字有不是很规范,你不知道这些字段做什么用的. 2.禁止使用存储过程、视图、触发器、event 因为在高并发量的情况下,我们应该把计算转移到服务层,否则这些功能很可能把数据库拖垮。 3.禁止...

    1.数据库表、字段必须必须加入中文注释

    因为时间一长如果名字有不是很规范,你不知道这些字段做什么用的.

     

    2.禁止使用存储过程、视图、触发器、event

    因为在高并发量的情况下,我们应该把计算转移到服务层,否则这些功能很可能把数据库拖垮。

     

    3.禁止存储大文件和图片

    不能让数据库做它不擅长的事情,大文件和照片都存在文件系统中,数据库存放URL

     

    4.禁止使用外键,如果有外键完整性约束,需要应用程序控制

    外键会导致表与表之间耦合,update和delete操作都会涉及相关联的表,十分影响sql的性能,甚至会造成死锁,高并发情况下容易造成数据库性能下降,高并发场景下数据库使用以性能为主。

     

    5.使用varchar(20)存储手机号

    因为有的国家代号或者区号什么的,会出现+-(),varchar可以支持模糊查询,例如 like "138%"

     

    6.单表索引建议控制在5个以内,单索引字段数不允许超过5个

    字段超过5个时,实习已经起不到有效过滤数据的作用。

     

    7.禁止在更新十分频繁,区别度不高的属性上加索引

    更新会变更B+树,更新频繁的字段建立索引会大大降低数据库性能

    性别这种区分度不大的属性,建立索引是没什么意义的,不能有效过滤数据,性能和全表扫描类似

     

    8.建立组合索引,必须把区分度高的字段放在前面

    能够更加有效的过滤数据

    转载于:https://my.oschina.net/u/4152780/blog/3069844

    展开全文
  • 在Unix(Linux)上,在按照手册的指令安装好MySQL后,你必须运行mysql_install_db脚本建立包含授权表的mysql数据库和初始权限。在Windows上,运行分发中的Setup程序初始化数据目录和mysql数据库。假定服务器也在运行。...

    在Unix(Linux)上,在按照手册的指令安装好MySQL后,你必须运行mysql_install_db脚本建立包含授权

    表的mysql数据库和初始权限。在Windows上,运行分发中的Setup程序初始化数据目录和mysql数据库。假

    定服务器也在运行。

    当你第一次在机器上安装MySQL时,mysql数据库中的授权表是这样初始化的:

    你可以从本地主机(localhost)上以root连接而不指定口令。root用户拥有所有权限(包括管理权限)

    并可做任何事情。(顺便说明,MySQL超级用户与Unix超级用户有相同的名字,他们彼此毫无关系。)

    匿名访问被授予用户可从本地连接名为test和任何名字以test_开始的数据库。匿名用户可对数据库做任

    何事情,但无管理权限。

    从本地主机多服务器的连接是允许的,不管连接的用户使用一个localhost主机名或真实主机名。如:

    % mysql -h localhost test

    % mysql -h pit.snake.net test

    你以root连接MySQL甚至不指定口令的事实只是意味着初始安装不安全,所以作为管理员的你首先要做的

    应该是设置root口令,然后根据你设置口令使用的方法,你也可以告诉服务器重载授权表是它知道这个改

    变。(在服务器启动时,它重载表到内存中而可能不知道你已经修改了它们。)

    对MySQL 3.22和以上版本,你可以用mysqladmin设置口令:

    % mysqladmin -u root password yourpassword

    对于MySQL的任何版本,你可以用mysql程序并直接修改mysql数据库中的user授权表:

    % mysql -u root mysql

    mysql>UPDATE user SET password=PASSWORD("yourpassword") WHERE User="root";

    如果你有MySQL的老版本,使用mysql和UPDATE。

    在你设置完口令后,通过运行下列命令检查你是否需要告诉服务器重载授权表:

    % mysqladmin -u root status

    如果服务器仍然让你以root而不指定口令而连接服务器,重载授权表:

    % mysqladmin -u root reload

    在你设置了root的口令后(并且如果需要重载了授权表),你将需要在任何时候以root连接服务器时指定

    口令

    展开全文
  • 优化数据库的方法有很多,最近在看面试题,总结了一些优化数据库的方法。 优化数据库的方法 1、选取最适用的字段属性 MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就...
  • 分别需要注意什么 对操作系统、存储硬件网络、数据库原理等方面有比较扎实的基础知识,另一方面是需要花大量时间对特定的数据库进行实践测试与总结。 非常了解我们SQL的业务逻辑,我们清楚SQL中访问表及字段的数据...
  • DDL的基础语法及设计工具 DDL的英文全称时Data Definition Language,中文...1.对数据库进行定义 CREATE DATABASE nba; // 创建一个名为nba的数据库 DROP DATABASE nba; // 删除一个名为nba的数据库 2.对数据表进行...
  • 数据表时需要注意什么? 了解 DDL 的基础语法; 使用 DDL 定义数据表时,都有哪些约束性。 使用 DDL 设计数据库时,都有哪些重要的原则。 DDL的基础语法及设计工具 DDL(Data Definition Language)数据定义语言。...
  • 对操作系统、存储硬件网络、数据库原理等方面有比较扎实的基础知识,另一方面是需要花大量时间对特定的数据库进行实践测试与总结。  非常了解我们SQL的业务逻辑,我们清楚SQL中访问表及字段的数据情况,我们其实只...
  • 前几天被电话面试了,问了一些比较实际的问题,其中一个问题关于PHP开发中MySql里存放用户密码需要注意什么,由于没有过大项目经验,一时语塞,回来网上找了找记下来,希望能对其他人有帮助,我也继续学习。...
  • 什么数据库连接池:  用池来管理Connection,这可以重复使用Connection。有了池,所以我们就不用自己来创建Connection,而是通过池来获取Connection对象。  当使用完Connection后,调用Connection的close()...
  • 数据库设计注意事项

    千次阅读 2019-03-30 12:17:40
    1、需求分析: 分析需要存储的数据是哪些,这些数据有哪些属性,这些属性各自的特点是什么 2、逻辑设计: 使用ER图对数据库进行逻辑建模, 3、物理设计: 使用哪款数据库设计建表(oracle,myslq,sqlserver) 4、维...
  • 创建数据库时,需要注意的事项

    千次阅读 2016-05-27 11:40:10
    创建数据库时,需要注意字段不要使用数据库的关键字。 比如enable、name之类的, 因为项目中遇到过使用hibernate的merge方法时,如果enable中的值为空就会出现一直卡住的现象,导致 数据一直未保存到数据库中。占...
  • 2. 注意索引的大小,有一些表可以建成索引组织表 3. 索引的列不要太多,要选择一些selective比较低的列建B-tree索引,选择selective高的列建bitmap索引(在更新比较多的表不不要建bitmap索引) 4. 将selective较低的列...
  • Mysql 数据库表设计 应该注意什么

    千次阅读 2020-07-13 17:00:58
    良好的逻辑设计和物理设计是高性能的基石,在进行设计的时候应该根据系统将要... 适用小而简单的合适数据类型,除非真实数据模型中有确切的需要,否则应该尽可能地避免使用NULL值(详细见 为什么Mysql 尽量使用NULL值?
  • MySQL数据库设计需要注意的点

    千次阅读 2013-02-05 12:14:17
    1.为什么字段尽可能用NOT NULL,而不是NULL Mysql官网文档: “NULL columns require additional space in the row to record whether their values are NULL. For MyISAM tables, each NULL column takes one ...
  • 很多企业在面试过程中会提问MySQL数据库表设计要注意什么,接下来千锋就给大家讲解一下。 MySQL相较于MSSQL SERVER和Oracle,是一款功能强大的小型数据库,能很好的满足千万级数据量的项目需要。注意,...
  • -最近在做一个增加的小功能。遇到一个判断。...因为原来的功能不是你做的,你不知道别人什么时候会改,而且因为那个字段本来的意义就只是为了存放地址,没有人想到会因为改了这个而影响 别的功能。
  • 系统windows 10,MySQL5.7.26.0安装版(mysql数据库版本不做要求,应该都一样,大家普遍认为mysql5最稳定,官方的说法是新版会解决老版的一些问题,大家可以随便下载,我认为核心功能都没变不会对开发者构成什么影响...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,099
精华内容 839
关键字:

数据库需要注意什么