MySQL

一劲蜻、mysql(非常重要)

生活中和數(shù)據(jù)相關(guān)的都存在數(shù)據(jù)庫中涮帘。

數(shù)據(jù)庫都有哪些類型呢?
    關(guān)系型 : oracle(收費) mysql(免費)
    非關(guān)系型:redis  MongoDB

SQL: 結(jié)構(gòu)化查詢語言掘剪,就是對數(shù)據(jù)庫  創(chuàng)建庫垦梆、創(chuàng)建表、增刪改查 等操作
SQL分類:DDL(數(shù)據(jù)定義)  DML(數(shù)據(jù)操作)  DQL(數(shù)據(jù)查詢)  DCL(數(shù)據(jù)控制)  DTL(數(shù)據(jù)事物)
數(shù)據(jù)庫如何存儲數(shù)據(jù)厚满?
    數(shù)據(jù)庫服務(wù)器:mysql  oracle
    數(shù)據(jù)庫:boke  market
    數(shù)據(jù)表:每一個庫里面又有好多的表
    數(shù)據(jù)字段:一個表會有好多字段(表頭)府瞄,姓名、年齡痰滋、性別摘能、身高等
    數(shù)據(jù)行:一條真實的數(shù)據(jù)
image.png
安裝數(shù)據(jù)庫
    windows安裝:配置文件  my.ini
    linux安裝: 配置文件    my.conf

基本數(shù)據(jù)類型
    數(shù)據(jù)字段,不同的字段要求有不同的數(shù)據(jù)類型
    整型:
        無符號-有符號敲街,如何表示負(fù)數(shù)团搞,最高位代表符號位,如果是1多艇,代表負(fù)數(shù)逻恐,如果是0,代表正數(shù)
        整數(shù)的原碼峻黍、反碼复隆、補碼都一樣
        原碼、反碼姆涩、補碼
        1000 0001    -1的原碼
        1111 1110    -1的反碼    反碼=原碼符號位不變挽拂,其它按位取反
        1111 1111    -1的補碼    補碼=原碼符號位不變,其他位取反+1=反碼+1
        八位:表示無符號 0-255   表示有符號 -128-127
        int   4個字節(jié)
        tinyint 1個字節(jié)
    浮點:
        decimal(m,d)   其本質(zhì)存字符串
    字符串:
        char : char(32)  最多255   定長
            中文用戶名:周杰倫
            utf8編碼:一個漢字需要3個字節(jié)
            不管多還是少骨饿,只給你32個
        varchar :varchar(32)      變長
            愛新覺羅穆罕默德   24個字節(jié)  
            如果字節(jié)小于32亏栈,那么就為當(dāng)時字節(jié)台腥,如果字節(jié)大于32,最多只能是32
        text :用來存儲文本內(nèi)容
    時間類型
        datetime : 日期時間
        timestamp 绒北;時間戳
        int : 時間戳
    復(fù)合類型:
        set :多選  比如愛好   籃球-足球-羽毛球
        enum : 單選 性別  男-女-人妖
    autoincrement :自動增長黎侈,自增
    default : 默認(rèn)值,當(dāng)沒有給值的時候闷游,它的值為多少峻汉,默認(rèn)為NULL
    not null : 限制一個字段的值不能為NULL
        如果一個字段不能為空,又沒有默認(rèn)值脐往,那么這個字段必須插入值

DDL:
    SQL語句都要以分號結(jié)尾休吠,如果發(fā)現(xiàn)指令寫錯了,添加 \c 清掉所有指令

day12-mysql2

1钙勃、DDL(數(shù)據(jù)定義)

連接數(shù)據(jù)庫
格式:Mysql -h -u 用戶名 -p
-h:表示數(shù)據(jù)庫連接的地址蛛碌,如果是連接本機可不填
-u:表示要登錄的用戶
-p:表示使用密碼登錄

注: -p后接密碼不要直接寫在后面避免有人查找到你的密碼

查看數(shù)據(jù)庫
show databases;

創(chuàng)建數(shù)據(jù)庫
create database 數(shù)據(jù)庫名;

刪除數(shù)據(jù)庫
drop database 庫名;

選中數(shù)據(jù)庫
use 庫名;

查看表
show tables;

創(chuàng)建表
create table 表名(字段名1 字段類型,....字段名n 字段類型n);
create table user(username varchar(30), password char(32));

