主頁 > 資料庫 > 【MySQL速通篇001】5000字吃透MySQL部分重要知識點

【MySQL速通篇001】5000字吃透MySQL部分重要知識點

2023-03-04 08:22:27 資料庫

?? 寫在前面

這篇5000多字博客也花了我幾天的時間??,主要是我對MySQL一部分重要知識點的理解【后面當然還會寫博客補充噻,歡迎關注我喲】,當然這篇文章可能也會有不恰當的地方【畢竟也寫了這么多字,錯別字可能也不少??】,不足的地方歡迎各位的指正,

ps:【文章最后有相關練習題的分享】

??一、主鍵和外鍵知識點補充

?1.1、 主鍵的概念

1、什么時候用主鍵?2、主鍵有什么用處 3、一張表可以設定幾個主鍵?4、一個主鍵只能是一列嗎?5、主鍵和唯一索引有什么區別?

1)每個表應該有一個主鍵 , 定義一個保證唯一標識每個logging的主鍵,

2)資料庫主鍵,指的是一個列或多列的組合,其值能唯一地標識表中的每一行,通過它可強制表的物體完整性,主鍵主要是用與其他表的外鍵關聯,以及文本記錄的修改與洗掉,

3) 一張表只可以有一個主鍵

4)主鍵不一定只有一列,有些表的主鍵是多個屬性構成的,表定義為列的集合

5)主鍵是一種約束,唯一索引是一種索引,兩者在本質上是不同的, 1、主鍵創建后一定包含一個唯一性索引,唯一性索引并不一定就是主鍵, 2、唯一性索引列允許空值,而主鍵列不允許為空值, 3、主鍵列在創建時,已經默認為空值 + 唯一索引了, 4、主鍵可以被其他表參考為外鍵,而唯一索引不能,

?1.2、主鍵的創建

??1.2.1、創建一個主鍵

比如我們要創建一張名為 "tb1"的表并且將它的id列設定為主鍵

creat table tb1(
		id int not null auto_increment primary key,
)

??1.2.2、創建多個主鍵

為“tb1”的表創建多個主鍵

creat table tb1(
	id int not null auto_increment ,
	pid int(11) not NULL,
	primary key(id, pid)
)

??二、補充知識點

?2.1、desc 表名;

desc tablenames 主要用來查看資料表的表結構

比如用以下命令創建了一張‘user’表

create table user(
id int auto_increment primary key,
name varchar(10),
gender char(2)
)engine=innodb default charset=utf8;

使用以上命令后可以得到如下結果:
在這里插入圖片描述

?2.2、show create table 表名;

該陳述句的功能:查看表創建時的定義

列如對上面的‘user’表執行該操作得到如下結果
在這里插入圖片描述
但是上面的結果看起來非常混亂,我們可以使用\G【\G 的作用是將查到的結構旋轉90度變成縱向】使得結果更加美觀
在這里插入圖片描述

??三、自增列起始值設定

我們首先查看上面user表中的資料
在這里插入圖片描述
不難看出這個表的id列已經自增到了5,其中show create table 表名;可以看出AUTO_INCREMENT=6,這個就表示接下來id列要遞增成為的數字,
在這里插入圖片描述
下一步我們使用 delete from user;陳述句來洗掉這個表

接著我們使用insert into user (name, gender) values('周周', '男');再向表中插入一列會發現id列是從6開始遞增
在這里插入圖片描述
這時我們就會想,可不可以重新從1開始,或者自定義開始遞增時的值呢?

?3.1、設定自增列初始值陳述句

alter table user AUTO_INCREMENT=1;

在這里插入圖片描述要特別注意如果設定的初始值小于原來表遞增列最后一個資料的值,那么陳述句是不會生效的

??四、自增列步長設定

?4.1、步長設定語法

步長設定我就不舉例了,上面是設定遞增列的初始值,這個是步長【不設定默認是1】

語法:

set session auto_increment_increment=2; 	設定會話步長
show session variables like 'auto_inc%';	查看全域變數

但是要強調一點:

MySQL: 自增步長是基于會話級別的【登入一次mysql就是一次會話】,改變一次步長之后同一次會話創建的所有表的步長都會改變為你設定的步長;

SqlServer:自增步長:是基礎表級別的:可以單獨的對某一張表的步長進行設定,而不改變全域的步長;

總結:SqlServer方便一點

