05 數據庫入門學習-正則表達式、用戶管理、pymysql模塊
阿新 • • 發佈:2019-02-07
cal 返回 個數 char cte 正則表達 too day toolbar
一、正則表達式
正則表達式用於模糊查詢,模糊查詢已經講過了
like 僅支持 % 和 _ 遠沒有正則表達式靈活
當然絕大多數情況下 like足夠使用
#語法 select *from table where name regexp "正則表達式"; #實例 #準備數據 create table emp (id int,name char(10),sex char,age int,dept_id int,job char(10),salary double); insert into emp values (1,"劉備","男",26,1,"總監",5800), (2,"張飛","男",24,1,"員工",3000), (3,"關羽","男",30,1,"員工",4000), (4,"孫權","男",25,2,"總監",6000), (10,"劉備2","男",26,2,"總監",5800), (5,"周瑜","男",22,2,"員工",5000), (6,"小喬","女",31,2,"員工",4000), (7,"曹操","男",19,3,"總監",10000), (8,"司馬懿","男",24,3,"員工",6000); mysql> select *from emp where name regexp(‘司*‘); +------+-----------+------+------+---------+--------+--------+ | id | name | sex | age | dept_id | job | salary | +------+-----------+------+------+---------+--------+--------+ | 8 | 司馬懿 | 男 | 24 | 3 | 員工 | 6000 | +------+-----------+------+------+---------+--------+--------+ mysql> select *from emp where name regexp(‘懿$‘); +------+-----------+------+------+---------+--------+--------+ | id | name | sex | age | dept_id | job | salary | +------+-----------+------+------+---------+--------+--------+ | 8 | 司馬懿 | 男 | 24 | 3 | 員工 | 6000 | +------+-----------+------+------+---------+--------+--------+
二、用戶管理
MYSQL 是一個tcp 服務器,用於操作服務器上的文件數據,接收用戶端發送的指令, 接收指令時需要考慮安全問題
atm 購物車中的用戶認證和mysql的用戶認證原理是一樣的,mysql中把文件稱為表
在mysql自帶的mysql數據庫中有4個表用於用戶管理的
優先級從高到低,分別是: user -> db -> tables_priv -> columns_priv
註:對用戶管理進行操作後,要使用flush privileges;刷新
1.創建用戶
#語法 create user 用戶名@‘客戶端地址‘ identified by ‘密碼‘; #實際操作(在本地上操作) mysql> create user xcq@‘localhost‘ identified by ‘123‘; Query OK, 0 rows affected (0.13 sec) #查看是否創建完成 mysql> use mysql mysql> select *from user \G; ************************** 4. row *************************** Host: localhost User: xcq Password: *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 #但此時的用戶沒有任何的權限
2.授權
#語法 grant 全部[all]/權限名稱[select(字段名),updata(字段名),alter(字段名),delete(字段名)] on 數據庫名.表名 to 用戶名@‘主機地址‘; #可以訪問 所有庫和表 grant all on *.* to xcq@"localhost" identified by "123"; #可以訪問day42庫的所有表 grant all on day42.* to xcq@"localhost" identified by "123"; #可以訪問day42庫的emp表 grant all on day42.emp to xcq@"localhost" identified by "123"; #僅能查看和添加 day42庫的emp表中的 id和name字段 grant select(id,name),insert(id,name) on day42.emp to xcq@"localhost" identified by "123"; #all可以給用戶添加除了grant(賦予權限)以外的所有權限 #如果想把擁有的權限賦予別人 #使用 with grant option #如果授權時,被授權的用戶不存在,直接創建用戶 grant 全部[all]/權限名稱[select(字段名),updata(字段名),alter(字段名),delete(字段名)] on 數據庫名.表名 to 用戶名@‘主機地址‘ with grant option;
3.刪除權限
#語法 revoke 權限的名稱 on 數據庫名.表名 from 用戶名@‘主機地址‘; #實例 revoke all on *.* from xcq@‘localhost‘;
4.刪除用戶
#語法 drop user 用戶名@"主機地址"; #實例 drop user xcq@‘localhost‘;
註:每次對用戶進行操作都要刷新權限flush privileges;
三、pymysql模塊
1.pymysql
python編寫的mysql客戶端
pip install pymysql
2.基本使用
import pymysql #1.鏈接數據庫 conn=pymysql.Connect( host=‘127.0.0.1‘,#服務器地址 user=‘root‘,#用戶名 password=‘root‘,#密碼 database=‘day41‘,#數據庫名稱 port=3306,#端口號,可選 charset=‘utf8‘#編碼,可選 ) #2.獲取遊標對象 cursor=conn.cursor(pymysql.cursors.DictCursor) #3.sql語句 sql=‘select *from emp‘ #4.執行語句 res=cursor.execute(sql)#返回執行的行數 print(res) # fetchall\fetchone\fetchmany 獲取查詢結果 # print(cursor.fetchall())#全部取出來 # print(cursor.fetchone())#每次取一個,然後遊標往下一位 # print(cursor.fetchone())#每次取一個,然後遊標往下一位 # # print(cursor.fetchmany(1))#取的時候指定行數 # print(cursor.fetchall())#將剩下全部取出來 #scroll 遊標移動 # cursor.scroll(1,‘relative‘)#個數與模式。relative相對位置;absolute絕對位置 #5.關閉遊標 cursor.close() #6.關閉鏈接 conn.close()
3.commit和rollback
import pymysql #1.鏈接數據庫 conn=pymysql.Connect( host=‘127.0.0.1‘,#服務器地址 user=‘root‘,#用戶名 password=‘root‘,#密碼 database=‘day41‘,#數據庫名稱 port=3306,#端口號,可選 charset=‘utf8‘#編碼,可選 ) #2.獲取遊標對象 cursor=conn.cursor(pymysql.cursors.DictCursor) #3.sql語句 sql=‘insert into emp value(15,"黃月英","女","市場","員工",4500)‘ #4.執行語句 res=cursor.execute(sql)#返回執行的行數 print(res) cur=cursor.fetchall() for i in cur: print(i) #撤銷數據,只要數據還沒提交,都可以撤銷 #conn.rollback() #提交數據,因為pymysql 默認是啟用事務,對記錄操作的sql語句如果不提交,不會執行。 #但是對於庫和表得操作會默認提交 conn.commit(); #5.關閉遊標 cursor.close() #6.關閉鏈接 conn.close()
05 數據庫入門學習-正則表達式、用戶管理、pymysql模塊