查看表結(jié)構(gòu)(表字段)
desc 表名;
desc user;

查看表創(chuàng)建語句
show create table user;

1.刪除表
drop table 表名;
drop table user;

2.清空表
truncate table 表名稱;
truncate table dbo.Sys_Test
3辖源、delete from 表名稱 where 列名稱 = 值
delete from dbo.Sys_Test where test='test'

創(chuàng)建表指定字符集和引擎
查看創(chuàng)建庫及表語句
show create database 庫名;
show create table 表名;
創(chuàng)建表時指定(每次指定)
存儲引擎 engine=InnoDB
創(chuàng)建表時指定字符集default charset=utf8
設(shè)置配置文件(統(tǒng)一設(shè)置)
存儲引擎:default-storage-engine=InnoDB
字符集:character_set_server=utf8

修改字段類型(了解)
alter table 表名 modify 字段名 varchar(20);
alter table user modify username varchar(20);

添加字段
alter table 表名 add 字段名 類型;
alter table user add email varchar(30)
添加字段到指定位置的后面
alter table 表名 add 字段名 字段類型 after 字段名;
alter table user add email varchar(30) after username;
添加id在字段的最前面(int默認(rèn)11)
Alter table user add id int first;

刪除字段
alter table 表名 drop 字段名;
alter table user drop age;

表字段改名
alter table 表名 change 字段原名 字段新名 字段類型;
alter table user change email em varchar(60);

修改表名
alter table 舊表名 rename 新的表名;
alter table user rename new_user;

2蔚携、DML(數(shù)據(jù)操作)

增刪改查 ---create update read delta --- 簡稱:curd操作

(1)首先通過 進入數(shù)據(jù)庫系統(tǒng)--->mysql -uroot -p
(2)創(chuàng)建數(shù)據(jù)庫dudu,--->create database 數(shù)據(jù)庫名;
(3)進入數(shù)據(jù)庫dudu--->use dudu克饶,
(4)然后才是創(chuàng)建表的過程

【注意】所有的符號都是英文酝蜒。

創(chuàng)建表開始學(xué)習(xí)增刪改
mysql> create table user(
-> id int auto_increment,
-> name varchar(30) not null,
-> money int not null,
-> province varchar(20) default null,
-> age tinyint unsigned not null,
-> sex enum('女', '男') not null,
-> primary key(id)
-> )engine=innodb default charset=utf8;
【注】單選在插入值的時候,可以直接使用1 2矾湃,那么1代表女亡脑,2代表男,

enum(單選)類型如果不給值邀跃,默認(rèn)是第一個

Set(多選)類型如何插入霉咨?
set('吃', '喝', '玩', '睡', '滾')
1 2 4 8 16
4|8|16 如果是后三個,可以這么寫
28 也可以加起來拍屑,這么寫

1.插入記錄
insert into 表 values(值1,值2,值n);
insert into star values(1, '王寶強', 1000, '河北' ,32, 2);
說明:向user表中插入值id為1途戒,姓名為王寶強,余額為0僵驰,省份為河北喷斋,年齡為32,性別為2(男)

2.對指定字段的插入
insert into 表(字段1,字段2,字段n) values(值1,值2,值n);
insert into star(name, money, province, age, sex) values('郭德綱', 1000000, '天津', 43, 0);
說明:向user表中插入值蒜茴,姓名為郭德綱星爪,余額為1000000,省份為天津粉私,年齡為43顽腾,性別為0(男)

如果沒有賦值,就為默認(rèn)值诺核,如果默認(rèn)值也沒有就報錯崔泵,id不用插入秒赤,系統(tǒng)會自動維護

3.插入多個值
insert into star(name, money, province, age, sex)
values('黃曉明', 2000000, '山東', 39, 0),
( 'angelababy', 3000000, '上海', 27, 1),
( '陳赫', 150000, '福建', 31, 0);

【注意】插入數(shù)據(jù)可以不傳值的情況:
(1)自增的字段可以不用傳入值(每插入一條該字段的值會自動加1)
(2)有默認(rèn)值
(3)可為空的字段可不傳
說明:插入記錄2的方式為更常用的用法

4.刪除記錄
delete from 表 where 條件;
delete from star where id=5;
說明:刪除表star中id為5的行

【注意】:where必須要加,否則后果自負(fù)

