1、count(*) 和 count(1)和count(列名)区别

执行效果上:

count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL

count(1)包括了忽略所有列,用1代表代码行,在统计结果的时候,不会忽略列值为NULL

count(列名)只包括列名那一列,在统计结果的时候,会忽略列值为空(这里的空不是只空字符串或者0,而是表示null)的计数,即某个字段值为NULL时,不统计。

执行效率上:

列名为主键,count(列名)会比count(1)快

列名不为主键,count(1)会比count(列名)快

如果表多个列并且没有主键,则 count(1) 的执行效率优于 count(*)

如果有主键,则 select count(主键)的执行效率是最优的

如果表只有一个字段,则 select count(*)最优。

2、校对规则

MySQL在Linux下数据库名、表名、列名、别名大小写规则是这样的:

1、数据库名与表名是严格区分大小写的;

2、表的别名是严格区分大小写的;

3、列名与列的别名在所有的情况下均是忽略大小写的;

4、字段内容默认情况下是大小写不敏感的。

因为默认情况下字段内容是不区分大小写的,也即大小写不敏感。所以解决方案就是要新增字段内容的校验规则。

使用mysql 的BINARY 关键字使搜索区分大小写。

在查询的sql中加入BINARY 关键字,select * from tb_user where BINARY username ='user';

这种方式相对较简单,不用改动表结构,只需在需要区分查询的字段前加上关键字。这种方式也是有缺点的,每次写查询的时候都要注意加关键字,并可能需要改动的代码较多。

在创建表的时候进行限制

CREATE TABLE `tb_user1` (

`id` BIGINT (20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '用户id',

`username` VARCHAR (50) BINARY NOT NULL COMMENT '用户名',

PRIMARY KEY (`id`)

) ENGINE = INNODB DEFAULT CHARSET = utf8 COMMENT = '用户表';

mysql> show create table tb_user1;

tb_user1 | CREATE TABLE `tb_user1` (

`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户id',

`username` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '用户名',

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户表'

1 row in set

或者 使用

CREATE TABLE `tb_user2` (

`id` BIGINT (20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '用户id',

`username` VARCHAR (50) NOT NULL COMMENT '用户名',

`info` VARCHAR (100) NOT NULL COMMENT '详情描述',

PRIMARY KEY (`id`)

) ENGINE = INNODB DEFAULT CHARSET = utf8 COLLATE=utf8_bin COMMENT = '用户表';

mysql> show create table tb_user2;

tb_user2 | CREATE TABLE `tb_user2` (

`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户id',

`username` varchar(50) COLLATE utf8_bin NOT NULL COMMENT '用户名',

`info` varchar(100) COLLATE utf8_bin NOT NULL COMMENT '详情描述',

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='用户表'

使用 NGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin会将字段中varchar类型的全部设置区分大小写。这两种查看表的详情,本质上都是 在字段上 加上了 COLLATE utf8_bin。

总结:

字段值的大小写由mysql的校对规则来控制。提到校对规则,就不得不说字符集。字符集是一套符号和编码,校对规则是在字符集内用于比较字符的一套规则。 一般而言,校对规则以其相关的字符集名开始,通常包括一个语言名,并且以ci(大小写不敏感)、cs(大小写敏感)或_bin(二元)结束 。

比如 utf8字符集,,如下表:

1)utf8bin:utf8bin将字符串中的每一个字符用二进制数据存储,区分大小写。

2)utf8generalci:utf8generaci不区分大小写,ci为case insensitive的缩写,即大小写不敏感。

3)utf8generalcs:utf8generalcs区分大小写,cs为case sensitive的缩写,即大小写敏感。

3、ON DUPLICATE KEY UPDATE

mysql提供了这样的语法,即当我们往表里插数据里,如果数据已经存在(通过主键或唯一索引确定),我们可以对已存在的记录做更新操作。如:

INSERT USER(id,username) VALUES(1,'张三丰') ON DUPLICATE KEY UPDATE username='王老五'

面的sql意思是,如果id为1的记录不存在,则insert一条id=1、username=张三丰的记录;否,将id为1记录的username改为王老五。这只是插入单行数据,mysql甚至支持批量操作,如:INSERT INTO table (id,a,b,c) select id,a,b,c from xxx ON DUPLICATE KEY UPDATE a=VALUES(a),b=VALUES(b),c=VALUES(c)

即通过insert into ...from 来批量插入,然后通过values(xxx)来取得结果集中对应的字段值。

