1. 程式人生 > >05 數據庫入門學習-正則表達式、用戶管理、pymysql模塊

05 數據庫入門學習-正則表達式、用戶管理、pymysql模塊

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模塊