5.修改記錄
update 表 set 字段1=值1,字段2=值2 where 條件;
update star set money=money+3, sex=1 where id=1;
說明:將star表中id為1的行的money設(shè)為原來的數(shù)字加上3憎瘸,sex設(shè)為1

6.基礎(chǔ)查詢
select * from 表;
select * from star;
說明:查詢star表中所有字段中的所有結(jié)果

3、可視化工具

當(dāng)你去操作數(shù)據(jù)庫的時候陈瘦,其實有3中方式
(1)使用mysql自帶的客戶端進行操作
(2)使用一些第三方的可視化工具管理數(shù)據(jù)庫  比如navicate幌甘、sqlyog
(3)使用代碼去操作數(shù)據(jù)庫,比如python痊项、java锅风、php

4、DQL

query : 查詢
模糊查詢:like  '%德%'  只要有 德 字的都符合要求
        % 代表任意多的字符
        like '柳_'   叫 柳某 的都符合要求
        _ 代表一個任意字符
limit:
    limit 2 : 在結(jié)果集中只要前兩個
    limit offset, number : offset代表偏移量鞍泉,number代表數(shù)量
    LIMIT number1 OFFSET number2 : number1 是數(shù)量  number2 是偏移量

上網(wǎng)的時候皱埠,經(jīng)常會有分頁,每頁顯示10條咖驮,
第一頁:select * from table limit 0, 10
第二頁:select * from table limit 10, 10
第三頁:select * from table limit 20, 10
第n頁:select * from table limit (n-1)*10, 10

對于查詢或者排序后的結(jié)果集边器,如果希望只顯示一部分,使用limit關(guān)鍵字對結(jié)果集進行數(shù)量限制托修。


分組:
    字段只能出現(xiàn)分組字段和統(tǒng)計信息忘巧,其它的字段出現(xiàn)沒有意義
    select province, count(*) from user group by province;
    select province, count(*) as c from user group by province having c>=2;
    【注】having經(jīng)常跟在group by的后面,where是跟在表的后面
select使用順序
    SELECT xxx FROM xxx WHERE xxx GROUP BY xxx HAVING xxx ORDER BY xxx LIMIT xxx;
    取出擁有年齡大于30歲的明星個數(shù)大于兩個且第二多的省份

基礎(chǔ)查詢
select * from 表;
select * from star;
說明:查詢star表中所有字段中的所有結(jié)果

指定字段查詢
select 字段 from 表;
select id, name, money from star;
說明:查詢star表中id, username, money字段

指定字段組合不重復(fù)記錄
select distinct 字段 from 表;
select distinct age, sex from star;
說明:查詢star表中age和sex組合的不重復(fù)結(jié)果

條件查詢
select 字段 from 表 where 條件;
select * from star where age=43;
說明:查詢star表中age為43的所有結(jié)果

where后可接的條件

image.png

示例:
image.png

結(jié)果集排序
select 字段 from 表 order by 字段 排序關(guān)鍵詞
select id, name, money from star order by money desc;
說明:查詢star表中的id, name, money字段睦刃,按照余額進行降序排序
asc--->升序排列砚嘴,從小到大(默認(rèn))
desc--->降序排列,從大到小

多字段排序
select 字段 from 表 order by 字段1 desc|asc, ... ,字段n desc|asc;
select id, name, money from star order by money desc, age asc;
說明:查詢star表中的id, name, money字段涩拙,按照余額進行降序排序,若余額全都一樣际长,則再使用age進行升序排序

限制查詢的結(jié)果集
select 字段 from 表 limit 數(shù)量;
select id, name, money from star limit 5;
說明:顯示前5個記錄

限制排序后的結(jié)果集
select 字段 from 表 order by 字段 排序規(guī)則 limit 數(shù)量
select id, name, money from star order by money desc limit 5;
說明:按照money來排序,顯示前5個最有錢的記錄

結(jié)果集區(qū)間選擇
select 字段 from 表 limit 偏移量,數(shù)量
select id, name, money from star limit 0,3;
說明:取從第一條開始的三條記錄

常用統(tǒng)計函數(shù)

image.png

統(tǒng)計函數(shù)使用
select 函數(shù)(字段) from 表
select count(id) from star;
說明:查詢star表的id總數(shù)

分組
select * from 表 group by 字段
select * from star group by province;
說明:按照province進行分組

分組統(tǒng)計
select * from 表 group by 字段
select count(*), province from star group by province;
說明:對分組進行單獨統(tǒng)計

