MySQL

分类下相关文章

MySQL 非 NULL 值返回 1, NULL 值返回 0

这是一个判断购物车中商品是否已失效的查询语句。需要返回一个字段标示是否失效。 select cart.product_name, (products.name IS NOT NULL) as valid from cart left outer join products on cart.product_id = products.id; 包邮农家自制霉干菜 1 包邮农家自制巨无霸菜 0 广西农家有机生姜 1 ...

阅读全文...

MySQL inner join 与 left/right outer join 的区别及查询逻辑

例如,商品表与类型表,要查询指定类型名的商品,使用 inner join 还是 left outer join 呢? 用 left outer join 肯定没有问题,但是用 inner join 是否可以呢? 用真实数据来测试一下 Product 表 CREATE TABLE `product` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `category_id` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) EN ...

阅读全文...

MySQL 唯一约束 Unique 是否允许存在多个 NULL 值

实际测试结果,允许多个 NULL。 但是不允许多个空字符串 “” 我觉得这是合理的,例如,我可以不填写手机号,但是,如果我填写了,就必须是唯一的。 注意,并不是所有的数据库都是这个标准 SQL Server 就不允许存在多个 NULL 值 ...

阅读全文...

MySQL 中 Decimal, Float, Double 的区别

最近在写小程序商城,不可避免的遇到价格的存储问题 如果要存交易额的话,通常使用什么类型? 凡是跟钱相关的都需要使用 Decimal。 Decimal 是精确存储 float, double 是近似存储,并不精确 做个简单的测试。 首先建表 CREATE TABLE `payment` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL, `count` decimal(10,5) DEFAULT NULL, `count2` float ...

阅读全文...

Laravel Backpack 后台列表页面查询关键词包含中文时报错

报错信息如下 Next Illuminate\Database\QueryException: SQLSTATE[HY000]: General error: 1271 Illegal mix of collations for operation 'like' (SQL: select count(*) as aggregate from `worker` where (`id` like %是是% or `na me` like %是是% or `tel` like %是是% or `project` like %是是% or `team` like %是是% or `role` li ...

阅读全文...

MySQL 使用另一个表的已存储数据为当前表对应字段赋值

例如, store 存储的是商铺的基本信息,包括商铺 id, 商铺名称 collection 存储的是收银记录,包括金额,商铺 id 现在为了避免联表查询,需要在 collection 表中增加一个冗余字段,StoreName 用于存储商铺名称,并从 store 表导入商铺名称。 SQL 具体如下 UPDATE collection, store SET collection.StoreName = store.StoreName WHERE collection.StoreID = store.StoreID ...

阅读全文...

MySQL BOOL 类型是否需要建索引

通常不需要, 而且不建议 1/0 值分布均匀的话,不需要建立索引。如果建立了,并不会使查询更快,反而写入更慢。 1/0 中的某个值只存在少量的时候。索引有效果。 从 MySQL 的索引机制来分析,MySQL 使用的是 B-Tree 索引。对于候选值较少的情况, 效果不佳。 当然,数据量很小的情况下,根本不需要索引。 参考: Should I create indexes on tinyint field types in mysql tables ...

阅读全文...

mysql 命令行进行数据导出/导入

数据导出 mysqldump -uusername -p db_name > db_name.sql; 数据导入 mysql -uusername -p db_name < db_name.sql; ...

阅读全文...

mysql utf8mb4 编码

MySQL server version 5.5.3 or higher 引入了 utf8mb4 编码。 Utf8 与 Utf8mb4 的区别 Utf8 只能支持 1~3 个字节的字符 Utf8mb4 则可以支持 4 个字节的字符,而 emoji 则是以 4 个字节进行存储的。 所以要支持 emoji 则必须使用 Utf8mb4. 数据库与数据集表的 charset 是否需要同时设置 参考 http://stackoverflow.com/questions/24356090/difference-between-database-table-column-collation 如果数据表设置了 ...

阅读全文...

MySQL table engine

5.7 默认使用的是 InnoDB engine 常见的 engine 类型, MyISAM 与 InnoDB 的区别 大部分情况下,采用默认的 InnoDB 即可 InnoDB: The default storage engine in MySQL 5.7. InnoDB is a transaction-safe (ACID compliant) storage engine for MySQL that has commit, rollback, and crash-recovery capabilities to protect user data. InnoDB row-leve ...

阅读全文...

MySQL 中将 varchar 字段转换成数字进行排序

问题来源于 ecshop 的商品属性列表排序 bug。 includes/lib_goods.php 中是这样写的 'ORDER BY a.sort_order, g.attr_price, g.goods_attr_id'; 然而 attr_price 字段非常傻逼地使用了 varchar 类型,造成 51 这样的价格会排在 111 后面。 修复方法是将 attr_price 转换为数字再进行排序, *1 即可 'ORDER BY a.sort_order, g.attr_price * 1, g.goods_attr_id'; 测试了整型、浮点型、为 null (默认转换为0)都可以 ...

阅读全文...

MySQL 的事务

transaction logging 为了保证事务操作更高效,MySQL 不是直接更新磁盘上的对应数据,而是 首先更新磁盘上数据在内存中的 copy append 到 transaction log 中,使用 IO 的方式,避免了随机 IO 的耗时 一段时间后,由其他进程将内存中的更新 flush 到磁盘上 ...

阅读全文...

MySQL 慢查询定位

如何开启慢查询日志 编辑 my.cnf, 注意,需置于 mysqld 的 section 下 log_slow_queries = /tmp/mysql-slow.log long_query_time = 2 重启 mysql. 默认 SQL 语句超过 10 秒才算作慢查询,这里修改为 2 秒。 Why I could not alter the variable long_query_time variable at runtime 为何很简单的语句大部分时间运行很快,而偶尔很慢 buffer pool query_cache_size 参考: The MySQL Que ...

阅读全文...

MySQL 的那些锁

MySQL 锁的类型 shared locks (read locks): Read locks on a resource are shared, or mutually nonblocking: many clients can read from a resource at the same time and not interfere with each other. exclusive locks (write locks): Write locks, on the other hand, are exclusive—i.e., they block both read loc ...

阅读全文...

mysql

Quick Links mysql common types Mysql DBA 20天速成指南 为高性能而生的索引 高效的 MySQL GUI 工具 Ubuntu 上的 MySQL Workbench GRANT PRIVILEGE $ mysql -u root -p > GRANT SELECT ON db_test.table_test TO 'user_test'@'%' IDENTIFIED BY 'password'; or > CREATE DATABASE db_test; > GRANT ALL PRIVILEGES ON db_te ...

阅读全文...