mysql默认值
发表于|更新于
|浏览量:
时穷节乃见,一一垂丹青。一一文天祥
如果我们在编写SQL时需要给一个默认值,例如查询或者编辑的时候,可以使用mysql函数IFNULL
例如这里我们表内有两条数据

然后我们编写SQL,如果我们用户名为null,我们默认填充一个unknown
1 | SELECT id,IFNULL(username,'unknown') username FROM `user` |

在编辑的时候也可以用
1 | UPDATE user set username = IFNULL(`username`,'achao') where id = 2 |
这里如果我们的username为null,就会被修改成achao,但如果已经有值了,则不会进行修改
相关推荐
2022-06-09
exists
发上开出了蔷薇,袖底是风,足下是莲。——顾城 我们可以使用exists代替in查询: 阿里编码规约第五条第(三)条第9条: 【推荐】in操作能避免则避免,若实在避免不了,需要仔细评估in后边的集合元素数量,控制在1000个之内。 我们可以在子元素多的情况下,使用exists查询 比如下面这个in查询 123456789101112SELECT * FROM sys_user AS a WHERE id in ( SELECT user_id FROM sys_user_role AS b WHERE b.role_id IN ( SELECT id FROM sys_role AS c WHERE b.role_id = c.id AND c.role_code LIKE '%o%' )); 可以改为: 12345678910111213SELECT * FROM sys_user AS a WHERE EXISTS ( SELECT user_id FROM sys_user_role AS b WHERE a.id = b.us...
2022-02-06
INSERT ... ON DUPLICATE KEY UPDATE Statement
打开mysql文档,总会有新发现。——碧安瑶 我们在使用INSERT语句时,有时会有这样的需求,不存在就新增,存在就更新 此时我们可以使用INSERT ... ON DUPLICATE KEY UPDATE语句 就像mysql官方文档中提到的那样,我们如果将a列设为UNIQUE唯一索引或者主键时,并且当前表已经存在了a=1的数据,对于这种情况,下面两条sql的结果是相等的 当然如果不满足上方条件,则会新增一条数据 1234INSERT INTO t1 (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1;UPDATE t1 SET c=c+1 WHERE a=1; 对于InnoDB引擎的表,此处的新增可能会触发自增列,但修改操作不会触发 如果上方的唯一索引再加一个b列,则上方第一条sql和下方sql结果相等 1UPDATE t1 SET c=c+1 WHERE a=1 OR b=2 LIMIT 1; 注意如果此处a=1 or b=2匹配多行,则只会更新一行,所以我们需要避免在有多个唯一索引的表上使用本语法 我们在表内没...
2023-02-16
mysql having报错this is incompatible with sql_mode=only_full_group_by
该得到荣誉却未得到,比不该得到荣誉而得到要好得多。——马克·吐温 今天遇到个报错 发现原来是MYSQL 8不支持在sql_mode包含only_full_group_by时(默认包含) HAVING的条件里有 非聚合字段 以外的字段 文档: ONLY_FULL_GROUP_BY Reject queries for which the select list, HAVING condition, or ORDER BY list refer to nonaggregated columns that are neither named in the GROUP BY clause nor are functionally dependent on (uniquely determined by) GROUP BY columns. A MySQL extension to standard SQL permits references in the HAVING clause to aliased expressions in the select list. The ...
2020-12-05
explain
人们很少做他们相信是对的事,他们做比较方便的事,然后后悔。——鲍勃.迪伦 使用explain+SQL 作用: 表的读取顺序 数据读取操作的操作类型 哪些索引可以使用 哪些索引被实际使用 表之间的引用 每张表有多少行被优化器查询 id select_type table partitions type possible_keys key key_len ref rows filtered Extra id:查询的序列号,包含一组数字,表示查询中执行select字句或操作表的顺序id值越大执行优先级越高,id相同情况下执行顺序从上到下 select_type:查询的类型,主要是用于区别普通查询、联合查询、子查询等的复杂查询simple简单的select查询,不包含子查询、UNION primary子查询的最外层 subquery子查询的内层 derived表示 FROM临时表,这个表被标记为衍生 union在union后面的查询,若union包含在from字句的子查询中,外层select被标记为derived union result从union表获取结果的select t...
2024-06-10
ClickHouse快速入门
幻想中有比显示更高的东西,现实中也有比幻想更高的东西,把两者结合起来是最完美的。——列夫·托尔斯泰 官网: https://clickhouse.com/ 中文文档: https://clickhouse.com/docs/zh 我们执行命令运行 1curl https://clickhouse.com/ | sh 可以看到非常方便就好了 1234567891011121314151617181920212223Last login: Tue Jun 4 22:23:34 on ttys001curl https://clickhouse.com/ | shThe default interactive shell is now zsh.To update your account to use zsh, please run `chsh -s /bin/zsh`.For more details, please visit https://support.apple.com/kb/HT208050.GithubIireAchao:blog achao$ curl htt...
2020-07-01
避免循环操作数据库
今天看到公司实习写的代码。。。 1234567for (Long id : ids) { //查询 TbGoods tbGoods = goodsMapper.selectByPrimaryKey(id); tbGoods.setIsDelete("1"); //逻辑删除 //修改 goodsMapper.updateByPrimaryKey(tbGoods); } 这是,循环操作数据库?! 晕。。。希望以后不再看到这样的代码。。。 我给他写了个mapper.xml里的sql,用 where id in()替代,这样只有一条sql语句了 1234567891011<!-- 根据主键查询数据 --> <select id="selectByPrimaryKeys" resultMap="BaseResultMap" parameterType="list&q...