MySQL: 自增步長
			基于會話級別:
				show session variables like 'auto_inc%';	查看全域變數
          set session auto_increment_increment=2; 	設定會話步長
				# set session auto_increment_offset=10;
			基于全域級別(接下來開的所有會話的步長都會改變):
				show global variables like 'auto_inc%';	    查看全域變數
          set global auto_increment_increment=2; 	    設定會話步長
				# set global auto_increment_offset=10;     設定起始值


		SqlServer:自增步長:
			基礎表級別:
				CREATE TABLE `t5` (
				  `nid` int(11) NOT NULL AUTO_INCREMENT,
				  `pid` int(11) NOT NULL,
				  `num` int(11) DEFAULT NULL,
				  PRIMARY KEY (`nid`,`pid`)
				) ENGINE=InnoDB AUTO_INCREMENT=4, 步長=2 DEFAULT CHARSET=utf8

				CREATE TABLE `t6` (
				  `nid` int(11) NOT NULL AUTO_INCREMENT,
				  `pid` int(11) NOT NULL,
				  `num` int(11) DEFAULT NULL,
				  PRIMARY KEY (`nid`,`pid`)
				) ENGINE=InnoDB AUTO_INCREMENT=4, 步長=20 DEFAULT CHARSET=utf8

??五、唯一索引知識點

?5.1、什么是唯一索引?

所謂唯一索引,就是在創建索引時,限制索引的欄位值必須是唯一的,通過該型別的索引可以比普通索引更快速地查詢某條記錄,唯一索引顧名思義不可以重復,但是可以為空,這也是它與主鍵的區別之一

?5.3、創建唯一索引的方式

創建方法一:

CREATE UNIQUE INDEX indexName ON mytable(username(length)) 

創建方法二【聯合唯一索引】:

UNIQUE indexName (列名,列名),

在創建表時的例子:

create table t1(
			id int ....,
			num int,
			xx int,
			UNIQUE 唯一索引名稱 (列名,列名),
		# 示例
		UNIQUE uql (num,xx),
		)

??六、外鍵變種詳細知識點

?6.1、什么是外鍵變種

顧名思義就是外鍵的多種形式,下面會通過舉例子的方式講述

?6.2、外鍵變種之一對一

比如我們有兩張表【用戶表】 和【博客表】,如果每個用戶只能注冊一個博客,那么用戶賬號與博客賬號的外鍵關系就是一對一

  用戶表:
    id     name     age 
    1      xaiom    23  
    2      eagon    34
    3      lxxx     45
    4      owen     83
  博客表:
   id         url        user_id  (外鍵 + 唯一約束)
    1       /xiaom       2
    2       /zekai            1
    3       /lxxx             3
    4       /owen             4

?6.3、外鍵變種之多對多

這個也是比較容易理解的,就比如我有兩張表【用戶表】 和【主機表】,每個用戶可以登入多臺主機,同時每臺主機也可以被多個用戶同時使用,這種關系就是多對多

用戶表:
                      id    name    phone 
                      1    root1    1234
                      2    root2    1235
                      3    root3    1236
                      4    root4    1237
                      5    root5    1238
                      6    root6    1239
                      7    root7    1240
                      8    root8    1241

主機表:

                      id    hostname    
                      1    c1.com    
                      2    c2.com    
                      3    c3.com    
                      4    c4.com    
                      5    c5.com    

為了方便查詢, 用戶下面有多少臺主機以及某一個主機上有多少個用戶, 我們需要新建第三張表:
用戶主機表:

                    id    userid    hostid
                      1    1    		1
                      2    1    		2
                      3    1    		3
                      4    2    		4
                      5    2    		5
                      6    3    		2
                      7    3    		4    
創建的時候, userid 和 hostid 必須是外鍵, 然后聯合唯一索引 unique(userid, hostid),(避免重復出現)【聯合唯一索引在多對多的情況下可以視情況而寫】

                  Django orm 也會設計

??七、資料行操作補充

?7.1、增操作

向表的某一行插入資料

insert into 表名(列名1, 列名2) values('行一內容', '行一內容'), ('行二內容', '行二內容')

向表的多行插入資料

insert into 表名(列名1, 列名2) values('行一內容', '行一內容'), ('行二內容', '行二內容')

向某一張表中插入另一張表中的內容

insert into 表一(name,age) select name,age from 表二;

?7.2、刪操作

假設我創建了一張表叫【tb1】其中列名有【name】列和【id】列