結(jié)果集過濾
select * from 表 group by 字段 having 條件
select count(province) as result , province from star group by province having result>2;
說明:對province分組并統(tǒng)計總數(shù)兴泥,將分組結(jié)果中大于2的分組顯示出來

整體使用SQL

image.png

要求:
1.在star表中找出年齡大于30的明星
2.按照省份分組
3.找到明星個數(shù)大于1的省份
4.找到個數(shù)第二多的省份及個數(shù)

day13-mysql工育、redis

1、多表聯(lián)合查詢

多表聯(lián)合
        mysql> create table user(
            -> id int auto_increment,
            -> name varchar(30) not null,
            -> gid varchar(10) default 0,
            -> primary key(id)
            -> )engine=innodb default charset=utf8;

        mysql> create table goods(
            -> gid int auto_increment,
            -> name varchar(30) not null,
            -> price int not null,
            -> category varchar(20) not null,
            -> primary key(gid)
            -> )engine=innodb default charset=utf8;

        mysql> insert into user(name, gid) values('郭德綱', 1),
            -> ('岳云鵬', 2),
            -> ('曹云金', 0),
            -> ('于謙', 3),
            -> ('牛群', 1),
            -> ('馮鞏', 1),
            -> ('大兵', 4),
            -> ('馬三立', 0),
            -> ('賈玲', 2);
        
        隱式內(nèi)連接
            select user.name as uname, goods.name as gname from user, goods where user.gid=goods.gid;
        顯示內(nèi)連接
            select * from user as u join goods as g on u.gid=g.gid;
            select u.name as uname, g.name as gname from user as u join goods as g on u.gid=g.gid;
        三表鏈接格式
            select * from user as u join goods as g on u.gid=g.gid join price as p on g.pid=p.pid


多表聯(lián)合查詢分類
1.內(nèi)連接--->分為隱式內(nèi)連接顯示內(nèi)連接
選出兩個表中存在連接關(guān)系的字段符合連接關(guān)系的那些記錄郁轻。
2.外連接--->分為左連接外右連接
會選出其他不匹配的記錄翅娶,分為外左連接和外右連接

隱式內(nèi)連接
select 表1.字段 [as 別名], 表n.字段 from 表1 [別名], 表n where 條件;
select username, name from user, goods where user.gid=goods.gid;
說明:查詢用戶表中哪些用戶購買過商品,并將商品信息顯示出來

注意:以上方式稱為隱式內(nèi)連接好唯,因為沒有出現(xiàn)join關(guān)鍵字

顯式內(nèi)連接
select 表1.字段 [as 別名],表n.字段 from 表1 inner join 表2 on 條件;
select username, name from user inner join goods on user.gid=goods.gid;
說明:查詢用戶表中哪些用戶購買過商品竭沫,并將商品信息顯示出來

注意:以上方式的inner關(guān)鍵字換成cross同樣可以,其實也可以省略

外連接之左連接
select 表1.字段 [as 別名], 表n.字段 from 表1 left join 表n on 條件;
select * from user left join goods on user.gid = goods.gid;
說明:以左邊為主骑篙,查詢哪些用戶購買過商品蜕提,并將商品信息顯示出來

左連接:包含所有的左邊表中的記錄甚至是右邊表中沒有和它匹配的記錄

外連接之右連接
select 表1.字段 [as 別名], 表n.字段 from 表1 right join 表n on 條件;
select * from user right join goods on user.gid = goods.gid;
說明:以右邊為主,查詢哪些商品有用戶購買靶端,并將用戶信息顯示出來

右連接:包含所有的右邊表中的記錄甚至是左邊表中沒有和它匹配的記錄

1.查詢沒有被購買過的商品
select goods.name from goods left join user on goods.gid=user.gid where user.id is NULL;

  1. 查詢哪類商品是銷量冠軍
    select category, count(*) as c from user join goods on user.gid=goods.gid group by category order by c desc limit 1;

3.查詢哪個商品是銷量冠軍
select goods.name, goods.price, count(*) as c from user join goods on user.gid=goods.gid group by goods.name order by c desc limit 1;

分組只能寫分組字段和統(tǒng)計字段谎势,寫其它字段報錯
    進入mysql執(zhí)行如下指令
    SET @@GLOBAL.sql_mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";

子(嵌套)查詢
select 字段 from 表 where 字段 in(條件)
select * from user where gid in (1,3,4); 說明:按照id 查詢指定用戶
select * from user where gid in (select gid from goods); 說明:將購買過商品的用戶信息顯示出來

