1.length()和char_length(str)

方法概述

  • char_length(str)
    计算单位:字符
    不管汉字还是数字或者是字母都算是一个字符
  • length(str)
    计算单位:字节
    utf8编码:一个汉字三个字节,一个数字或字母一个字节。
    gbk编码:一个汉字两个字节,一个数字或字母一个字节。

2.切分函数substring()

LEFT() 函数

LEFT(string,length) ,从字符串string左边第一位开始,截取长度为length个字符。length应大于0,如<=0,返回空字符串。

RIGHT() 函数

LEFT(string,length) ,从字符串string右边第一位开始,截取长度为length个字符,仍然是正向顺序截取。length应大于0,如<=0,返回空字符串。

SUBSTRING() 函数

substring()是专门用来对字符串进行切分的函数,主要有两种形式:

  • SUBSTRING(string,position);
  • SUBSTRING(string,position,length);

SUBSTRING(string,position)
string:参数是要操作的字符串。
position: 参数是一个"整数",用于指定子串的起始字符,position可以是正整数或负整数。若position大于操作字符串的长度,则返回空字符串。

SUBSTRING(string,position,length)
除了string和position参数之外,SUBSTRING函数还有一个length参数。length是一个正整数,用于指定子字符串的字符数。如果length<=0,那么会返回空字符串。

SUBSTRING_INDEX() 函数

SUBSTRING_INDEX(str,delim,count)是一个通过特定标识符"delim"来截取子串的函数,我们日常使用频率是很高的;

delim:通过该标识符来进行截取的,delim可以为任意字符,不要为空;
count:代表第几次出现;count为正数,代表取标识符出现第count次之前的子串;负数则相反,取标识符出现第count次之后的子串。
例:

SUBSTRING_INDEX('www.csdn.net','.',1) ----> www
SUBSTRING_INDEX('www.csdn.net','.',-2)  ----> csdn.net
取中间嵌套
SUBSTRING_INDEX(substring_index('www.csdn.net','.',2),'.',-1)  ----> csdn
-> SUBTRING_INDEX('www.csdn','.','-1') ----> csdn

3.replace函数的几种实用场景

REPLACE(String,from_str,to_str)
即:将String中所有出现的from_str替换为to_str,这里的from_str不支持正则匹配。

select、update
插入或替换:REPLACE INTO
如果我们想插入一条新记录(INSERT),但如果记录已经存在,就先删除原记录,再插入新记录。
  • 场景设计:一张用户记录表,要求只保留用户最新的记录,当用户存在数据时先删除再插入,不存在时直接插入
    这时可以使用:REPLACE INTO这样就不必先查询,再决定是否先删除再插入。
    "REPLACE INTO"语句是基于唯一索引或主键来判断唯一(是否存在)的。
    注意事项:如下SQL所示,需要在username字段上建立唯一索引(Unique),transId设置自增即可。
-- 首次沟通
REPLACE INTO last_communicate (id,username,trans_time,remark) VALUES (null, 'laoliu', '2020-06-11 20:00:20', '第一次沟通');-- 第二次次沟通
REPLACE INTO last_communicate (id,username,trans_time,remark) VALUES (null, 'laoliu',  '2020-06-11 21:00:00', '第二次沟通');

若username='laoliu’的记录不存在,REPLACE语句将插入新记录(首次充值),否则,当前username='laoliu’的记录将被删除,然后再插入新记录。不要给id不要给具体值,不然会影响SQL执行。

DATE_FORMAT(date,format) 函数

参数解析:

  1. date:代表具体时间字段,也可以为now()查询当前时间;
  2. format:DATE_FORMAT将传来的Date类型数据转为自己需要的格式,如%Y-%m-%d %H:%i:%s会将传来的Time数据转为"yyyy-MM-dd HH:mm:ss"格式
SELECT DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%s');   -- 结果:2021-12-15 16:53:37
SELECT DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i');      -- 结果:2021-12-15 16:53
SELECT DATE_FORMAT(NOW(),'%Y-%m-%d %H');         -- 结果:2021-12-15 16
SELECT DATE_FORMAT(NOW(),'%Y-%m-%d');            -- 结果:2021-12-15
SELECT DATE_FORMAT(NOW(),'%H:%i:%s');            -- 结果:16:54:29
SELECT DATE_FORMAT(NOW(),'%H');                  -- 结果:16

