分享好友

×
取消 复制
RP钉子 栈主 2020-04-15 14:48:23
展开
1
RP钉子 栈主 2020-03-06 14:57:29

(1)数据类型: 1)数据类型 1.1 数据类型分类 a) 数值类型 — TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT、 DECIMAL b) 时间类型 — DATE、DATETIME、TIMESTAMP c) 字符串类型 — CHAR、VARCHAR、TEXT d) 特有类型 — ENUM、SET 1.2 特别说明 Ø VARCHAR(N) 或 CHAR(N)中 N 的含义 MySQL 中两类字符串 VARCHAR(N) 或 CHAR(N)定义时候填写的长度 N,不是字节数的意思 ,而是字符数的含义。 Ø 浮点数 同财务有关的浮点数必须使用精确存储的 DECIMAL 数值类型。为减少浮点类型 FLOAT 和DOUBLE 的精度不够而可能造成数值计算存在偏差,故非财务相关的浮点数字段也采用DECIMAL 数值类型存储,禁止使用 FLOAL 和 DOUBLE 类型。例如:weight DECIMAL(10,4) NOT NULL DEFAULT 0。 1.3 1.4 详细说明 1.类似于状态,且有限类别的字段,推荐使用可比较明显表示出实际意义的字符串,而不应该使用 INT 之类的数字来代替,故推荐使用枚举类型 ENUM 和集合类型 SET; 2.使用 UTF8 时,因其是变长的字符集,故固定和动态长度的字符串都应用 VARCHAR; 3.仅仅当字符数量可能超过 20000 个的时候,可以使用 TEXT/MEDIUMTEXT 类型来存放字符类数据。推荐所有使用 TEXT/MEDIUMTEXT 类型的字段和原表进行分拆,与原表主键单独组成另外一个表进行存放; 需要精确时间(年月日时分秒)的字段可以使用 DATETIME 或 TIMESTAMP,但请注意各自能表达的范围,以及是否需要用到 TIMESTAMP 的特性,尽量使用 TIMESTAMP类型替代 DATETIME 以减少数据存储空间的占用;需要毫秒、微妙时,使用TIMESTAMP (3)或 TIMESTAMP (6),以及 DATETIME(3)和 DATETIME(6)(注:社区版 5.6 开始 DATATIME 也支持 CURRENT_TIMESTAMP.,且支持任意数量与组合); 4.所有只需要精确到天的字段全部使用 DATE 类型,而不应该使用 TIMESTAMP 或者DATETIME 类型; 5.自增序列特性的字段只能使用 INT 或者 BIGINT,强烈推荐明确标识为无符号类型(关键词:UNSIGNED),除非确实会出现负数,仅当该字段的数值会超过 42 亿,才使用 BIGINT 类型,并且自增字段必须作为主键或主键的一部分; 6.INT(N)中 N 的含义 7.MySQL 中各类整形也可包含长度,该长度的含义和 Oracle 的 NUMBER 类型的长度含义不同,N 值的大小完全不影响数值的存储范围,只影响有 ZEROFILL 时显示的长度。 空字符串的含义 8.MySQL 中字符串存在三种容易混淆的值:空字符串’’、空值 NULL 和 NULL 字符串’NULL’,需要注意判断。和 Oracle 的最大区别为 Oracle 不区分空字符串’’和空值 NULL。 1.1.5 分片字段数据类型选择 禁止选择大字段类型,以及非精确浮点型,空间类型的字段作为分片字段的数据类型。 禁止作为分片字段的类型见下列表格: 避免分片字段使用二进制类型 binary 和 varbinay。 避免分片字段使用二进制校对规则。可在 MySQL 数据库执行 SQL 语句,查找二进制的校对规则:select * from information_schema.collations where collation_

展开
0
RP钉子 栈主 2020-03-06 14:13:22