記錄聯(lián)合
select 語句1 union[all] select 語句2
左連接 union 右連接; 說明:將商品表中的信息和用戶表中的信息的組合在一起

使用 union 和 union all 關(guān)鍵字凛膏,將兩個表的數(shù)據(jù)按照一定的查詢條件查詢出后,將結(jié)果合并到一起顯示脏榆。兩者主要的區(qū)別是把結(jié)果直接合并在一起猖毫,而 union 是將 union all 后的結(jié)果進行一次distinct,去除重復(fù)記錄后的結(jié)果须喂。

修改更新
update 表名 set 字段1=值1, …, 字段n=值n where 條件
update money set balance=balance-500 where userid = 15;
說明:修改money表吁断,將balance余額減500。要求userid為15

兩個表同時更新
update 表1,表2 set 字段1=值1, …, 字段n=值n where 條件
update user u, goods g set u.gid=0, g.price=1799 where u.id=8 and u.gid=g.gid;
說明:user表的別名設(shè)置為u坞生,將goods表的別名設(shè)置為g仔役;將u表的gid改為0,g表的price改為1799是己。執(zhí)行條件是:u.id = 8并且gid相等

清空表
truncate table 表名 清空表又兵,id會從1開始自增
delete from table 清空表,id從上次記錄的值開始

注意:delete刪除表中的所有數(shù)據(jù)卒废,自增的id會繼續(xù)從原有的值增加

創(chuàng)建用戶
mysql -h ip地址 -u用戶名 -p
Create user ‘用戶名’@‘用戶地址’ identified by ‘密碼’;
create user 'test'@'ip' identified by '密碼'
說明:創(chuàng)建用戶沛厨,并且設(shè)置密碼

刪除用戶
drop user ‘用戶名’@‘用戶地址’;
drop user ‘test’@‘192.168.10.1’;

授予權(quán)限
grant 權(quán)限 on . to ‘用戶名’@‘用戶地址’;
grant 權(quán)限 on . to ‘test’@‘192.168.10.1’;

剝奪權(quán)限
revoke 權(quán)限 on . from ‘用戶名’@‘用戶地址’;
revoke 權(quán)限 on . from ‘test’@‘192.168.10.1’;

2、索引

索引是什么升熊?索引就是個東西俄烁,類似是目錄的東西
數(shù)據(jù)庫在查詢的時候,是一條一條挨著查呢级野。查詢效率太低了页屠。
如何提高查詢效率?索引
如果在查詢的時候蓖柔,經(jīng)常通過某個字段查詢辰企,那就要考慮給這個字段添加索引。
索引的缺點:在插入的時候效率就比較低

索引有類型
普通索引
唯一索引 要確保唯一性
主鍵索引 是特殊的唯一索引况鸣,但是不能為空
全文索引
查看索引
show index from tablename;
show index from user;
查看user表的索引結(jié)構(gòu)
普通索引

索引

唯一索引

image.png

主鍵索引

image.png

全文索引

image.png

刪除索引

image.png

3牢贸、數(shù)據(jù)庫導(dǎo)入導(dǎo)出

數(shù)據(jù)庫里面的表可以導(dǎo)出來,導(dǎo)出來一般都是sql腳本的東西镐捧,  data.sql
【注】版本潜索,通過指令導(dǎo)出和通過不同的可視化工具導(dǎo)出,格式也不一樣懂酱。
mysql自帶的指令:
    正常終端模式下
    導(dǎo)出:mysqldump -uroot -p 數(shù)據(jù)庫名>c:\data.sql
    導(dǎo)入:mysql -uroot -p 數(shù)據(jù)庫名<c:\data.sql
    注意竹习,導(dǎo)入之前首先創(chuàng)建一個新的數(shù)據(jù)庫
Navicat導(dǎo)出和導(dǎo)入:
    右鍵==》轉(zhuǎn)儲sql文件
    右鍵==》運行sql文件

4、python操作數(shù)據(jù)庫

需要使用到第三方庫:pymysql列牺,在python交互界面輸入 import pymysql 看有沒有報錯整陌,報錯了就是沒有它,沒報錯就是有它
安裝之:pip install pymysql
代碼操作之
    port只能是整型
import pymysql