案例:

需要查询记录表中当天每小时生成的记录数量

SELECT DATE_FORMAT(edt,'%Y-%m-%d %H') as '时间', count(*) as '数量' from enrollwhere DATE_FORMAT(edt,'%Y-%m-%d') = '2020-07-20' GROUP BY DATE_FORMAT(edt,'%Y-%m-%d %H'


使用以下两种方式是相同的

  • GROUP BY DATE_FORMAT(createTime,’%H’)
  • GROUP BY HOUR(createTime)

拼接函数CONCAT

concat 函数一般用在SELECT 查询语法中,用于修改返回字段内容

函数:concat(str1,str2,…)

SELECT CONCAT('安卓','IOS','手机') as name


如果拼接的参数中有NULL,则返回NULL

SELECT CONCAT('安卓',NULL,'手机') as name

函数:concat_ws(separator,str1,str2,…)

CONCAT_WS() 函数全称: CONCAT With Separator ,是CONCAT()的特殊形式。第一个参数(separator)是其它参数的分隔符。分隔符的位置在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其它字段参数。

需要注意的是:
  如果分隔符为 NULL,则结果为 NULL;但如果分隔符后面的参数为NULL,只会被直接忽略掉,而不会导致结果为NULL。
例:

SELECT CONCAT_WS('-','西瓜','苹果','西红柿') as name


分隔符后的拼接参数为NULL时,直接忽略,不会影响整体结果

SELECT CONCAT_WS('-','西瓜',NULL,'西红柿') as name


分隔符为NULL时,结果返回NULL

SELECT CONCAT_WS(NULL,'西瓜','苹果','西红柿') as name

函数:group_concat(expr)

group_concat ( [DISTINCT] 字段名 [order by 排序字段 ASC/DESC] [Separator ‘分隔符’] )

group_concat函数通常用于有group by的查询语句,group_concat一般包含在查询返回结果字段中。

1.[DISTINCT]:对拼接的参数支持去重功能,可选;
2.[Order by]:拼接的参数支持排序功能,可选;
3.[Separator]:支持自定义’分隔符’,如不设置默认为无分隔符,可选;

例:

表如下 现要求根据family分组排序

使用order by区分时
select * from family_test ORDER BY family


使用GROUP_CONCAT更加直观的进行分组

select GROUP_CONCAT(first_name,'-',last_name,',')
as name, family from family_test GROUP BY family


函数中的DISTINCT参数是对拼接的字符串进行排序

select GROUP_CONCAT(first_name,'-',last_name ORDER BY first_name,',') as name, family from family_test GROUP BY family

判断函数总结

一、函数:CASE WHEN … THEN … ELSE … END

在SQL语句中,"CASE WHEN … THEN … ELSE … END"是较常见的用来判断的语句,适用于增删改查各类语句中,公式如下:

CASE expression
WHEN if_true_expr THEN return_value1
WHEN if_true_expr THEN return_value2
WHEN if_true_expr THEN return_value3
……
ELSE default_return_value
END

1、用在更新语句的更新条件中

妇女节大回馈,2021年注册的新用户,所有成年女性账号送10元红包,其他用户送5元红包,自动充值。

-- 送红包语句
UPDATE users_info u SET u.balance = CASE WHEN u.sex ='女' and u.age > 18 THEN u.balance + 10 ELSE u.balance + 5 end WHERE u.create_time >= '2020-01-01'
  • Case函数只返回第一个符合条件的值,剩下的Case when部分将会被自动忽略

2、用在查询语句的返回值中

有个学生期末分数表,需要将等级列出来,95分以上是优秀,70-95是良好,60-70是及格,30-60不及格,30以下是滚蛋;

原始数据如下

select *, CASE when grade > 95 then '优秀'when grade > 70 then '良好'when grade >60 then '及格'when grade > 30 then '不及格'else '滚蛋' end as STATUS
from grade_test

3、用在分组查询语句中

计算每个姓氏中 年龄总和

分组查询SQL

select SUM(f.age), case
when last_name = '世民' then '李'when last_name = '白' then '李'when last_name = '高祖' then '唐'when last_name = '三' then '唐'when last_name = '武帝' then '汉'when last_name = '熹' then '朱'when last_name = '元璋' then '朱'
else '其他' end as '姓'
from family_test f GROUP BY CASEwhen last_name = '世民' then '李'when last_name = '白' then '李'when last_name = '高祖' then '唐'when last_name = '三' then '唐'when last_name = '武帝' then '汉'when last_name = '熹' then '朱'when last_name = '元璋' then '朱'
else '其他' end

结果

二、函数:IF(expr,if_true_expr,if_false_expr)

IF(expr,if_true_expr,if_false_expr),如果expr的值为true,则返回if_true_expr的值,如果expr的值为false,则返回if_false_expr的值。
可用于真实数据被替代的列,例如性别,库中一般使用1,2表示

SELECT IF(1=1,'男','女') as sex

也可用于替换表中数据。

三、函数:IFNULL(expr1,expr2)

IFNULL函数是MySQL控制流函数之一,它有两个参数,两个参数可以是真实值或表达式,如果expr1不是NULL,则返回第一个参数(expr1)。 否则,IFNULL函数返回第二个参数。

数据库三大范式

范式的作用

范式是我们设计数据库表时遵循的一种规范要求,主要有两个优点:

  • 消除重复数据减少冗余数据,从而让数据库内的数据能划分的更合理,让磁盘空间得到更有效利用的一种标准化标准;
  • 消除潜在的异常(插入异常,更新异常,删除异常)

数据库范式主要分为1NF,2NF,3NF,BCNF等。范式越高,要求就越细。一般在我们设计关系型数据库的时候,通常考虑到第三范式(3NF)就足够。需要注意的是,每当要符合高一级范式的设计规范,必须要以符合低一级范式为前提。

1、第一范式(1NF)

要求:强调的是列的原子性,即每一列都是不可再分的最小数据单元。

2、第二范式(2NF)

要求:
1、满足1NF;
2、表必须有一个主键;
3、对于没有包含在主键中的列(非主键的其他列)必须完全依赖于主键,而不能只依赖于主键的一部分(比如某一个主键)。

3、第三范式(3NF)

要求:
1、满足2NF;
2、非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键列 A 依赖于非主键列 B,非主键列 B 依赖于主键的情况。

第三范式是为了消除数据库中关键字之间的依赖关系

总结

1NF: 字段是最小的的单元不可再分
2NF:满足1NF,表中的字段必须完全依赖于全部主键而非部分主键
3NF:满足2NF,非主键外的所有字段必须互不依赖

面对于数据库范式进行分解的过程中不难看出,范式越高,冗余越低,一般要求到三范式或第二范式,再往上,表越来越多,会带来很多问题:

  • 查询时要连接多个表,增加了查询的复杂度

  • 查询时需要连接多个表,降低了数据库查询性能

因此,并不是应用的范式越高越好,要看实际情况而定。第三范式已经很大程度上减少了数据冗余,并且减少了造成插入异常,更新异常,和删除异常了。

数据库中IP地址的存储

《高性能MySQL第三版》
4.1.7 特殊类型数据
-某些类型的数据并不直接与内置类型一致。低于秒级精度的时间戳就是一个例子;
-本意的前面部分也演示过存储此类数据的一些选项。
-另一个例子是一个IPv4地址。人们经常使用VARCHAR(15)列来存储IP地址。
-然而,它们实际上是 32位无符号整数,不是字符串。用小数点将地址分成四段的表示方法只是为了让人们阅读容易。
-所以应该用无符号整数存储IP地址。MySQL提供INET ATON()和 INET NTOA()函数在这两种表示方法之间转换。

在MySQL中,当存储IPv4地址时,应该使用32位的无符号整数(UNSIGNED INT)来存储IP地址,而不是使用字符串,用UNSIGNED INT类型存储IP 地址是一个4字节长的整数。

如果是字符串存储IP 地址,在正常格式下,最小长度为 7 个字符 (0.0.0.0),最大长度为 15 个 (255.255.255.255),因此,我们通常会使用varchar(15)来存储。同时为了让数据库准确跟踪列中有多少数据,数据库会添加额外的1字节来存储字符串的长度。这使得以字符串表示的 IP 的实际数据存储成本需要16字节。

这意味着如果将每个 IP 地址存储为字符串的话,每行需要多耗费大约 10 个字节的额外资源。

  • INET_ATON()

      将IP转换成整数。算法:第一位乘256三次方+第二位乘256二次方+第三位乘256一次方 + 第四位乘256零次方
    
SELECT INET_ATON('127.0.0.1')

  • INET_NTOA()

      将数字反向转换成IP
    
SELECT INET_NTOA(2130706433)

  • 如果是 IPv6地址的话,可以使用函数 INET6_ATON() 和 INET6_NTOA() 来转化:
    然后将数据库定义为 varbinary类型,分配 128bits空间(因为 ipv6采用的是128bits,16个字节);或者定义为 char 类型,分配 32bits 空间。

常用存储引擎区别总结

一、InnoDB

  1. 支持事务。默认的事务隔离级别为可重复读(REPEATABLE-READ),通过MVCC(并发版本控制)来实现。
  2. 使用的锁粒度默认为行级锁,可以支持更高的并发;当然,也支持表锁。其实有这两点就足以奠定InnoDB在存储引擎中的霸主地位了。你知道的,使用场景真的太多了。
  3. 支持外键约束;外键约束其实降低了表的查询速度,但是增加了表之间的耦合度。
  4. 可以通过自动增长列,方法是auto_increment。
  5. 配合一些热备工具可以支持在线热备份;
  6. 在InnoDB中存在着缓冲管理,通过缓冲池,将索引和数据全部缓存起来,加快查询的速度;
  7. 对于InnoDB类型的表,其数据的物理组织形式是聚簇表。所有的数据按照主键来组织。数据和索引放在一块,都位于B+数的叶子节点上;
  8. InnoDB 表的select count() 比 MyISAM 慢很多;当执行 select count() from t 时,会先把数据读出来,一行一行的累加,最后返回总数量。 是的,真的会很慢。需要注意的是,当count(*) 语句包含 where 条件时,两种表的操作是一样的。
  9. DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除。

InnoDB的存储表和索引有下面两种形式:

  • 共享表空间存储:所有的表和索引存放在同一个表空间中。
  • 多表空间存储:表结构放在.frm文件,数据和索引放在.ibd文件中。分区表的话,每个分区对应单独的.ibd文件,分区表的定义可以查看我的其他文章。使用分区表的好处在于提升查询效率。

对于InnoDB来说,最大的优势在于支持事务,当然这是以牺牲效率为代价的。

二、MyISAM

  1. 不支持事务。场景在:日志记录、调查统计表时,绝对值得一用。对了,不支持事务,自然就不支持锁!
  2. 体积小,质量大。MyISAM的索引和数据是分开的,并且索引是有压缩的,内存使用率就对应提高了不少。同时能加载更多索引,而Innodb的索引和数据是紧密捆绑的,没有使用压缩从而会造成 Innodb 比 MyISAM 数据文件体积庞大很多。

每张MyISAM表在磁盘上会对应三个文件。

(1).frm文件:存储表的定义数据

(2).MYD文件:存放表具体记录的数据

(3).MYI文件:存储索引

  1. 从以往经验来说,select count(*) 和 order by 大概是使用最频繁的,大概能占了整个sql总语句的60%以上的操作,而这种操作Innodb其实也是会锁表的,很多人以为Innodb是行级锁,那个只是where对它主键是有效,非主键的还是会锁全表的。
  2. 常常应用部门需要我给他们定期某些表的数据,MyISAM的话很方便,只要发给他们对应那表的(frm.MYD,MYI)的文件,让他们自己在对应版本的数据库启动就行,而Innodb就需要导出.sql了,因为光给别人文件,受字典数据文件的影响,对方是无法使用的。
  3. 如果和 MyISAM 比 Insert 写操作的话,Innodb还达不到MyISAM的写性能,如果是针对基于索引的update操作,确实MyISAM会慢与InnoDB,但在并发环境下,从库同步也是个事儿,还不如通过多实例分库分表架构来解决。
  4. MyISAM表的select count() 是非常快的;在 MyISAM 存储引擎中,把表的总行数(row)存储在磁盘上,当执行 select count() from t 时,直接返回总数据。同样,当 count(*) 语句包含 where条件时,两种表的操作是一样的。
  5. DELETE FROM table时,MyISAM会先将表结构备份到一张虚拟表中,然后执行drop,最后根据备份重建该表。

实用的SQL

1.插入或替换

如果我们想插入一条新记录(INSERT),但如果记录已经存在,就先删除原记录,再插入新记录。
此时,可以使用"REPLACE INTO"语句,这样就不必先查询,再决定是否先删除再插入。

"REPLACE INTO"语句是基于唯一索引或主键来判断唯一(是否存在)的。
"REPLACE INTO"语句是基于唯一索引或主键来判断唯一(是否存在)的。
"REPLACE INTO"语句是基于唯一索引或主键来判断唯一(是否存在)的。

注意事项:如下SQL所示,需要在判断重复字段上建立唯一索引(Unique),id设置自增即可。

2.插入或更新

如果我们希望插入一条新记录(INSERT),但如果记录已经存在,就更新该记录,此时,可以使用"INSERT INTO … ON DUPLICATE KEY UPDATE …"语句:

注意事项:同上,"INSERT INTO … ON DUPLICATE KEY UPDATE …"语句是基于唯一索引或主键来判断唯一(是否存在)的

3.插入或忽略

如果我们希望插入一条新记录(INSERT),但如果记录已经存在,就啥事也不干直接忽略,此时,可以使用INSERT IGNORE INTO …

注意事项:同上,"INSERT IGNORE INTO …"语句是基于唯一索引或主键来判断唯一(是否存在)的

4.SQL中的if-else判断语句

  • 见上文判断函数总结

5.指定数据快照或备份

如果想要对一个表进行快照,即复制一份当前表的数据到一个新表,可以结合CREATE TABLE和SELECT:

-- 对birth_year=1999的记录进行快照,并存储为新表students_of_birth:
CREATE TABLE students_of_birth SELECT * FROM student WHERE birth_year=1999;

6.写入查询结果集

如果查询结果集需要写入到表中,可以结合INSERT和SELECT,将SELECT语句的结果集直接插入到指定表中。

例如,创建一个统计成绩的表statistics,记录各班的平均成绩:

CREATE TABLE statistics (id BIGINT NOT NULL AUTO_INCREMENT,class_id BIGINT NOT NULL,average DOUBLE NOT NULL,PRIMARY KEY (id)
);

然后,我们就可以用一条语句写入各班的平均成绩:

INSERT INTO statistics (class_id, average) SELECT class_id, AVG(score) FROM students GROUP BY class_id;

确保INSERT语句的列和SELECT语句的列能一一对应,就可以在statistics表中直接保存查询的结果.

7.强制使用指定索引

在查询的时候,数据库系统会自动分析查询语句,并选择一个最合适的索引。但是很多时候,数据库系统的查询优化器并不一定总是能使用最优索引。如果我们知道如何选择索引,可以使用FORCE INDEX强制查询使用指定的索引。例如:

SELECT * FROM students FORCE INDEX (idx_class_id) WHERE class_id = 1 ORDER BY id DESC;

指定索引的前提是索引idx_class_id必须存在。

SQL优化

SELECT语句 - 执行顺序:

FROM
<表名> # 选取表,将多个表数据通过笛卡尔积变成一个表。
ON
<筛选条件> # 对笛卡尔积的虚表进行筛选
JOIN <join, left join, right join…>
<join表> # 指定join,用于添加数据到on之后的虚表中,例如left join会将左表的剩余数据添加到虚表中
WHERE
<where条件> # 对上述虚表进行筛选
GROUP BY
<分组条件> # 分组
<SUM()等聚合函数> # 用于having子句进行判断,在书写上这类聚合函数是写在having判断里面的
HAVING
<分组筛选> # 对分组后的结果进行聚合筛选
SELECT
<返回数据列表> # 返回的单列必须在group by子句中,聚合函数除外
DISTINCT
< 数据除重>
ORDER BY
<排序条件> # 排序
LIMIT
<行数限制>

SQL优化策略

一、避免不走索引的场景

  1. 尽量避免在字段开头模糊查询,会导致数据库引擎放弃索引进行全表扫描。

如果需求是要在前面使用模糊查询:

  • 使用MySQL内置函数INSTR(str,substr) 来匹配,作用类似于java中的indexOf(),查询字符串出现的角标位置。
  • 使用FullText全文索引,用match against 检索
  • 数据量较大的情况,建议引用ElasticSearch、solr,亿级数据量检索速度秒级
  • 当表数据量较少(几千条儿那种),别整花里胡哨的,直接用like ‘%xx%’。

使用INSTR替换LIKE

X%
SELECT * from d_loginuser WHERE lname like '陶%'
SELECT * from d_loginuser WHERE INSTR(lname,'陶') = 1%X
select*from d_loginuser where lname  like '%陶';
这里使用CHAR_LENGTH 因为模糊搜索的是中文 LENGTH 函数返回的是字节长度 与 INSTR返回的下表不符
当模糊搜索的是英文时 可以使用功能LENGTH()
SELECT * from d_loginuser WHERE INSTR(lname,'陶') != 1 and instr(lname, '陶') + CHAR_LENGTH('陶') -1  = CHAR_LENGTH(lname)%X%
select*from d_loginuser where lname  like '%陶%';
select*from d_loginuserwhere instr(lname , '陶') > 0;
  1. 尽量避免使用in 和not in,会导致引擎走全表扫描。

优化方式:

  • 如果是连续数值,可以用between代替
  • 如果是子查询,可以用exists代替。
  1. 尽量避免使用 or,会导致数据库引擎放弃索引进行全表扫描

优化方式:

  • 可以用union代替or。
  1. 尽量避免进行null值的判断,会导致数据库引擎放弃索引进行全表扫描

优化方式:

  • 可以给字段添加默认值0,对0值进行判断
  1. 尽量避免在where条件中等号的左侧进行表达式、函数操作,会导致数据库引擎放弃索引进行全表扫描。
  2. 当数据量大时,避免使用where 1=1的条件。通常为了方便拼装查询条件,我们会默认使用该条件,数据库引擎会放弃索引进行全表扫描。
  3. 查询条件不能用 <> 或者 !=
  4. where条件仅包含复合索引非前置列
  5. 隐式类型转换造成不使用索引
  6. order by 条件要与where中条件一致,否则order by不会利用索引进行排序
-- 不走age索引
SELECT * FROM t order by age;-- 走age索引
SELECT * FROM t where age > 0 order by age;

对于上面的语句,数据库的处理顺序是:

  • 第一步:根据where条件和统计信息生成执行计划,得到数据。
  • 第二步:将得到的数据排序。当执行处理数据(order by)时,数据库会先查看第一步的执行计划,看order by 的字段是否在执行计划中利用了索引。如果是,则可以利用索引顺序而直接取得已经排好序的数据。如果不是,则重新进行排序操作。
  • 第三步:返回排序后的数据。

当order by 中的字段出现在where条件中时,才会利用索引而不再二次排序,更准确的说,order by 中的字段在执行计划中利用了索引时,不用排序操作。

这个结论不仅对order by有效,对其他需要排序的操作也有效。比如group by 、union 、distinct等。

关于MySQL你都知道哪些?相关推荐

  1. 所有mysql变量都以 开头对不对_PHP复习题(选择题)

    PHP复习题(选择题) 1. 如何使用 PHP 输出 "hello world"? A.  "Hello World"; B.  echo "Hell ...

  2. mysql 索引都有哪些_MySQL 数据库的优化,你知道有哪些?

    原标题:MySQL 数据库的优化,你知道有哪些? 来源 | sf.gg/a/1190000018631870 数据库优化一方面是找出系统的瓶颈,提高MySQL数据库的整体性能,而另一方面需要合理的结构 ...

  3. mysql一列数据转为一行_最最完整的 MySQL 规范都在这了

    本文核心内容如下: 正文部分 一.数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) ...

  4. 玩转MySQL:都2022年了,这些数据库技术你都知道吗

    引言 MySQL数据库从1995年诞生至今,已经过去了二十多个年头了,到2022.04.26日为止,MySQL8.0.29正式发行了GA版本,在此之前版本也发生了多次迭代,发行了大大小小N多个版本,其 ...

  5. mysql 分组排序_Python、PowerBI、Excel、MySQL,都能做?搞清楚数据聚合与分箱

    阅读提示 本内容为日常频繁使用的数据处理操作,不涉及底层技术问题,烦请爱钻牛角的杠精绕行. 本内容尽量简单直白.步骤详细,适合数据分析入门.特别喜欢技术语言的大佬们,可自行跳过. 上一篇:数据更新删除 ...

  6. mysql 索引都有哪些,mysql索引类型有哪些

    摘要 腾兴网为您分享:mysql索引类型有哪些,易信,微商助手,刷机精灵,数字涂色等软件知识,以及家校即时通,内部通讯录,叫叫识字大冒险,天天酷跑,手机电视高清直播,短信验证软件,诛仙表情包,一手女装 ...

  7. mysql工具都有什么作用是什么_Navicat for MySQL是什么

    MySQL如今早已变成大部分中小型企业及站长搭建网站的数据库首选,其内置了简易web图型管理phpmyadmin专用工具,可是管理.操作比较有限,这就促使大家不得不找一个更专业,功能更加强大的MySQ ...

  8. Hive环境的安装部署(完美安装)(集群内或集群外都适用)(含卸载自带mysql安装指定版本)...

    Hive环境的安装部署(完美安装)(集群内或集群外都适用)(含卸载自带mysql安装指定版本) Hive 安装依赖 Hadoop 的集群,它是运行在 Hadoop 的基础上. 所以在安装 Hive 之 ...

  9. mysql数据库搜索引擎要先进入_Mysql搜索引擎都有哪些区别

    Mysql搜索引擎都有哪些区别 发布时间:2020-09-16 14:04:13 来源:亿速云 阅读:72 作者:小新 小编给大家分享一下Mysql搜索引擎都有哪些区别,希望大家阅读完这篇文章后大所收 ...