分享超实用的MySQL左连接的知识点 【现象】 Ecbil项目中使用左联接的SQL语句,几乎全部存在如图不当写法:(因为放置问题,图片位于文章末尾) 为便于更多的技友快速读懂、理解,只讨论2张表对象进行连接操作的情况,大于2张表对象进行的连接操作原理也是一样的。 【语法】 SELECT M.columnname……,N.* columnname…… FROM left_table M LEFT JOIN right_table N ON M. columnname_join=N. columnname_join AND N. columnname=XXX WHERE M.columnname=XXX…… 【特性】 ON字句连接条件,用于把2表中等值的记录连接在一起,但是不影响记录集的数量。若是left_table中的某记录,无法在表right_table找到对应的记录,则此记录依然显示在记录集钟,只表 right_table需要在查询显示的列的值用NULL替代; ON字句连接条件中表right_table. columnname=XXX用于控制right_table表是否有符合要求的列值还是用NULL替换的方式显示在查询列中,不影响记录集的数量; WHERE字句控制记录是否符合查询要求,不符合则过滤掉; 【总结】 ON字句控制right_table的列值符合显示,还是不符合就用NULL替换,不影响最终符合查询要求的记录集;WHERE字句是控制那些记录是显示在最终的记录集中。 【常见错误用法的左连接】 错把限制表right_table的条件,从ON 子句中放到WHERE字句中的SQL及数据(编号:SQL_8) root@localhost : eugene 03:49:57> SELECT M.ID,M.username,N.CollectNum,N.BuyNum -> FROM left_table M LEFT JOIN right_table N ON M.ID=N.UID -> WHERE M.ID<=6 AND N.SearchNum>300; ±—±----------------±-----------±-------+ | ID | username | CollectNum | BuyNum | ±—±----------------±-----------±-------+ | 1 | 06440350@qq.com | 817 | 39 | ±—±----------------±-----------±-------+ 错把限制表left_table或称影响最终记录集的条件,从WHERE子句中放到ON字句中的SQL及数据(编号:SQL_9) root@localhost : eugene 03:54:14> SELECT M.ID,M.username,N.CollectNum,N.BuyNum -> FROM left_table M LEFT JOIN right_table N ON M.ID=N.UID AND M.ID<=6 AND N.SearchNum>300; ±—±----------------±-----------±-------+ | ID | username | CollectNum | BuyNum | ±—±----------------±-----------±-------+ | 6 | 02026078@qq.com | NULL | NULL | | 7 | 03990516@qq.com | NULL | NULL | | 9 | 05301926@qq.com | NULL | NULL | | 1 | 06440350@qq.com | 817 | 39 | | 4 | 16752438@qq.com | NULL | NULL | | 2 | 25173782@qq.com | NULL | NULL | | 10 | 56599949@qq.com | NULL | NULL | | 3 | 66328120@qq.com | NULL | NULL | | 5 | 92117196@qq.com | NULL | NULL | | 8 | 93677961@qq.com | NULL | NULL | ±—±----------------±-----------±-------+

展开
0
RP钉子 栈主 2020-03-06 14:04:56

