增刪改查

from pymysql? import *

class JD(object):

def __init__(self):

# 創(chuàng)建Connection連接

? ? ? ? self.conn = connect(host='localhost', port=3306, user='root', password='wjh830724', database='jd', charset='utf8')

# 獲得Cursor對(duì)象

? ? ? ? self.cursor =self.conn.cursor()

def excute_sql(self,sql):

self.cursor.execute(sql)

for tempin self.cursor.fetchall():

print(temp)

def show_all_items(self):

"""查詢所有商品"""

? ? ? ? sql ='select * from goods;'

? ? ? ? self.excute_sql(sql)

def? __del__(self):

# 關(guān)閉Cursor對(duì)象

? ? ? ? self.cursor.close()

self.conn.close()

def show_cates(self):

"""所有的商品分類"""

? ? ? ? sql ='select name from goods_cates;'

? ? ? ? self.excute_sql(sql)

def show_brands(self):

"""所有商品品牌分類"""

? ? ? ? sql ='select name from goods_brands;'

? ? ? ? self.excute_sql(sql)

def add_cates(self):

"""添加商品分類"""

? ? ? ? item_name = input('請(qǐng)輸入新類商品名稱:')

sql ="""insert into goods_cates (name) values ("%s");""" %item_name

self.cursor.execute(sql)

self.conn.commit()

def delete_cates(self):

"""刪除商品分類"""

? ? ? ? item_name = input('請(qǐng)輸入新類商品名稱:')

sql ="""delete from goods_cates where name = '%s';""" %item_name

self.cursor.execute(sql)

self.conn.commit()

def update_cates(self):

"""修改商品分類"""

? ? ? ? item_name_old = input('請(qǐng)輸入更改前名字:')

item_name_new = input('請(qǐng)輸入更改后名字:')

sql ="""update goods_cates set name = '%s' where name = '%s';""" %(item_name_new,item_name_old)

self.cursor.execute(sql)

self.conn.commit()

def get_into_by_name(self):

fint_name = input('請(qǐng)輸入商品名字:')

# sql = """select * from goods where name="%s";""" %fint_name

# print("-->%s<--" % sql)

# self.cursor.execute(sql)

? ? ? ? sql ="select * from goods where name=%s"

? ? ? ? self.cursor.execute(sql,[fint_name])

print(self.cursor.fetchall())

def add_brands(self):

"""添加商品品牌分類"""

? ? ? ? item_name = input('請(qǐng)輸入新類商品名稱:')

sql ="""insert into goods_brands (name) values ("%s");""" %item_name

self.cursor.execute(sql)

self.conn.commit()

def delete_brands(self):

"""刪除商品品牌分類"""

? ? ? ? item_name = input('請(qǐng)輸入新類商品名稱:')

sql ="""delete from goods_brands where name = '%s';""" %item_name

self.cursor.execute(sql)

self.conn.commit()

def update_brands(self):

"""修改商品品牌分類"""

? ? ? ? item_name_old = input('請(qǐng)輸入更改前名字:')

item_name_new = input('請(qǐng)輸入更改后名字:')

sql ="""update goods_brands set name = '%s' where name = '%s';""" %(item_name_new,item_name_old)

self.cursor.execute(sql)

self.conn.commit()

@staticmethod

? ? def print_menu():

print('------京東------')

print('1.所有商品')

print('2.所有的商品分類')

print('3.所有商品品牌分類')

print('4.添加商品分類')

print('5.刪除商品分類')

print('6.修改商品分類')

print('7.根據(jù)名字查詢商品')

print('8.添加商品品牌')

print('9.刪除商品品牌')

print('10.修改商品品牌')

return input('請(qǐng)輸入功能應(yīng)用序號(hào):')

def run(self):

while True:

num =self.print_menu()

if num =='1':

#所有商品

? ? ? ? ? ? ? ? self.show_all_items()

elif num =='2':

#所有的商品分類

? ? ? ? ? ? ? ? self.show_cates()

elif num =='3':

#所有商品品牌分類

? ? ? ? ? ? ? ? self.show_brands()

elif num =='4':

#添加商品分類

? ? ? ? ? ? ? ? self.add_cates()

elif num =='5':

#刪除商品分類

? ? ? ? ? ? ? ? self.delete_cates()

elif num =='6':

#修改商品分類

? ? ? ? ? ? ? ? self.update_cates()

elif num =='7':

#根據(jù)名字查詢商品

? ? ? ? ? ? ? ? self.get_into_by_name()

elif num =='8':

#添加商品品牌分類

? ? ? ? ? ? ? ? self.add_brands()

elif num =='9':

#刪除商品品牌分類

? ? ? ? ? ? ? ? self.delete_brands()

elif num =='10':

#修改商品品牌分類