最新文章

  1. Java_apply_in_automatic_system
  2. mysql cluster自动安装_MySQL Cluster 安装
  3. linux raw限制端口访出,使用Linux raw socket时需要注意的一些问题
  4. [转]win系统下nodejs安装及环境配置
  5. python 列表推导 为什么快_python 列表推导 为什么快
  6. 博文视点Open Party——PPT演示专家秘技 报名中
  7. 《Excel VBA实战技巧精粹》终于登场了
  8. 如何向VISUAL SVN SERVER上传文件
  9. 用c语言做一个栈,完成逆波兰表达式
  10. 如何用cocos2d-x来开发简单的Uphone游戏:(四) 音乐音效 最后的润色
  11. python培训班排行榜-重庆Python培训机构排行榜
  12. 智能生活管家项目之一-系统简介
  13. 令人匪夷所思的 Magic 之魔数,你真的不会
  14. Handler中有Loop死循环,为什么没有阻塞主线程,原理是什么
  15. 《羊年展望》中国改革蹄疾经济求稳 新思维应对新常态
  16. 21天好习惯第一期-3
  17. 竞争情报分析工具Alexa
  18. Excel柱状图,饼图,折线图
  19. Jquery实现幻灯片轮播
  20. cs6导航栏代码html,总算认识网页设计教程|Dreamweaver-CS6工具栏详解

热门文章

  1. 创建联合唯一索引的sql
  2. Linux虚拟机安装gcc(解决依赖)
  3. Qt打包生成exe: 无法定位程序输入点
  4. 7. 字符串str的详细讲解
  5. JimuReport积木报表—表达式介绍
  6. 工简教育:监理工程师考几门科目
  7. android google api - Calendar 使用记录
  8. SQL创建视图时设置默认值
  9. fastadmin如何隐藏表格右上角的搜索,导出等功能按钮,如何实现多选变单选,如何实现点击表格行选中,如何实现双击表格行编辑
  10. Ribbon负载均衡策略