mysql和sqline的异同_mysql的那点事儿,你知道吗相关推荐

  1. linux mysql 实战_Linux平台MySQL多实例项目实施_MySQL数据库基础与项目实战06

    Linux平台MySQL多实例项目实施_MySQL数据库基础与项目实战06 视频教程学习地址 Oracle/MySQL数据库学习专用QQ群:336282998.189070296 学完风哥本课程能熟悉 ...

  2. mysql的char在java中表示为_Java学习篇之-Mysql中varchar门类总结_mysql

    java学习篇之---mysql中varchar类型总结 Mysql中varchar类型总结 今天新做一个项目,需要自己进行数据库设计,发现自己对varchar的用法还不是很熟悉,所以查阅资料总结若下 ...

  3. datastage mysql wire_DataStage 九、数据交换到MySQL以及乱码有关问题_mysql

    DataStage 九.数据交换到mysql以及乱码问题 DataStage序列文章 DataStage 一.安装 DataStage 二.InfoSphere Information Server进 ...

  4. mysql有没有批量游标_MySQL使用游标批量处理进行表操作_MySQL

    一.概述 本章节介绍使用游标来批量进行表操作,包括批量添加索引.批量添加字段等.如果对存储过程.变量定义.预处理还不是很熟悉先阅读我前面写过的关于这三个概念的文章,只有先了解了这三个概念才能更好的理解 ...

  5. mysql主从修改系统参数步骤_mysql主从配置的参数配置与步骤_MySQL

    mysql主从配置的参数配置与步骤_MySQL 主从配置的步骤: 在主库建立要同步的数据库,建立主库的帐号和修改主备库配置 create database web default character ...

  6. mysql冷备份恢复无法启动_MYSQL冷备份 恢复

    MYSQL冷备份恢复 1. SHOW VARIABLES LIKE '%data%' 查看datadir目录,这就是所有数据的备份目录,好像只有innodb的可以直接覆盖备份 2. 停掉MYSQL服务 ...

  7. mysql如何手写代码_mysql手写_mysql

    myisam innoDB是mysql常用的存储引擎 MyISAM不支持事务.也不支持外键,但其访问速度快,对事务完整性没有要求. InnoDB存储引擎提供了具有提交.回滚和崩溃恢复能力的事务安全.但 ...

  8. 使用mysql创建外键约束_Mysql创建外键约束的两种方式

    通过给mysql的表字段添加外键约束,可以有效的保持数据的一致性和完整性,数据就不会很容易出问题. 1.创建表时直接创建外键约束create table books( bookid number(10 ...

  9. mysql为什么要压测_mysql集群压测的详细介绍

    本篇文章给大家带来的内容是关于mysql集群压测的详细介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. mysql压测 mysql自带就有一个叫mysqlslap的压力测试工具,通 ...

  10. mysql索引空间太大_MySQL优化索引

    1.  MySQL如何使用索引 索引用于快速查找具有特定列值的行.如果没有索引,MySQL必须从第一行开始,然后遍历整个表以找到相关的行.表越大,花费越多.如果表中有相关列的索引,MySQL可以快速确 ...

最新文章

  1. 电容触摸屏GT911、GT928、GT9147的使用
  2. Swift 异常处理
  3. 如何书写高质量的jQuery代码
  4. Demo:充分利用 Ajax 技术 来体现页面局部刷新 效果(获取天气预报情况)
  5. (计算机组成原理)第七章输入和输出系统-第四节1:I/O方式之程序查询方式
  6. “21天好习惯”第一期-14
  7. JSP — GET 与 POST 的区别
  8. 『可道云』内网穿透牛刀小试,会敲键盘就能搭建的私有云网盘
  9. 游戏c#脚本语言,C#作为脚本语言执行解密
  10. 使用IText组件在PDF文档上绘制椭圆形印章的算法分析及代码分享
  11. LDP协议的相关内容
  12. automotive 安卓开发_谷歌首次提及「Android Automotive」,是安卓车机系统亮相前奏?...
  13. 深度学习中常见的损失函数(L1Loss、L2loss)
  14. RemoteViews之RemoteViews的内部机制
  15. 1020:Anniversary Cake
  16. 【codeforces 787C】Berzerk
  17. Unity3D游戏制作——人物移动逻辑
  18. 测你现在活了多少天,计算从出生到现在的天数,运用Calendar类
  19. sqlserver 人名_mssql sqlserver 使用sql脚本生成随机中文名字的方法分享
  20. XDOJ-一元稀疏多项式计算器

热门文章

  1. 微软Kinect for windows SDK 使用教程一 (NUI部分)
  2. iMeta | 北大陈峰/陈智滨等发表口腔微生物组研究中各部位取样的实验方法(Protocol)...
  3. 【数学建模】2021 年全国大学生数学建模竞赛A题一等奖获奖论文
  4. 植物大战僵尸:实现灵魂收割者
  5. JAVA实现ECC加密 eclipse
  6. CycloneII之EDA及学术开发功能描述
  7. 区域生长算法原理及实现
  8. C - The Little Girl who Picks Mushrooms HDU - 4422
  9. 中国网络词“no zuo no die”被收入美国俚语词典
  10. 手机通话记录重复显示怎么处理_华为出现重复联系人 - 卡饭网