單進(jìn)程服務(wù)器-----epoll
IO多路復(fù)用
基本原理就是select,poll,epoll這個(gè)function會(huì)不斷地輪詢所負(fù)責(zé)的所有socket,當(dāng)某個(gè)socket有數(shù)據(jù)到達(dá)了就通知用戶進(jìn)程
采用epoll模型時(shí)創(chuàng)建了一個(gè)共享的內(nèi)存空間,操作系統(tǒng)采用事件通知的方式,使一個(gè)進(jìn)程能同時(shí)等待多個(gè)文件描述符
select/epoll的好處就在于單個(gè)process就可以同時(shí)處理多個(gè)網(wǎng)絡(luò)連接的IO
select、poll、epoll 模型的區(qū)別:
select就是輪詢,在Linux上限制個(gè)數(shù)一般為1024個(gè)
pool解決了select的個(gè)數(shù)限制,但是依然是輪詢
epoll解決了個(gè)數(shù)的限制
epoll解決了輪詢的方式
單進(jìn)程---單線程的非阻塞
設(shè)置套接字為非阻塞的方式:tcp_server_socket.setblocking(Flase)
也要把new_socket設(shè)置為非阻塞方式:new_socket.setblocking(Flase)
accept()是判斷是否有新客戶端到來(lái),recv是判斷是否有新數(shù)據(jù)到來(lái)
單進(jìn)程單線程不能同一時(shí)刻為別人服務(wù),一定是并發(fā)不是并行,因?yàn)橐遣⑿械脑捲诹斜砝锩娴目蛻舳藭r(shí)要同時(shí)為別人服務(wù)的
先進(jìn)入while:True循環(huán),然后判斷是否有新客戶到來(lái),要是沒有就不會(huì)走else其中的列表是空的所以就不會(huì)進(jìn)入for循環(huán);當(dāng)有新的客戶端連接時(shí)就會(huì)走else其中列表就不為空就會(huì)走for循環(huán),就會(huì)調(diào)用已有的連接rece()來(lái)進(jìn)行數(shù)據(jù)的獲取,其中要是數(shù)據(jù)沒有來(lái)就會(huì)進(jìn)行下一輪循環(huán),當(dāng)有新的數(shù)據(jù)獲取會(huì)產(chǎn)生兩種狀況:(1)對(duì)方已發(fā)送過來(lái)數(shù)據(jù)(2)對(duì)方調(diào)用close()導(dǎo)致了recv()返回

MySQL----主鍵約束
主鍵:
primary key,主要的鍵,一張表只能有一個(gè)字段可以使用對(duì)應(yīng)的鍵,用來(lái)唯一的約束該字段里面的數(shù)據(jù),不能重復(fù),這種稱之為主鍵
增加主鍵:
方案一:在創(chuàng)建表的時(shí)候,直接在字段之后,跟primary key關(guān)鍵字(主鍵本身不允許為空)
方案二:在創(chuàng)建表的時(shí)候,在所有的字段之后,使用primary key(主鍵字段列表)來(lái)創(chuàng)建主鍵,如果有多個(gè)字段作為主鍵,可以是復(fù)合主鍵
方案三:當(dāng)表已經(jīng)創(chuàng)建好之后,額外追加主鍵,可以通過修改表字段屬性,也可以直接追加
alter table 表名 add primary key(字段列表);
主鍵約束:
主鍵對(duì)應(yīng)的字段中的數(shù)據(jù)不允許重復(fù),一旦重復(fù),數(shù)據(jù)操作(增和改)失敗
更新主鍵 & 刪除主鍵:
alter table 表名 drop primary key;
主鍵分類:
業(yè)務(wù)主鍵
邏輯主鍵:自增長(zhǎng):
auto_increment,當(dāng)對(duì)應(yīng)的字段,不給值,或給默認(rèn)值、或給NULL值,會(huì)自動(dòng)的被系統(tǒng)觸發(fā),系統(tǒng)會(huì)從當(dāng)前字段中已有的最大值基礎(chǔ)上,再進(jìn)行+1操作,得到一個(gè)新的不同的數(shù)據(jù)
特點(diǎn):
任何一個(gè)字段要做自增長(zhǎng),前提必須本身就是一個(gè)索引
自增長(zhǎng)字段必須是數(shù)字,而且是整型
一張表最多只能有一個(gè)自增長(zhǎng)
修改自增長(zhǎng):alter table 表名 auto_increment=值;
查看自增長(zhǎng)對(duì)應(yīng)的變量:show variables like 'auto_increment%';
刪除自增長(zhǎng):alter table 表名 modify 字段 類型;
唯一鍵(unique key):
默認(rèn)允許自動(dòng)為空,而且可以多個(gè)為空
增加唯一鍵:
方案一:在創(chuàng)建表的時(shí)候,字段之后直接跟unique / unique key
方案二:在所有的字段之后增加unique key(字段列表);
方案三:在創(chuàng)建表之后增加唯一鍵
更新唯一鍵:
alter table 表名 drop index 索引名字;
MySQL中提供了多種索引:
主鍵索引:primary key
唯一索引:unique key
全文索引:fulltext index
普通索引:index
創(chuàng)建:
create [unique] index 索引名 on 表名(字段名(長(zhǎng)度));
alter 表名 add [unique] index [索引名] on (字段名(長(zhǎng)度));
刪除:
drop index [索引名] on 表名;
查看:
show index from 表名\G
使用alter命令添加數(shù)據(jù)表的索引:
alter table 表名 add primary key (字段列表):添加一個(gè)主鍵,意味著索引值必須是唯一且不為空
alter table 表名 add unique 索引名 (字段列表):創(chuàng)建索引的值必須是唯一的,允許NULL,且NULL可能會(huì)出現(xiàn)多次
alter table 表名 add fulltext 索引名 (字段列表):添加全文索引
alter table 表名 add index 索引名 (字段列表):添加普通索引,索引值可出現(xiàn)多次
主鍵沖突(Duplicate key):
更新操作:insert into 表名 [(字段列表)] values(值列表) on duplicate key update 字段=新值;
替換:replace insert into 表名 [(字段列表)] values(值列表);
蠕蟲復(fù)制:
insert into 表名[(字段列表)] select 字段列表/* from 數(shù)據(jù)表名;