MySQL

分类下相关文章

统计数据表中 datetime 字段的日期集合

例如,MySQL 数据表中数据行的创建时间字段 created_at 为 datetime 类型。 现在要统计所有的创建日期集合,方便生成基于日期的日程表。 SELECT DISTINCT date(date_format(created_at, '%Y-%m-%d')) as created_date from some_table order by created_date desc ...

阅读全文...

MySQL 触发器的坑:ERROR 1054 (42S22): Unknown column 'xxx' in 'field list'

今天线上项目报错了 500 错误,Laravel 日志中显示 Illuminate/Database/QueryException with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column 'is_charge' in 'field list' (SQL: update `some_categories` set `lft` = case when `lft` >= 29 then `lft`+2 else `lft` end, `rgt` = case when `rgt` >= 29 then ...

阅读全文...

centos 6.9 install mysql 5.7

wget http://dev.mysql.com/get/mysql57-community-release-el6-7.noarch.rpm rpm -ivh mysql57-community-release-el6-7.noarch.rpm yum install -y mysql-community-client mysql-community-server 参考 https://opensourcedbms.com/dbms/installing-mysql-5-7-on-centosredhatfedora/ ...

阅读全文...

MySQL 批量修改时间为 N 天前/后

例如,我想把当前数据表中 updated_at 时间字段统一修改为一天前。 修改前 SQL 语句: update some_table set updated_at = DATE_ADD(updated_at, INTERVAL -1 DAY); 修改后 如果是要改成一天后,把减号去掉即可 update some_table set updated_at = DATE_ADD(updated_at, INTERVAL 1 DAY); 参考 https://www.w3schools.com/sql/func_mysql_date_add.asp ...

阅读全文...

MySQL 新建索引中的 Order 为 ASC 或者 DESC 的区别

在使用 MySQL Workbench 新建 MySQL 数据表索引时,会看到 Order 这一项配置。 可选值为 ASC 或者 DESC。 对应的建表语句为 CREATE TABLE `blog`.`products` ( `id` INT NOT NULL AUTO_INCREMENT, `name` VARCHAR(255) NOT NULL, `status` TINYINT NOT NULL DEFAULT 1, PRIMARY KEY (`id`), INDEX `ix_status` (`status` ASC)) ENGINE = InnoDB DEFAU ...

阅读全文...

MySQL 8 导入报错:'ascii' codec can't decode byte 0xd2 in position 26: ordinal not in range(128)

系统环境 Windows 10 MySQL Server 8.0.12 MySQL Workbench 8.0.12 现象 从另一台开发机上导出的数据库备份,无法在本机导入,MySQL Workbench 报错 21:37:49 Restoring D:\geo2.sql Error executing task: 'ascii' codec can't decode byte 0xd2 in position 26: ordinal not in range(128) Error executing task [Error 32] : 'c:\\users\\\xd2\xbc\xd2\x ...

阅读全文...

MySQL 导出时忽略指定的大数据表

如果线上数据库中一些数据量比较大的表,不经常变动,在导出时,可以选择忽略,以节省下载时间。 例如,开发环境同步线上数据库的表结构。数据量大的表就没有导出的必要。 如何知道哪些表占用的磁盘空间最大 SELECT CONCAT('my_db_name', '.', table_name), CONCAT(ROUND(table_rows / 1000000, 2), 'M') rows, CONCAT(ROUND(data_length / ( 1024 * 1024 * 1024 ), 2), 'G ...

阅读全文...

Windows 上将 excel 导入 mysql

Windows 上的字符编码总是让人无语。 手头有个 excel 文件需要导入 mysql。印象中曾经把 csv 导入过 sql server。 我想 mysql 肯定也支持把 csv 导入。 mysql workbench 中,右键点击待导入的目标数据表,选择 Table Data Import Wizard 可以看到,支持 csv 和 json 的格式导入。 将 Excel 转换为 utf8 格式的 CSV 使用 WPS 先打开 excel 文件,另存为 csv 的格式。 但是问题来了,mysql workbench 压根就不支持 WPS 生成的 csv 文件的字符编码,显示为乱码。 ...

阅读全文...

WSL Ubuntu 18.04 中安装 MySQL 5.7

sudo apt install mysql-server-5.7 sudo mysqld 启动失败 2018-08-15T01:08:41.167354Z 0 [ERROR] Could not create unix socket lock file /var/run/mysqld/mysqld.sock.lock. 2018-08-15T01:08:41.167378Z 0 [ERROR] Unable to setup unix socket lock file. 修改启动方式 sudo service mysql start 之后问题解决,但是没有默认密码。设置 root 账号 ...

阅读全文...

MySQL 通过经纬度查询附近的目标

之前一直使用 Redis 的 GeoHash 来查询附近的目标,但是为了架构的简化,我决定尝试一下 MySQL 来进行查询。 SELECT name, latitude, longitude, SQRT( POW(69.1 * (latitude - [target_lat]), 2) + POW(69.1 * ([target_lng] - longitude) * COS(latitude / 57.3), 2)) AS distance FROM TableName HAVING distance < [distance] ORDER BY distance; ...

阅读全文...

MySQL 8 引入索引 VISIBLE 与 INVISIBLE 的实战意义

实际使用场景: 线上服务的数据库中某个字段已经创建了索引,但是后续运营过程中,发现这个索引并没有实际用途,反而影响了写入速度。那么,我们就会想去掉这个字段的索引。可是,在数据量非常大的情况下,新建索引,删除索引都是一件非常耗时的操作。所以,删除索引的操作,马虎不得。一旦发现这个索引还有其他业务用到,再重新建索引,耗时的创建过程会严重影响线上业务。 这时,index 的 visible 和 invisible 就非常实用了。可以先将该索引设置为 invisible,这样优化器就会忽略这个索引,但是索引依然存在于引擎内部。而设置 invisible 和 visible 操作的耗时又非常少,对业务基 ...

阅读全文...

MySQL 8.0 的文档型数据存储 - Document Store

本质上就是实现了一套 MongoDB,然而我对 MongoDB 并不感冒。。。 什么是文档 Document A Document is a set of key and value pairs, as represented by a JSON object. 文档是一堆键值对的集合,表现为 JSON 结构。 例如: { "domain": "www.sunzhongwei.com", "title": "大象笔记" } collection 感觉类似 mongodb 里 collection 的概念, ...

阅读全文...

MySQL 全文检索方案 - FULLTEXT 索引

尽量不要使用 Like 由于 MySQL LIKE '%text%' 是无法使用索引的,Like 能用上索引的唯一可能 LIKE 'text%' 所以实际使用中 LIKE 毫无实用价值。。。 mysql 5.7.6 之后支持了中日韩文的全文检索 查看了本机的 mysql 版本 mysqld --version mysqld Ver 5.7.18-0ubuntu0.16.10.1 for Linux on x86_64 ((Ubuntu)) A full-text index in MySQL is an index of type FULLTEXT. 实际上,就是增加了一个新的索 ...

阅读全文...

Ubuntu 18.04 安装 mysql 8.0

卸载之前安装的 mysql 5.7 sudo apt-get autoremove --purge mysql-server sudo apt-get remove mysql-server sudo apt-get autoremove mysql-server sudo apt-get remove mysql-common 安装 mysql 8.0 首先需要去 mysql 官网 https://dev.mysql.com/downloads/repo/apt/ 下载一个 Ubuntu / Debian (Architecture Independent), DEB Pack ...

阅读全文...

ubuntu 18.04 为 mysql 设置 root 初始密码

ubuntu 18.04 上安装 mysql 5.7 之后,默认没有设置 root 密码,印象中之前是有一个引导界面的,现在似乎去掉了。 设置 mysql 初始密码需要使用命令 sudo mysql_secure_installation 按照提示,一步步操作即可 root 连接需要 sudo 很奇葩,ubuntu 18.04 上 mysql -uroot -p ERROR 1698 (28000): Access denied for user 'root'@'localhost' 永远会报这个错误。 解决方法就是加上 sudo... sudo mysql -uroot -p 带来的问 ...

阅读全文...