分享MySQL工具的几种安装方式供大家自由选择 1.1 安装部分 1.1.1 安装过程 yum安装方式 #先通过wget从官网下载相应平台的MySQL的yum仓库,然后执行安装。 #此步骤自动配置好MySQL的yum源,后续可以方便地安装MySQL官方相关软件。 wget: https://repo.mysql.com//mysql80- ... se-el7-2.noarch.rpm yum -y localinstall mysql80-community-release-el7-2.noarch.rpm #由于该仓库默认启用的是mysql80库,想要安装mysql57还需将mysql80库禁用并将mysql57启用。这里使用如下方式修改仓库配置 yum-config-manager --disable mysql80-community yum-config-manager --enable mysql57-community #安装MySQL,这会依次安装: #mysql-community-common #cs共同的错误信息和字符集包 #mysql-community-libs #共享客户端库,会替换mariadb-libs #mysql-community-client #客户端包 #mysql-community-server #mysql-community-libs-compat #会替换mariadb-libs yum install mysql-community-server rpm安装方式 #通过官网下载等方式获取对应平台以下几个rpm包,并将其上传至所要安装的平台上,执行以下命令,则会依次安装好这几个包 #mysql-community-common #cs共同的错误信息和字符集包 #mysql-community-libs #共享客户端库,会替换mariadb-libs #mysql-community-client #客户端包 #mysql-community-server #mysql-community-libs-compat #会替换mariadb-libs yum -y install mysql-community-{server,client,common,libs}-* mysql-5.* --exclude=‘minimal’ 1.1.2 安装说明 安装布局:即安装完毕后会创建的文件或目录。若安装完毕后不修改配置直接启动服务器,则数据目录等设置和下表相同。 安装会覆盖/etc/my.cnf的内容,里面启用了几个重要参数,和上述布局相同。若愿意,可以在启动服务器前,修改该配置文件,如将数据目录放置在其它地方: datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock #Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid 安装完毕,MySQL还会给我们创建一个mysql用户和mysql基本组 [root@centip10 ~ 20:59:12]# cat /etc/passwd | grep mysql mysql❌27:27:MySQL Server:/var/lib/mysql:/bin/false 1.2 yum、rpm初始化部分及启动 对于yum和rpm方式安装的MySQL,可以在安装后直接启动服务器(如centos6可以使用service mysqld start;centos7还可以使用systemctl start mysqld)。 若启动时检测到数据目录为空或不存在,则会初始化数据目录: 1)初始化服务器; 2)在数据目录中生成SSL证书和密钥文件; 3)安装并启用validate_password:要求密码小写、大写、数字、特殊字符都存在,长度不小于8 4)创建’root’@'localhost超级用户帐户。临时密码存储在错误日志文件中,查看命令为: grep ‘temporary password’ /var/log/mysqld.log 注意:对于5.6,该过程调用mysql_install_db,初始密码为空。当然也可以手动先初始化数据目录,mysql_install_db --random-passwords,给root账户生成一个随机密码,密码保存在用户主目录下.mysql_secret。 1.3 使用mysql连接服务器并修改密码 使用mysql -p命令,并输入由1.2中找到的密码,当可以成功连接到服务器,此后必须先修改密码才能执行其他语句: ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘MyNewPass4!’; #5.6要使用SET PASSWORD = PASSWORD(‘new_password’); quit #退出mysql 2 .使用通用二进制安装、源代码在linux安装、初始化、使用MySQL 5.7 2.1 安装部分 通用二进制安装部分 以从官网下载等方式获取平台对应的通用二进制包,并上传至平台,在该包目录执行解压将其解压至/usr/local/目录,重命名为mysql tar zxvf mysql-5.7.26-el7-x86_64.tar.gz -C /usr/local/ rm -r /usr/local/mysql mv /usr/local/mysql-5.7.26-el7-x86_64 /usr/local/mysql 源安装部分 先安装依赖包 yum -y install cmake libaio libaio-devel #所有平台上的构建框架,mysql要求cmake检查libaio和libaio-devel的存在 yum -y install make #一个良好的make程序,官方建议使用GNU make 3.75及更高版本 yum -y install gcc gcc-c++ #一个有效的ANSI C ++编译器,如默认情况下cmake会检查受支持的编译器的最低版本: #vs2013、gcc4.4或clang3.3、ds12.5。-DFORCE_UNSUPPORTED_COMPILER=ON时可以使cmake跳过此检查。 #Boost C++ libraries用来创建mysql,必须安装Boost 1.59.0。通过cmake . -DWITH_BOOST=/usr/local/boost_1_59_0通知其位置。 #这里我们直接下载官方带有boost的源码包,故不需要安装boost yum -y install ncurses ncurses-devel bison bison-devel git # 其它安装依赖包 #获取并解压分发包:这里直接下载带boost的版本,否则还需自己下载boost并放在对应位置源码包的顶层目录 VERSION=5.7.26 tar zxvf mysql-boost-KaTeX parse error: Expected 'EOF', got '#' at position 16: VERSION.tar.gz #̲配置分发: cd mysql-VERSION mkdir bld cd bld cmake… -DWITH_BOOST=…/boost -DBUILD_CONFIG=mysql_release -DWITH_DEBUG=OFF #cmake使用默认值,只需指定所在位置。-G可以指定开发环境,如windows上cmake … -G “Visual Studio 12 2013 Win64” #还可以添加更多选项,如 #-DBUILD_CONFIG=mysql_release: Configure the source with the same build options used by Oracle to produce binary distributions for official MySQL releases.必须也安装libaio #-DCMAKE_INSTALL_PREFIX=dir_name: Configure the distribution for installation under a particular location. #-DCPACK_MONOLITHIC_INSTALL=1: Cause make package to generate a single installation file rather than multiple files. #-DWITH_DEBUG=1: Build the distribution with debugging support. #For a more extensive list of options, see Section 2.9.4, “MySQL Source-Configuration Options”. #要查看配置 #shell> cmake … -L # overview #shell> cmake … -LH # overview with help text #shell> cmake … -LAH # all params with help text #shell> ccmake … # interactive display #编译错误要先删除bld目录下的该文件rm CMakeCache.txt; #建立分发并安装分发 make & make install #make VERBOSE=1可以打印过程中每个编译命令 #make install DESTDIR="/opt/mysql" 安装在特定目录,默认/usr/local/mysql #make package生成一个或多个.tar.gz通用二进制包。若cmake -DCPACK_MONOLITHIC_INSTALL=1则操作产生单个文件,否则多个 #成功执行到此处,相当于把通用二进制版本放到了/user/local/mysql里,里面也有bin等目录

展开
0
RP钉子 栈主 2020-03-03 18:44:53
展开
1
RP钉子 栈主 2020-03-03 15:55:01
展开
0
分享好友

分享这个小栈给你的朋友们,一起进步吧。

分布式事务数据库
创建时间:2020-02-20 20:00:03
与您分享团队数十年分布式事务数据库探索与研发经验、最佳解决方案的实战总结,丰富的学习课程,根据您的行业、场景、业务需求等提供数据库领域专业的建议,提高您的数据库运维,助您更好的管理与应用。
展开
购买事项

付费用户可享受文章永久阅读权限;

本课程为虚拟产品,付费后不可退换;

您拥有向小栈作者进行答疑的机会,小栈作者利用业余时间选择性回答;

栈主、嘉宾

  • RP钉子
    栈主

小栈成员

  • 格伯纳
  • 漫步云端1983
  • hjt19980227
  • 小雨滴
特邀嘉宾

亲爱的{{$mastername}}栈主,

作为我们尊贵的VIP,您可以免费邀请人脉圈的任何人加入小栈,与您共同建设、管理{{$stackname}}小栈,为您站场,期待您的小栈聚集各路大牛

⚠️注意事项:

1.被邀请嘉宾与您同享小栈部分权益,可共同活跃、管理小栈内用户;

2.嘉宾可在24小时之内通过下一步给到的链接注册登录,过期失效;

3.为最大程度保护您小栈的隐私性,请在安全的环境下发给可信任的用户;

4.链接仅可单人单次使用;

5.目前最多可邀请9位嘉宾入驻。

戳我,来吐槽~