MySQL怎么去掉字段中的空格
数据的前面有空格,该使用哪个函数将空格去掉
trim,或者 replace替换都行
UPDATE TABLE SET cp_serv_id= TRIM(cp_serv_id);
UPDATE TABLE SET cp_serv_id= replace(cp_serv_id,' ','');
UPDATE mytable SET mycolumn = TRIM(mycolumn);
如果是字段首位的就用TRIM(youcolumn)
如果是字段中间的,就用REPLACE(youclumn, " ", "")
在 MySQL 中,可以使用 TRIM() 函数去掉字段中的空格。TRIM() 函数可以去掉字符串开头和结尾处的空格。如果要去掉字符串中间的空格,可以使用 REPLACE() 函数。
以下是使用 TRIM() 函数去掉字段中的空格的示例代码:
UPDATE table_name SET column_name = TRIM(column_name);
其中,table_name 是你要更新的表名,column_name 是你要去掉空格的字段名。这条语句将更新指定表中指定字段的值,将字段值中的空格去掉。
需要注意的是,TRIM() 函数只能去掉字符串开头和结尾处的空格,如果要去掉字符串中间的空格,可以使用 REPLACE() 函数。例如,以下代码将去掉字段中间的空格:
UPDATE table_name SET column_name = REPLACE(column_name, ' ', '');
其中,' ' 是要替换的空格,'' 是替换后的内容,将字段值中的空格替换为空字符串。
在 MySQL 的命令行中使用 show processlist; 查看所有连接,其中 Command 列显示为 Sleep 的表示空闲连接,如下图所示:
MySQL 中的字符串类型都有哪些?
MySQL 的字符串类型和取值如下:
类型 | 取值范围 |
---|---|
CHAR(N) | 0~255 |
VARCHAR(N) | 0~65536 |
TINYBLOB | 0~255 |
BLOB | 0~65535 |
MEDUIMBLOB | 0~167772150 |
LONGBLOB | 0~4294967295 |
TINYTEXT | 0~255 |
TEXT | 0~65535 |
MEDIUMTEXT | 0~167772150 |
LONGTEXT | 0~4294967295 |
VARBINARY(N) | 0~N个字节的变长字节字符集 |
BINARY(N) | 0~N个字节的定长字节字符集 |
VARCHAR 和 CHAR 的区别是什么?分别适用的场景有哪些?
VARCHAR 和 CHAR 最大区别就是,VARCHAR 的长度是可变的,而 CHAR 是固定长度,CHAR 的取值范围为1-255,因此 VARCHAR 可能会造成存储碎片。由于它们的特性决定了 CHAR 比较适合长度较短的字段和固定长度的字段,如身份证号、手机号等,反之则适合使用 VARCHAR。
MySQL 存储金额应该使用哪种数据类型?为什么?
MySQL 存储金额应该使用 decimal ,因为如果存储其他数据类型,比如 float 有导致小数点后数据丢失的风险。
limit 3,2 的含义是什么?
去除前三条数据之后查询两条信息。
now() 和 current_date() 有什么区别?
now() 返回当前时间包含日期和时分秒,current_date() 只返回当前时间 2019-09-01
如何去重计算总条数?
select count(distinct f) from t
使用 distinct 去重,使用 count 统计总条数
last insert id() 函数功能是什么?有什么特点?
lastinsertid() 用于查询最后一次自增表的编号,它的特点是查询时不需要不需要指定表名,使用 select last_insert_id() 即可查询,因为不需要指定表名所以它始终以最后一条自增编号为主,可以被其它表的自增编号覆盖。比如 A 表的最大编号是 10,lastinsertid() 查询出来的值为 10,这时 B 表插入了一条数据,它的最大编号为 3,这个时候使用 lastinsertid() 查询的值就是 3。
删除表的数据有几种方式?它们有什么区别?
删除数据有两种方式:delete 和 truncate,它们的区别如下:
delete 可以添加 where 条件删除部分数据,truncate 不能添加 where 条件只能删除整张表;
delete 的删除信息会在 MySQL 的日志中记录,而 truncate 的删除信息不被记录在 MySQL 的日志中,因此 detele 的信息可以被找回而 truncate 的信息无法被找回;
truncate 因为不记录日志所以执行效率比 delete 快。
delete 和 truncate 的使用脚本如下:
delete from t where username=‘redis’; truncate table t;
MySQL 中支持几种模糊查询?它们有什么区别?
MySQL 中支持两种模糊查询:regexp 和 like,like 是对任意多字符匹配或任意单字符进行模糊匹配,而 regexp 则支持正则表达式的匹配方式,提供比 like 更多的匹配方式。
regexp 和 like 的使用示例如下: select * from person where uname like ‘%SQL%’;> select from person where uname regexp ‘.SQL*.’;
MySQL 支持枚举吗?如何实现?它的用途是什么?
MySQL 支持枚举,它的实现方式如下:
create table t(
sex enum('boy','grid') default 'unknown'
);
枚举的作用是预定义结果值,当插入数据不在枚举值范围内,则插入失败,提示错误 Data truncated for column 'xxx' at row n 。
count(column) 和 count(*) 有什么区别?
count(column) 和 count() 最大区别是统计结果可能不一致,count(column) 统计不会统计列值为 null 的数据,而 count() 则会统计所有信息,所以最终的统计结果可能会不同。
以下关于 count 说法正确的是?
A. count 的查询性能在各种存储引擎下的性能都是一样的。 B. count 在 MyISAM 比 InnoDB 的性能要低。 C. count 在 InnoDB 中是一行一行读取,然后累计计数的。 D. count 在 InnoDB 中存储了总条数,查询的时候直接取出。
答:C
为什么 InnoDB 不把总条数记录下来,查询的时候直接返回呢?
因为 InnoDB 使用了事务实现,而事务的设计使用了多版本并发控制,即使是在同一时间进行查询,得到的结果也可能不相同,所以 InnoDB 不能把结果直接保存下来,因为这样是不准确的。
能否使用 show table status 中的表行数作为表的总行数直接使用?为什么?
不能,因为 show table status 是通过采样统计估算出来的,官方文档说误差可能在 40% 左右,所以 show table status 中的表行数不能直接使用。
以下哪个 SQL 的查询性能最高?
A. select count(*) from t where time>1000 and time<4500 B. show table status where name=‘t’ C. select count(id) from t where time>1000 and time<4500 D. select count(name) from t where time>1000 and time<4500
答:B 题目解析:因为 show table status 的表行数是估算出来,而其他的查询因为添加了 where 条件,即使是 MyISAM 引擎也不能直接使用已经存储的总条数,所以 show table status 的查询性能最高。
InnoDB 和 MyISAM 执行 select count(*) from t,哪个效率更高?为什么?
MyISAM 效率最高,因为 MyISAM 内部维护了一个计数器,直接返回总条数,而 InnoDB 要逐行统计。
在 MySQL 中有对 count(*) 做优化吗?做了哪些优化?
MySQL 有对 count() 进行优化,以 InnoDB 为例,在 InnoDB 中主键索引数的叶子节点是主键值,而普通索引的叶子节点则是主键值,所以普通索引数比主键索引数要小很多,而对于 count 查询来说,每个索引树的查询结果都是一样的,所以 MySQL 会选择最小的那颗树来遍历,以此来优化 count() 的查询。
在 InnoDB 引擎中 count(*)、count(1)、count(主键)、count(字段) 哪个性能最高?
count(字段)<count(主键 id)<count(1)≈count(*) 题目解析:
对于 count(主键 id) 来说,InnoDB 引擎会遍历整张表,把每一行的 id 值都取出来,返回给 server 层。server 层拿到 id 后,判断是不可能为空的,就按行累加。
对于 count(1) 来说,InnoDB 引擎遍历整张表,但不取值。server 层对于返回的每一行,放一个数字“1”进去,判断是不可能为空的,按行累加。
对于 count(字段) 来说,如果这个“字段”是定义为 not null 的话,一行行地从记录里面读出这个字段,判断不能为 null,按行累加;如果这个“字段”定义允许为 null,那么执行的时候,判断到有可能是 null,还要把值取出来再判断一下,不是 null 才累加。
对于 count() 来说,并不会把全部字段取出来,而是专门做了优化,不取值。count() 肯定不是 null,按行累加。
所以最后得出的结果是:count(字段)<count(主键 id)<count(1)≈count(*)。
MySQL 中内连接、左连接、右连接有什么区别?
内连(inner join)— 把匹配的关联数据显示出来;
左连接(left join)— 把左边的表全部显示出来,右边的表显示出符合条件的数据;
右连接(right join)— 把右边的表全部显示出来,左边的表显示出符合条件的数据;