? ? ? ? ? ? ? ? self.update_brands()

else:

print('輸入錯(cuò)誤')

def main():

#創(chuàng)建對(duì)象

? ? jd = JD()

#用一個(gè)run方法跑來

? ? jd.run()

if? __name__ =='__main__':

main()

索引

索引是什么

索引是一種特殊的文件(InnoDB數(shù)據(jù)表上的索引是表空間的一個(gè)組成部分),它們包含著對(duì)數(shù)據(jù)表里所有記錄的引用指針。

更通俗的說,數(shù)據(jù)庫索引好比是字典前面的目錄,能加快數(shù)據(jù)庫的查詢速度

索引目的

提高查詢效率

-- 開啟運(yùn)行時(shí)間監(jiān)測(cè):

set profiling=1;

-- 查看執(zhí)行的時(shí)間:

show profiles;

-- 查看索引

show indexfrom 表名;

-- 刪除索引:

drop index索引名稱 on 表名;

所以比較占磁盤,比建議建索引

如果數(shù)據(jù)很大,并且經(jīng)常查,建立索引

賬戶管理

在生產(chǎn)環(huán)境下操作數(shù)據(jù)庫時(shí),絕對(duì)不可以使用root賬戶連接,而是創(chuàng)建特定的賬戶,授予這個(gè)賬戶特定的操作權(quán)限,然后連接進(jìn)行操作,主要的操作就是數(shù)據(jù)的crud

MySQL賬戶體系:根據(jù)賬戶所具有的權(quán)限的不同,MySQL的賬戶可以分為以下幾種

服務(wù)實(shí)例級(jí)賬號(hào):啟動(dòng)了一個(gè)mysqld,即為一個(gè)數(shù)據(jù)庫實(shí)例;如果某用戶如root,擁有服務(wù)實(shí)例級(jí)分配的權(quán)限,那么該賬號(hào)就可以刪除所有的數(shù)據(jù)庫、連同這些庫中的表

數(shù)據(jù)庫級(jí)別賬號(hào):對(duì)特定數(shù)據(jù)庫執(zhí)行增刪改查的所有操作

數(shù)據(jù)表級(jí)別賬號(hào):對(duì)特定表執(zhí)行增刪改查等所有操作

字段級(jí)別的權(quán)限:對(duì)某些表的特定字段進(jìn)行操作

存儲(chǔ)程序級(jí)別的賬號(hào):對(duì)存儲(chǔ)程序進(jìn)行增刪改查的操作

賬戶的操作主要包括創(chuàng)建賬戶、刪除賬戶、修改密碼、授權(quán)權(quán)限等

授予權(quán)限

需要使用實(shí)例級(jí)賬戶登錄后操作,以root為例

主要操作包括:

查看所有用戶

修改密碼

刪除用戶

查看所有用戶

所有用戶及權(quán)限信息存儲(chǔ)在mysql數(shù)據(jù)庫的user表中

查看user表的結(jié)構(gòu)

desc user;

主要字段說明:

Host表示允許訪問的主機(jī)

User表示用戶名

authentication_string表示密碼,為加密后的值

查看所有用戶

selecthost,user,authentication_stringfromuser;

建賬戶、授權(quán)

需要使用實(shí)例級(jí)賬戶登錄后操作,以root為例

常用權(quán)限主要包括:create、alter、drop、insert、update、delete、select

如果分配所有權(quán)限,可以使用all privileges

grant權(quán)限列表on數(shù)據(jù)庫to'用戶名'@'訪問主機(jī)'identifiedby'密碼';

查看用戶有哪些權(quán)限

show grants for laoweng@localhost;

賬戶操作

修改權(quán)限

grant權(quán)限名稱on數(shù)據(jù)庫to賬戶@主機(jī)with grant option;

-- 刷新權(quán)限flush privileges;

修改密碼

使用root登錄,修改mysql數(shù)據(jù)庫的user表

使用password()函數(shù)進(jìn)行密碼加密

update user set authentication_string=password('新密碼') where user='用戶名';

例:update user set authentication_string=password('123') where user='laoweng';

注意修改完成后需要刷新權(quán)限

刷新權(quán)限:flush privileges

遠(yuǎn)程登錄(危險(xiǎn)慎用)

如果向在一個(gè)Ubuntu中使用msyql命令遠(yuǎn)程連接另外一臺(tái)mysql服務(wù)器的話,通過以下方式即可完成,但是此方法僅僅了解就好了,不要在實(shí)際生產(chǎn)環(huán)境中使用

修改 /etc/mysql/mysql.conf.d/mysqld.cnf 文件

sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

然后重啟msyql

sudo service mysql restart

刪除賬戶

1.使用root登錄? ?推薦使用

