数据表示例
1.NOT IN 结果集为空
①SELECT class_no FROM t_student;
结果为:

②SELECT * FROM t_student where class_no not in (SELECT class_no FROM t_student);
 
结论:查询语句中not in的结果集中不能有空值,否则查询结果与预期不一致,直接返回空的记录
2.count表达式
①coun(列) 与 count(*)
SELECT COUNT(*) FROM t_student;
结果:5条
 
SELECT COUNT(class_no) FROM t_student;
结果:4条
 
SELECT COUNT(id) FROM t_student;
结果:5条
 
结论:
count(列) : 当列为非空字段时,与count(*)是一样的
当列存在空值时,意义完全不一样
 
②count(列 or NULL)
SELECT COUNT(class_no = '124' or NULL) FROM t_student;
结果:2条
 
SELECT COUNT(class_no = '124') FROM t_student;
结果:3条
结论:因为当 class_no不是124时 class_no='124' 结果false。不是 NULL,
count在值是NULL是不统计数, (count('任意内容')都会统计出所有记录数,因为count只有在遇见null时不计数,即count(null)==0,因此前者单引号内不管输入什么值都会统计出所有记录数),至于加上or NULL , 很像其他编程里的or运算符,第一个表达式是true就是不执行or后面的表达式,第一个表达式是false 执行or后面的表达式 。当class_no不为124时class_no = '124' or NULL 的结果是NULL,Count才不会统计上这条记录数
 
3.update 不能用and
update table set a=xx and b=xxx where ….
更新操作set之后使用and 只会执行a = xx 但是此时不会赋值为xx,而是默认值0(大多数情况字符串1) 情况 但是 mysql并不会报错!!!!!!
 
mysql> select * from test; +------+------+ | c1 | c2 | +------+------+ | 0 | a | +------+------+
他想将c1列的值改成1、c2的值改成'b',然后用了如下sql:
update test set c1=1 and c2='b' where c1=0;
可以发现这个sql写法是错误的,正确写法应该是:
update test set c1=1,c2='b' where c1=0;
但第一个错误的sql运行没报错,因为被MySQL理解成:
update test set c1=(1 and c2='b') where c1=0; => update test set c1=(1 and 0) where c1=0; ==> update test set c1=0 where c1=0;
 
4.待续

Mysql踩过的坑的更多相关文章

  1. Django 连接mysql 踩过的坑

    1.创建数据库 2.在Django项目文件下的settings.py配置数据库 3.在Django项目__init__.py文件中,用pymysql代替MySqlDB import pymysql p ...

  2. 基于RHEL6.3 安装MySQL踩过的坑

    MySQL版本:Percona-Server-5.6.29 OS:RHEL6.3 安装出错 [mysql@oracle ~]$ /home/mysql/scripts/mysql_install_db ...

  3. 【踩坑记录】记一次MySQL主从复制延迟的坑

    最近开发中遇到的一个MySQL主从延迟的坑,记录并总结,避免再次犯同样的错误. 情景 一个活动信息需要审批,审批之后才能生效.因为之后活动要编辑,编辑后也可能触发审批,审批中展示的是编辑前的活动内容, ...

  4. CentOS7.4安装MySQL踩坑记录

    CentOS7.4安装MySQL踩坑记录 time: 2018.3.19 CentOS7.4安装MySQL时网上的文档虽然多但是不靠谱的也多, 可能因为版本与时间的问题, 所以记录下自己踩坑的过程, ...

  5. MySql 踩坑小记

    MySql 踩坑一时爽,一直踩啊一直爽...   以下记录刚踩的三个坑,emmm... 首先是远程机子上创建表错误(踩第一个坑),于是将本地机器 MySql 版本回退至和远程一致(踩第二个坑),最后在 ...

  6. windows下mysql免安装版配置(踩过的坑)简记

    下载 从官网(https://dev.mysql.com/downloads/mysql/)下载 这里的免安装版本的,相对来说干净,但是需要自己来配置很多东西. 配置 首先是注册windows的服务. ...

  7. 初学spring boot踩过的坑

    一.搭建spring boot环境 maven工程 pom文件内容 <project xmlns="http://maven.apache.org/POM/4.0.0" xm ...

  8. MySQL字符集的一个坑

    MySQL字符集的一个坑 http://imysql.com/2013/10/29/misunderstand-about-charset-handshake.shtml MySQL字符集的一个坑 1 ...

  9. 要想不踩SaaS那些坑,得先了解“SaaS架构”

    摘要:围绕当下许多企业青睐的SaaS应用开发,华为云开发者技术服务工程师程泽在DTT首期带来主题为 <SaaS云原生应用典型架构> 的DTT首期直播分享. 本文分享自华为云社区<DT ...

随机推荐

  1. 在ROS Kinetic中使用Gazebo 8进行机器人仿真

    在ROS Kinetic中使用Gazebo 8比在ROS Indigo中使用Gazebo 3-8要容易一些. 目前最新稳定版本的Gazebo8为8.1.1. 安装流程如下: $  sudo apt-g ...

  2. EasyPlayer Android基于ffmpeg实现播放(RTSP/RTMP/HTTP/HLS)同步录像功能

    之前有博客专门介绍了EasyPlayer的本地录像的功能,简单来说,EasyPlayer是一款RTSP播放器,它将RTSP流里的音视频媒体帧解析出来,并用安卓系统提供的MediaMuxer类进行录像. ...

  3. 利用sklearn的LabelEncoder对标签进行数字化编码

    from sklearn.preprocessing import LabelEncoder def gen_label_encoder(): labels = ['BB', 'CC'] le = L ...

  4. Android Bluetooth 总结

    一.Android Bluetooth现状 (1)Android2.2版 支持的蓝牙核心版本是Bluetooth 2.0 + EDR. (2)Android 的蓝牙 使用了BlueZ协议栈,但只实现了 ...

  5. matlab linux的安装(第二次)

    1 挂载 2 下载jdk,matlab里面那个不行,缺点东西 3 安装 ./install *** 4 激活,非在线 5 license.lic路径在百度云中有 6 运行路径在你安装过程中的选的路径, ...

  6. c语言符号常量与常变量的区别?

    <blockquote>定义符号常量:#define PI 3.1415926               //注意后面没有分号 定义常变量  :const float PI=3.1415 ...

  7. VS2013 tips

    1.创建一个connection时会自动产生一个localdb数据库文件,可以通过Server Explorer窗口查看这个localDB,注意,是Server Explorer窗口,而不是SQL S ...

  8. stm32寄存器版学习笔记10 SPI

    SPI(Serial Peripheral Interface),串行外围设备接口.SPI是一种高速的.全双工.同步的通信总线. SPI接口一般使用4条线通信: MISO 主设备数据输入,从设备数据输 ...

  9. sql中的一些函数(长期更新。。)

    前言 在最近看别人的sql的时候,看到一些函数,比如left(),right()等等,好奇是什么意思,查询之后觉得还是挺有用的,特此记录下来.博客会在遇到新的函数的时候定期更新. 正文 1. left ...

  10. 隐藏控件HiddenField使用

    HiddenField控件顾名思义就是隐藏输入框的服务器控件,它能让你保存那些不需要显示在页面上的且对安全性要求不高的数据. 增加HiddenField,其实是为了让整个状态管理机制的应用程度更加全面 ...