# 第一步,連接數(shù)據(jù)庫泌辫,類似于指令里面的  mysql -uroot -p
# mysql -h地址 -uroot -p
'''
連接數(shù)據(jù)庫需要用到的參數(shù)
主機:host
端口:port
用戶名:user
密碼:password
指定數(shù)據(jù)庫:db
指定字符集:charset
'''
db = pymysql.connect(host='localhost', port=3306, user='root', password='123456', db='dudu', charset='utf8')
# 連接成功之后随夸,得到一個對象
# print(db)
# 首先根據(jù)db得到游標(biāo),游標(biāo)就是執(zhí)行sql語句用到的東西
# cursor = db.cursor()

# 給cursor添加一個參數(shù)震放,讓其的到數(shù)據(jù)是一個字典
cursor = db.cursor(cursor=pymysql.cursors.DictCursor)
# 準(zhǔn)備sql語句宾毒,執(zhí)行sql語句
sql = 'select * from star'
# 返回結(jié)果rows是受影響的行數(shù)
rows = cursor.execute(sql)
# print(rows)
# 通過cursor的方法得到數(shù)據(jù)
# 返回一個元組,元組里面每個元素的值對應(yīng)的就是數(shù)據(jù)表中每個字段對應(yīng)的值
# 獲取內(nèi)容的時候澜搅,里面有個迭代器在記錄你的位置
# print(cursor.fetchone())
# print(cursor.fetchone())
# print(cursor.fetchone())
# print(cursor.fetchone())
# print(cursor.fetchmany(5))
# print(cursor.fetchmany(5))

# 元組里面套元組
# print(cursor.fetchall())

# 打印得到所有的用戶名
ret = cursor.fetchall()
for obj in ret:
    print('我叫%s,我來自%s,我有%s¥' % (obj['name'], obj['province'], obj['money']))
# print(ret)
# 遍歷每一個元組
# for tp in ret:
#     print(tp[1])

# 最后呀伍俘,要記得關(guān)閉
cursor.close()
db.close()
import pymysql

db = pymysql.connect(host='localhost', port=3306, user='root', passwd='123456', db='dudu', charset='utf8')
# print(db)
cursor = db.cursor()
sql = 'select * from start'

# 查詢語句,通過try-except勉躺,讓代碼更加健壯
try:
    ret = cursor.execute(sql)
    print(cursor.fetchall())
except Exception as e:
    print(e)
finally:
    cursor.close()
    db.close()
import pymysql

db = pymysql.connect(host='localhost', port=3306, user='root', passwd='123456', db='dudu', charset='utf8')
cursor = db.cursor()

'''
# 準(zhǔn)備sql語句
obj = {'name': '李云龍', 'money': '20', 'province': '河南', 'age': 36, 'sex': '男'}
# 注意,這里的引號需要加
sql = 'insert into star(name, money, province, age, sex) values("%s", "%s", "%s", "%s", "%s")' % (obj['name'], obj['money'], obj['province'], obj['age'], obj['sex'])
'''

# id = 8
# sql = 'delete from star where id=%s' % id

sql = 'update star set name="馬德華" where id=12'

# 注意觅丰,沒有添加進去饵溅,是因為沒有提交,需要提交才能成功
try:
    cursor.execute(sql)
    # 提交妇萄,寫入磁盤
    db.commit()
except Exception as e:
    print(e)
    # 回滾到最初始的狀態(tài)
    db.rollback()
finally:
    cursor.close()
    db.close()

import pymysql

class MyMysql(object):
    def __init__(self, host, port, user, password, db, charset):
        self.host = host
        self.port = port
        self.user = user
        self.password = password
        self.db = db
        self.charset = charset
        # 鏈接數(shù)據(jù)庫
        self.connect()
    
    def connect(self):
        # 鏈接數(shù)據(jù)庫和獲取游標(biāo)
        self.db = pymysql.connect(host=self.host, port=self.port, user=self.user, password=self.password, db=self.db, charset=self.charset)
        self.cursor = self.db.cursor()
    
    def run(self, sql):
        ret = None
        try:
            ret = self.cursor.execute(sql)
            self.db.commit()
        except Exception as e:
            self.db.rollback()
        finally:
            self.close()
        return ret
            
    def close(self):
        self.cursor.close()
        self.db.close()
    
    def insert(self, sql):
        return self.run(sql)
    
    def update(self, sql):
        return self.run(sql)
    
    def delete(self, sql):
        return self.run(sql)
    
    def read_one(self, sql):
        ret = None
        try:
            self.cursor.execute(sql)
            # 獲取得到數(shù)據(jù)
            ret = self.cursor.fetchone()
        except Exception as e:
            print('查詢失敗')
        finally:
            self.close()
        return ret
    
    def read_many(self, sql):
        ret = None
        try:
            self.cursor.execute(sql)
            # 獲取得到數(shù)據(jù)
            ret = self.cursor.fetchall()
        except Exception as e:
            print('查詢失敗')
        finally:
            self.close()
        return ret