# 洗掉表
delect from tb1
# 帶條件的洗掉
# 把id不等于2的行洗掉
delete from tb1 where id !=2 
delete from tb1 where id =2 
delete from tb1 where id > 2 
delete from tb1 where id >=2 
# 把id > 2,并且name='alex'的資料行洗掉
delete from tb1 where id >=2 or name='alex'

?7.3、改操作

同樣的使用上面刪操作的表

# 把tb1表中的id > 2,并且name='XX'的資料行,的名字設為'alex',其他的不變
update tb1 set name='alex' where id>12 and name='xx'
update tb1 set name='alex',age=19 where id>12 and name='xx'

?7.4、查操作

基礎的查操作

# 查看表中所有資料
select * from tb1;
# 查看表中id,name列的資料			
select id,name from tb1;

select id,name from tb1 where id > 10 or name ='xxx';
# 查看表中id,name列的資料,并將name列名重新取個叫cname的別名
select id,name as cname from tb1 where id > 10 or name ='xxx';

select name,age,11 from tb1;

進階的查操作

select * from tb1 where id != 1
# 查看id為(1,5,12)中的數的行
select * from tb1 where id in (1,5,12);
select * from tb1 where id not in (1,5,12);
# 查tb1表中值id為tb11中元素的行
select * from tb1 where id in (select id from tb11)
# 查看id為5到12之間數的行
select * from tb1 where id between 5 and 12;

通配符的查操作

# 查詢表中以ale開頭的所有用戶 %表示后面可以有任意多個字符,比如可以匹配到【alex,alexk】
select * from tb1 where name like "ale%"
# 查詢表中以ale開頭的所有用戶 _表示后面只能有一個字符,比如【alex】可以匹配到但是【alexxxx】就不可以匹配到
select * from tb1 where name like "ale_"

?7.5、limit以及order by陳述句

將上面知識是先看下面的圖:
在這里插入圖片描述
在我們瀏覽器搜素想要的內容時,回傳的結果通常是很多的,如果一次將結果全部顯示給你,那么電腦可能會崩潰,這時瀏覽器就會默認回傳結果的前幾十條,這種對想要查詢結果的條數的限制我們在資料庫中也可以使用limit來實作

??7.5.1、limit【限制】的用法

# 查看表中的前十條資料
select * from tb1 limit 10;
# 從0行開始后面取十條資料					
select * from tb1 limit 0,10;
select * from tb1 limit 10,10;
# 從20行開始后面取十條資料
select * from tb1 limit 20,10;
# 從第20行開始讀取,讀取10行;
select * from tb1 limit 10 offset 20;

??7.5.2、order by【排序陳述句】

# 將表tb1按id列從大到小排
select * from tb1 order by id desc; 大到小 【口訣先d后c,d在c后面所以是從大到小】
select * from tb1 order by id asc;  小到大 【口訣先a后c,c在a后面所以是從小到大】
# 將表tb1按age列從大到小排,如果id數值相同就按id列大小從小到大排
select * from tb1 order by age desc,id desc;

拓展要點:取后十條資料

# 實作原理:將tb1表逆序,然后在取前十條資料,這樣就相當于取了原表的最后十條資料
select * from tb1 order by id desc limit 10;

??八、MySQL分組操作知識點

關鍵陳述句:

group by

首先我們按如下的方式創建兩張表【department表】【userinfo表】

department表

	CREATE table department(
		id int auto_increment primary key,
		title varchar(32)
	)engine=innodb default charset=utf8;

userinfo表

CREATE table userinfo(
		id int auto_increment primary key,
		name varchar(32),
	age int,
	depart_id int,
	CONSTRAINT fk_usrt_depart FOREIGN key (depart_id) REFERENCES department(id)
	)engine=innodb default charset=utf8;

# 給兩張表加資料
	# department表
+----+-------+
| id | title |
+----+-------+
|  1 | 財務  |
|  2 | 公關  |
|  3 | 測驗  |
|  4 | 運維  |
+----+-------+
	# userinfo表
+----+------+------+-----------+
| id | name | age  | depart_id |
+----+------+------+-----------+
|  1 | 小費 |    6 |         1 |
|  2 | 小港 |    6 |         3 |
|  3 | 小干 |    6 |         2 |
|  4 | 小剛 |    6 |         4 |
|  5 | 小強 |    6 |         4 |
|  6 | 小美 |    6 |         4 |
|  7 | 小亮 |    6 |         2 |
|  8 | 小每 |    6 |         1 |
+----+------+------+-----------+

對于陳述句我就不多解釋了,主要看結果就可以了

1、將同一個部門的人放在一起,并且用戶部門相同取id值大的用戶