drop user'用戶名'@'主機(jī)';

2.使用root登錄,刪除mysql數(shù)據(jù)庫的user表中數(shù)據(jù)

delete from user where user='用戶名';

-- 操作結(jié)束之后需要刷新權(quán)限flush privileges

MySQL主從同步配置

1. 主從同步的定義

主從同步使得數(shù)據(jù)可以從一個(gè)數(shù)據(jù)庫服務(wù)器復(fù)制到其他服務(wù)器上,在復(fù)制數(shù)據(jù)時(shí),一個(gè)服務(wù)器充當(dāng)主服務(wù)器(master),其余的服務(wù)器充當(dāng)從服務(wù)器(slave)。因?yàn)閺?fù)制是異步進(jìn)行的,所以從服務(wù)器不需要一直連接著主服務(wù)器,從服務(wù)器甚至可以通過撥號(hào)斷斷續(xù)續(xù)地連接主服務(wù)器。通過配置文件,可以指定復(fù)制所有的數(shù)據(jù)庫,某個(gè)數(shù)據(jù)庫,甚至是某個(gè)數(shù)據(jù)庫上的某個(gè)表。

使用主從同步的好處:

通過增加從服務(wù)器來提高數(shù)據(jù)庫的性能,在主服務(wù)器上執(zhí)行寫入和更新,在從服務(wù)器上向外提供讀功能,可以動(dòng)態(tài)地調(diào)整從服務(wù)器的數(shù)量,從而調(diào)整整個(gè)數(shù)據(jù)庫的性能。

提高數(shù)據(jù)安全,因?yàn)閿?shù)據(jù)已復(fù)制到從服務(wù)器,從服務(wù)器可以終止復(fù)制進(jìn)程,所以,可以在從服務(wù)器上備份而不破壞主服務(wù)器相應(yīng)數(shù)據(jù)

在主服務(wù)器上生成實(shí)時(shí)數(shù)據(jù),而在從服務(wù)器上分析這些數(shù)據(jù),從而提高主服務(wù)器的性能

2. 主從同步的機(jī)制

Mysql服務(wù)器之間的主從同步是基于二進(jìn)制日志機(jī)制,主服務(wù)器使用二進(jìn)制日志來記錄數(shù)據(jù)庫的變動(dòng)情況,從服務(wù)器通過讀取和執(zhí)行該日志文件來保持和主服務(wù)器的數(shù)據(jù)一致。

在使用二進(jìn)制日志時(shí),主服務(wù)器的所有操作都會(huì)被記錄下來,然后從服務(wù)器會(huì)接收到該日志的一個(gè)副本。從服務(wù)器可以指定執(zhí)行該日志中的哪一類事件(譬如只插入數(shù)據(jù)或者只更新數(shù)據(jù)),默認(rèn)會(huì)執(zhí)行日志中的所有語句。

每一個(gè)從服務(wù)器會(huì)記錄關(guān)于二進(jìn)制日志的信息:文件名和已經(jīng)處理過的語句,這樣意味著不同的從服務(wù)器可以分別執(zhí)行同一個(gè)二進(jìn)制日志的不同部分,并且從服務(wù)器可以隨時(shí)連接或者中斷和服務(wù)器的連接。

主服務(wù)器和每一個(gè)從服務(wù)器都必須配置一個(gè)唯一的ID號(hào)(在my.cnf文件的[mysqld]模塊下有一個(gè)server-id配置項(xiàng)),另外,每一個(gè)從服務(wù)器還需要通過CHANGE MASTER TO語句來配置它要連接的主服務(wù)器的ip地址,日志文件名稱和該日志里面的位置(這些信息存儲(chǔ)在主服務(wù)器的數(shù)據(jù)庫里)

3. 配置主從同步的基本步驟

有很多種配置主從同步的方法,可以總結(jié)為如下的步驟:

在主服務(wù)器上,必須開啟二進(jìn)制日志機(jī)制和配置一個(gè)獨(dú)立的ID

在每一個(gè)從服務(wù)器上,配置一個(gè)唯一的ID,創(chuàng)建一個(gè)用來專門復(fù)制主服務(wù)器數(shù)據(jù)的賬號(hào)

在開始復(fù)制進(jìn)程前,在主服務(wù)器上記錄二進(jìn)制文件的位置信息

如果在開始復(fù)制之前,數(shù)據(jù)庫中已經(jīng)有數(shù)據(jù),就必須先創(chuàng)建一個(gè)數(shù)據(jù)快照(可以使用mysqldump導(dǎo)出數(shù)據(jù)庫,或者直接復(fù)制數(shù)據(jù)文件)

配置從服務(wù)器要連接的主服務(wù)器的IP地址和登陸授權(quán),二進(jìn)制日志文件名和位置

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容