5蜕企、redis安裝和學(xué)習(xí)

什么是redis?是一個基于內(nèi)存的數(shù)據(jù)庫冠句,計算機里面轻掩,有內(nèi)存,有硬盤
文件都在硬盤中存放懦底,代碼在運行的時候唇牧,有一個變量a
內(nèi)存:讀寫快,但是斷電消失聚唐,不大
硬盤:讀寫慢丐重,但是可以持久化保存,大杆查,隨便存
什么是NoSQL扮惦?  not only sql  非關(guān)系型數(shù)據(jù)庫
鍵值對,根據(jù)鍵立馬就可以得到值
redis亲桦、MongoDB

redis官網(wǎng):redis.io   redis.cn
5種數(shù)據(jù)類型:字符串(string)崖蜜、列表(list)、集合(set)客峭、哈希(hash)豫领、有序集合(zset)
redis官網(wǎng)只有l(wèi)inux版本的,不支持windows

學(xué)習(xí)方式:指令交互桃笙,可視化氏堤,代碼操作
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子鼠锈,更是在濱河造成了極大的恐慌闪檬,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,013評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件购笆,死亡現(xiàn)場離奇詭異粗悯,居然都是意外死亡,警方通過查閱死者的電腦和手機同欠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評論 2 382
  • 文/潘曉璐 我一進店門样傍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人铺遂,你說我怎么就攤上這事衫哥。” “怎么了襟锐?”我有些...
    開封第一講書人閱讀 152,370評論 0 342
  • 文/不壞的土叔 我叫張陵撤逢,是天一觀的道長。 經(jīng)常有香客問我粮坞,道長蚊荣,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,168評論 1 278
  • 正文 為了忘掉前任莫杈,我火速辦了婚禮互例,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘筝闹。我一直安慰自己媳叨,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,153評論 5 371
  • 文/花漫 我一把揭開白布丁存。 她就那樣靜靜地躺著肩杈,像睡著了一般。 火紅的嫁衣襯著肌膚如雪解寝。 梳的紋絲不亂的頭發(fā)上扩然,一...
    開封第一講書人閱讀 48,954評論 1 283
  • 那天,我揣著相機與錄音聋伦,去河邊找鬼夫偶。 笑死,一個胖子當(dāng)著我的面吹牛觉增,可吹牛的內(nèi)容都是我干的兵拢。 我是一名探鬼主播,決...
    沈念sama閱讀 38,271評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼逾礁,長吁一口氣:“原來是場噩夢啊……” “哼说铃!你這毒婦竟也來了访惜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,916評論 0 259
  • 序言:老撾萬榮一對情侶失蹤腻扇,失蹤者是張志新(化名)和其女友劉穎债热,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體幼苛,經(jīng)...
    沈念sama閱讀 43,382評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡窒篱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,877評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了舶沿。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片墙杯。...
    茶點故事閱讀 37,989評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖括荡,靈堂內(nèi)的尸體忽然破棺而出高镐,到底是詐尸還是另有隱情,我是刑警寧澤畸冲,帶...
    沈念sama閱讀 33,624評論 4 322
  • 正文 年R本政府宣布避消,位于F島的核電站,受9級特大地震影響召夹,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜恕沫,卻給世界環(huán)境...
    茶點故事閱讀 39,209評論 3 307
  • 文/蒙蒙 一监憎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧婶溯,春花似錦鲸阔、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至叙身,卻和暖如春渔扎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背信轿。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評論 1 260
  • 我被黑心中介騙來泰國打工晃痴, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人财忽。 一個月前我還...
    沈念sama閱讀 45,401評論 2 352
  • 正文 我出身青樓倘核,卻偏偏與公主長得像,于是被迫代替她去往敵國和親即彪。 傳聞我的和親對象是個殘疾皇子紧唱,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,700評論 2 345

推薦閱讀更多精彩內(nèi)容