SELECT depart_id, max(id) FROM userinfo GROUP BY depart_id;

輸出結果:
在這里插入圖片描述
2、在上面操作的基礎上顯示各個部門的人數

select count(id),max(id),depart_id from userinfo group by depart_id;

輸出結果:
在這里插入圖片描述
3、如果對于聚合函式結果進行二次篩選時?必須使用having

select count(id),depart_id from userinfo group by depart_id having count(id) > 1;

在這里插入圖片描述

4、上面的列名為count(id),這是看著有點不舒服的,我們可以使用as關鍵字改名
在這里插入圖片描述
5、進一步的進階方式

select count(id),depart_id from userinfo where id > 4 group by depart_id having count(id) > 1;

在這里插入圖片描述

??九、MySQL連表操作

?9.1、連表操作概念

連表顧名思義就是將兩張表連在一起查看的操作,操作大的分為兩種內連接和外連接,而外連接又分為左連接、右連接和全連接,

  • 內連接(inner join):只包含匹配的記錄,

  • 外連接(outer join):除了包含匹配的記錄還包含不匹配的記錄,{

? 1. 左連接(left join):回傳匹配的記錄,以及表 A 多余的記錄,

? 2. 右連接(right join):回傳匹配的記錄,以及表 B 多余的記錄,

? 3. 全連接(full join):回傳匹配的記錄,以及表 A 和表 B 各自的多余記錄,

}

用網上一張圖比較好的圖可以更加方便理解如下:
在這里插入圖片描述
下面我們都用【department表】【user_mess表】來舉例:

	# department表
+----+-------+
| id | title |
+----+-------+
|  1 | 財務  |
|  2 | 公關  |
|  3 | 測驗  |
|  4 | 運維  |
+----+-------+
	# user_mess表
+----+------+-----------+
| id | name | depart_id |
+----+------+-----------+
|  1 | 小費 |         1 |
|  2 | 小港 |         1 |
|  3 | 小干 |         2 |
|  4 | 小剛 |         4 |
+----+------+-----------+

執行如下陳述句可以連接兩張表:

select * from user_mess,department where user_mess.depart_id = department.id;
輸出結果:
+----+------+-----------+----+-------+
| id | name | depart_id | id | title |
+----+------+-----------+----+-------+
|  1 | 小費 |         1 |  1 | 財務  |
|  2 | 小港 |         1 |  1 | 財務  |
|  3 | 小干 |         2 |  2 | 公關  |
|  4 | 小剛 |         4 |  4 | 運維  |
+----+------+-----------+----+-------+
4 rows in set (0.00 sec)

?9.2、內連接

內連接 語法: a inner join b ,但是一般 inner 可以省略不寫,也就是如下形式

select  *  from  a  join  b ;

執行下面陳述句:

select  *  from  user_mess join department;
輸出結果:
+----+------+-----------+----+-------+
| id | name | depart_id | id | title |
+----+------+-----------+----+-------+
|  4 | 小剛 |         4 |  1 | 財務  |
|  3 | 小干 |         2 |  1 | 財務  |
|  2 | 小港 |         1 |  1 | 財務  |
|  1 | 小費 |         1 |  1 | 財務  |
|  4 | 小剛 |         4 |  2 | 公關  |
|  3 | 小干 |         2 |  2 | 公關  |
|  2 | 小港 |         1 |  2 | 公關  |
|  1 | 小費 |         1 |  2 | 公關  |
|  4 | 小剛 |         4 |  3 | 測驗  |
|  3 | 小干 |         2 |  3 | 測驗  |
|  2 | 小港 |         1 |  3 | 測驗  |
|  1 | 小費 |         1 |  3 | 測驗  |
|  4 | 小剛 |         4 |  4 | 運維  |
|  3 | 小干 |         2 |  4 | 運維  |
|  2 | 小港 |         1 |  4 | 運維  |
|  1 | 小費 |         1 |  4 | 運維  |
+----+------+-----------+----+-------+

說明:像這樣不加查詢條件會形成 笛卡爾積 ,笛卡爾積的意思是:是指包含兩個集合中任意取出兩個元素構成的組合的集合,// 兩表分別交叉查詢了一遍;也可以加上條件查詢條件 on 或者 using ,兩者的區別在于 都是查詢出符合條件的結果集 ,但是using會優化掉相同的欄位,

下面來舉個栗子更好理解:

# 使用on陳述句添加條件
select  *  from  user_mess join department on user_mess.depart_id = department.id;
輸出結果:
+----+------+-----------+----+-------+
| id | name | depart_id | id | title |
+----+------+-----------+----+-------+
|  1 | 小費 |         1 |  1 | 財務  |
|  2 | 小港 |         1 |  1 | 財務  |
|  3 | 小干 |         2 |  2 | 公關  |
|  4 | 小剛 |         4 |  4 | 運維  |
+----+------+-----------+----+-------+
4 rows in set (0.00 sec)


這時我們可以發現這與上面的select * from user_mess,department where user_mess.depart_id = department.id;陳述句輸出結果是相同的

?9.3、外連接

??9.3.1、左連接

語法:

# 左連接既 左邊 tb_left 表作為基表(主表)顯示所有行, tb_right 表作為外表 條件匹配上的就顯示,沒匹配上的就用 Null 填充
select * from tb_left left join tb_right on tb_left.id = tb_left.id ;

栗子:

select  *  from  user_mess left join department on user_mess.depart_id = department.id;

輸出結果:
+----+------+-----------+------+-------+
| id | name | depart_id | id   | title |
+----+------+-----------+------+-------+
|  1 | 小費 |         1 |    1 | 財務  |
|  2 | 小港 |         1 |    1 | 財務  |
|  3 | 小干 |         2 |    2 | 公關  |
|  4 | 小剛 |         4 |    4 | 運維  |
+----+------+-----------+------+-------+
4 rows in set (0.00 sec)

??9.3.1、右連接

語法:

# 右連接即 右邊 tb_right 表作為基表(主表)顯示所有行, tb_left 表作為外表 條件匹配上的就顯示,沒匹配上的就用 Null 填充; 和左連接相反,
select * from tb_left right join tb_right on tb_left.id = tb_left.id ;

栗子:

select  *  from  user_mess right join department on user_mess.depart_id = department.id;
輸出結果:

+------+------+-----------+----+-------+
| id   | name | depart_id | id | title |
+------+------+-----------+----+-------+
|    2 | 小港 |         1 |  1 | 財務  |
|    1 | 小費 |         1 |  1 | 財務  |
|    3 | 小干 |         2 |  2 | 公關  |
| NULL | NULL |      NULL |  3 | 測驗  |
|    4 | 小剛 |         4 |  4 | 運維  |
+------+------+-----------+----+-------+
5 rows in set (0.00 sec)

??9.3.1、全外連接

語法:

# 經查找發現 MySQL 是不支持所謂 tb_left full join tb_right 語作為 全外連接查詢的,想要實作全外連接查詢可以通過 union 實作,union 運算子用于合并兩個或多個 SELECT 陳述句的結果集,陳述句如下:

select * from tb_left left join tb_right on tb_left.id = tb_right.id  union  select * from tb_left right join tb_right on tb_left.id = tb_right.id ;

栗子:

select  *  from  user_mess left join department on user_mess.depart_id = department.id union select * from  user_mess right join department on user_mess.depart_id = department.id;

輸出結果:

+------+------+-----------+------+-------+
| id   | name | depart_id | id   | title |
+------+------+-----------+------+-------+
|    1 | 小費 |         1 |    1 | 財務  |
|    2 | 小港 |         1 |    1 | 財務  |
|    3 | 小干 |         2 |    2 | 公關  |
|    4 | 小剛 |         4 |    4 | 運維  |
| NULL | NULL |      NULL |    3 | 測驗  |
+------+------+-----------+------+-------+
5 rows in set (0.00 sec)

值得注意的是:注:當 union 和 all 一起使用時(即 union all ),重復的行不會去除,

栗子:

select  *  from  user_mess left join department on user_mess.depart_id = department.id union all select * from  user_mess right join department on user_mess.depart_id = department.id;

輸出結果:

+------+------+-----------+------+-------+
| id   | name | depart_id | id   | title |
+------+------+-----------+------+-------+
|    1 | 小費 |         1 |    1 | 財務  |
|    2 | 小港 |         1 |    1 | 財務  |
|    3 | 小干 |         2 |    2 | 公關  |
|    4 | 小剛 |         4 |    4 | 運維  |
|    2 | 小港 |         1 |    1 | 財務  |
|    1 | 小費 |         1 |    1 | 財務  |
|    3 | 小干 |         2 |    2 | 公關  |
| NULL | NULL |      NULL |    3 | 測驗  |
|    4 | 小剛 |         4 |    4 | 運維  |
+------+------+-----------+------+-------+
9 rows in set (0.00 sec)

?9.4、交叉連接

概念:

交錯連接 語法:tb1 cross join tb2 ;交錯連接可以加查詢條件,也可以不加查詢條件,如果不加查詢條件會形成 笛卡爾積,類似內連接效果,同樣可以使用 using 陳述句優化欄位,

栗子:

select * from user_mess cross join department;

輸出結果:
+----+------+-----------+----+-------+
| id | name | depart_id | id | title |
+----+------+-----------+----+-------+
|  4 | 小剛 |         4 |  1 | 財務  |
|  3 | 小干 |         2 |  1 | 財務  |
|  2 | 小港 |         1 |  1 | 財務  |
|  1 | 小費 |         1 |  1 | 財務  |
|  4 | 小剛 |         4 |  2 | 公關  |
|  3 | 小干 |         2 |  2 | 公關  |
|  2 | 小港 |         1 |  2 | 公關  |
|  1 | 小費 |         1 |  2 | 公關  |
|  4 | 小剛 |         4 |  3 | 測驗  |
|  3 | 小干 |         2 |  3 | 測驗  |
|  2 | 小港 |         1 |  3 | 測驗  |
|  1 | 小費 |         1 |  3 | 測驗  |
|  4 | 小剛 |         4 |  4 | 運維  |
|  3 | 小干 |         2 |  4 | 運維  |
|  2 | 小港 |         1 |  4 | 運維  |
|  1 | 小費 |         1 |  4 | 運維  |
+----+------+-----------+----+-------+
16 rows in set (0.00 sec)

?9.5、總結各種連表操作

1、內連接和交叉連接是十分相似的,只是陳述句語法有所不同,但最后查詢出來的結果集的效果都是一樣的,添加條件查詢就只查詢匹配條件的行,不添加條件查詢則形成 笛卡爾積(生成重復多行) 而降低效率,
2、左連接以左邊表為基礎表 顯示所有行 ,右邊表條件匹配的行顯示,不匹配的則有 Null 代替,
3、右連接以右邊表為基礎表 顯示所有行 ,左邊表條件匹配的行顯示,不匹配的則有 Null 代替,

??十、小結

恭喜你看到了最后,現在看了這么多,不如趕快網上找些題目自己動手實踐一波撒??,

不知道在哪找?放心我幫你找好了??,

?? 【MySQL練習題】復制鏈接打開阿里云盤就行了:https://www.aliyundrive.com/s/D24NKjfNpTW
在這里插入圖片描述

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/545777.html

標籤:MySQL

上一篇:詳細剖析|袋鼠云數堆疊前端框架Antd 3.x 升級 4.x 的踩坑之路

下一篇:本地遠程連接Oracle資料庫的實作步驟

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:33:24 more
  • MySQL中binlog備份腳本分享

    關于MySQL的二進制日志(binlog),我們都知道二進制日志(binlog)非常重要,尤其當你需要point to point災難恢復的時侯,所以我們要對其進行備份。關于二進制日志(binlog)的備份,可以基于flush logs方式先切換binlog,然后拷貝&壓縮到到遠程服務器或本地服務器 ......

    uj5u.com 2023-04-20 08:28:06 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:27:27 more
  • 快取與資料庫雙寫一致性幾種策略分析

    本文將對幾種快取與資料庫保證資料一致性的使用方式進行分析。為保證高并發性能,以下分析場景不考慮執行的原子性及加鎖等強一致性要求的場景,僅追求最終一致性。 ......

    uj5u.com 2023-04-20 08:26:48 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:26:35 more
  • 云時代,MySQL到ClickHouse資料同步產品對比推薦

    ClickHouse 在執行分析查詢時的速度優勢很好的彌補了MySQL的不足,但是對于很多開發者和DBA來說,如何將MySQL穩定、高效、簡單的同步到 ClickHouse 卻很困難。本文對比了 NineData、MaterializeMySQL(ClickHouse自帶)、Bifrost 三款產品... ......

    uj5u.com 2023-04-20 08:26:29 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:25:13 more
  • Redis 報”OutOfDirectMemoryError“(堆外記憶體溢位)

    Redis 報錯“OutOfDirectMemoryError(堆外記憶體溢位) ”問題如下: 一、報錯資訊: 使用 Redis 的業務介面 ,產生 OutOfDirectMemoryError(堆外記憶體溢位),如圖: 格式化后的報錯資訊: { "timestamp": "2023-04-17 22: ......

    uj5u.com 2023-04-20 08:24:54 more
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:24:03 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:23:11 more