中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

MySQL怎么實(shí)現(xiàn)列表 mysql創(chuàng)建列表

mysql 獲取用戶信息其中包含每個(gè)用戶所有的角色名 用存儲(chǔ)過程如何實(shí)現(xiàn)?

對(duì)于MySQL角色的概念要有明確的了解和認(rèn)知。

創(chuàng)新互聯(lián)建站認(rèn)為,企業(yè)網(wǎng)站是要賦予品質(zhì)、思維、人性,深入到用戶內(nèi)心的細(xì)膩情感,才能真正稱得上企業(yè)網(wǎng)站。創(chuàng)新互聯(lián)建站根據(jù)每位用戶內(nèi)心最深的需求網(wǎng)站建設(shè)服務(wù),堅(jiān)實(shí)的設(shè)計(jì)執(zhí)行是品牌長期視覺塑造的重要支持。

角色一直存在各個(gè)數(shù)據(jù)庫中,比如 SQL Server、Oracle 等,MySQL 自從版本 8.0 release,引入了角色這個(gè)概念。

角色的概念

角色就是一組針對(duì)各種數(shù)據(jù)庫權(quán)限的集合。比如,把一個(gè)角色分配給一個(gè)用戶,那這個(gè)用戶就擁有了這個(gè)角色包含的所有權(quán)限。一個(gè)角色可以分配給多個(gè)用戶,另外一個(gè)用戶也可以擁有多個(gè)角色,兩者是多對(duì)多的關(guān)系。不過 MySQL 角色目前還沒有提供類似于其他數(shù)據(jù)庫的系統(tǒng)預(yù)分配的角色。比如某些數(shù)據(jù)庫的 db_owner、 db_datareader 、 db_datawriter 等等。那接下來我分幾個(gè)方面,來示例說明角色的使用以及相關(guān)注意事項(xiàng)。

示例 1:一個(gè)完整角色的授予步驟

用管理員創(chuàng)建三個(gè)角色:db_owner, db_datareader, db_datawriter

mysql create role db_owner,db_datareader,db_datawriter;

Query OK, 0 rows affected (0.02 sec)

mysql grant all on ytt_new.* to db_owner;

Query OK, 0 rows affected (0.01 sec)

mysql grant select on ytt_new.* to db_datareader;

Query OK, 0 rows affected (0.01 sec)

mysql grant insert,delete,update on ytt_new.* to db_datawriter;

Query OK, 0 rows affected (0.01 sec)

創(chuàng)建三個(gè)普通用戶,分別為 ytt1、ytt2、ytt3。mysql create user ytt1 identified by 'ytt',ytt2 identified by 'ytt',ytt3 identified by 'ytt';Query OK, 0 rows affected (0.01 sec)

分別授予這三個(gè)用戶對(duì)應(yīng)的角色。

-- 授權(quán)角色

mysql grant db_owner to ytt1;

Query OK, 0 rows affected (0.02 sec)

-- 激活角色

mysql set default role db_owner to ytt1;

Query OK, 0 rows affected (0.00 sec)

mysql grant db_datareader to ytt2;

Query OK, 0 rows affected (0.01 sec)

mysql set default role db_datareader to ytt2;

Query OK, 0 rows affected (0.01 sec)

mysql grant db_datawriter to ytt3;

Query OK, 0 rows affected (0.01 sec)

mysql set default role db_datawriter to ytt3;

Query OK, 0 rows affected (0.01 sec)

以上是角色授予的一套完整步驟。那上面有點(diǎn)非常規(guī)的地方是激活角色這個(gè)步驟。MySQL 角色在創(chuàng)建之初默認(rèn)是沒有激活的,也就是說創(chuàng)建角色,并且給一個(gè)用戶特定的角色,這個(gè)用戶其實(shí)并不能直接使用這個(gè)角色,除非激活了才可以。

示例 2:一個(gè)用戶可以擁有多個(gè)角色

-- 用管理員登錄并且創(chuàng)建用戶

mysql create user ytt4 identified by 'ytt';

Query OK, 0 rows affected (0.00 sec)

-- 把之前的三個(gè)角色都分配給用戶ytt4.

mysql grant db_owner,db_datareader,db_datawriter to ytt4;

Query OK, 0 rows affected (0.01 sec)

-- 激活用戶ytt4的所有角色.

mysql set default role all to ytt4;

Query OK, 0 rows affected (0.02 sec)

-- ytt4 用戶登錄

root@ytt-pc:/var/lib/mysql# mysql -uytt4 -pytt -P3304 -hytt-pc

...

-- 查看當(dāng)前角色列表

mysql select current_role();

+--------------------------------------------------------+

| current_role() ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |

+--------------------------------------------------------+

| `db_datareader`@`%`,`db_datawriter`@`%`,`db_owner`@`%` |

+--------------------------------------------------------+

1 row in set (0.00 sec)

-- 簡單創(chuàng)建一張表并且插入記錄, 檢索記錄,完了刪掉這張表

mysql use ytt_new

Database changed

mysql create table t11(id int);

Query OK, 0 rows affected (0.05 sec)

mysql insert into t11 values (1);

Query OK, 1 row affected (0.02 sec)

mysql select * from t11;

+------+

| id ? |

+------+

| ? ?1 |

+------+

1 row in set (0.00 sec)

mysql drop table t11;

Query OK, 0 rows affected (0.04 sec)

示例 3:用戶在當(dāng)前 session 里角色互換

其實(shí)意思是說,用戶連接到 MySQL 服務(wù)器后,可以切換當(dāng)前的角色列表,比如由 db_owner 切換到 db_datareader。

-- 還是之前的用戶ytt4, 切換到db_datareader

mysql set role db_datareader;

Query OK, 0 rows affected (0.00 sec)

mysql select current_role();

+---------------------+

| current_role() ? ? ?|

+---------------------+

| `db_datareader`@`%` |

+---------------------+

1 row in set (0.00 sec)

-- 切換后,沒有權(quán)限創(chuàng)建表

mysql create table t11(id int);

ERROR 1142 (42000): CREATE command denied to user 'ytt4'@'ytt-pc' for table 't11'

-- 切換到 db_owner,恢復(fù)所有權(quán)限。

mysql set role db_owner;

Query OK, 0 rows affected (0.00 sec)

mysql create table t11(id int);

Query OK, 0 rows affected (0.04 sec)

示例 4:關(guān)于角色的兩個(gè)參數(shù)

activate_all_roles_on_login:是否在連接 MySQL 服務(wù)時(shí)自動(dòng)激活角色mandatory_roles:強(qiáng)制所有用戶默認(rèn)角色

-- 用管理員連接MySQL,

-- 設(shè)置默認(rèn)激活角色

mysql set global activate_all_roles_on_login=on;

Query OK, 0 rows affected (0.00 sec)

-- 設(shè)置強(qiáng)制給所有用戶賦予角色db_datareader

mysql set global mandatory_roles='db_datareader';

Query OK, 0 rows affected (0.00 sec)

-- 創(chuàng)建用戶ytt7.

mysql create user ytt7;

Query OK, 0 rows affected (0.01 sec)

-- 用 ytt7登錄數(shù)據(jù)庫

root@ytt-pc:/var/lib/mysql# mysql -uytt7 -P3304 -hytt-pc

...

mysql show grants;

+-------------------------------------------+

| Grants for ytt7@% ? ? ? ? ? ? ? ? ? ? ? ? |

+-------------------------------------------+

| GRANT USAGE ON *.* TO `ytt7`@`%` ? ? ? ? ?|

| GRANT SELECT ON `ytt_new`.* TO `ytt7`@`%` |

| GRANT `db_datareader`@`%` TO `ytt7`@`%` ? |

+-------------------------------------------+

3 rows in set (0.00 sec)

示例 5 :create role 和 create user 都有創(chuàng)建角色權(quán)限,兩者有啥區(qū)別?

以下分別創(chuàng)建兩個(gè)用戶 ytt8、ytt9,一個(gè)給 create role,一個(gè)給 create user 權(quán)限。

-- 管理員登錄,創(chuàng)建用戶ytt8,ytt9.

mysql create user ytt8,ytt9;

Query OK, 0 rows affected (0.01 sec)

mysql grant create role on *.* to ytt8;

Query OK, 0 rows affected (0.02 sec)

mysql grant create user on *.* to ytt9;

Query OK, 0 rows affected (0.01 sec)

-- 用ytt8 登錄,

root@ytt-pc:/var/lib/mysql# mysql -uytt8 -P3304 -hytt-pc

...

mysql create role db_test;

Query OK, 0 rows affected (0.02 sec)

-- 可以創(chuàng)建角色,但是不能創(chuàng)建用戶

mysql create user ytt10;

ERROR 1227 (42000): Access denied; you need (at least one of) the CREATE USER privilege(s) for this operation

mysql \q

Bye

-- 用ytt9 登錄

root@ytt-pc:/var/lib/mysql# mysql -uytt9 -P3304 -hytt-pc

...

-- 角色和用戶都能創(chuàng)建

mysql create role db_test2;

Query OK, 0 rows affected (0.02 sec)

mysql create user ytt10;

Query OK, 0 rows affected (0.01 sec)

mysql \q

Bye

那這里其實(shí)看到 create user 包含了 create role,create user 即可以創(chuàng)建用戶,也可以創(chuàng)建角色。

示例 6:MySQL 用戶也可以當(dāng)角色來用

-- 用管理員登錄,創(chuàng)建用戶ytt11,ytt12.

mysql create user ytt11,ytt12;

Query OK, 0 rows affected (0.01 sec)

mysql grant select on ytt_new.* to ytt11;

Query OK, 0 rows affected (0.01 sec)

-- 把ytt11普通用戶的權(quán)限授予給ytt12

mysql grant ytt11 to ytt12;

Query OK, 0 rows affected (0.01 sec)

-- 來查看 ytt12的權(quán)限,可以看到擁有了ytt11的權(quán)限

mysql show grants for ytt12;

+-----------------------------------+

| Grants for ytt12@% ? ? ? ? ? ? ? ?|

+-----------------------------------+

| GRANT USAGE ON *.* TO `ytt12`@`%` |

| GRANT `ytt11`@`%` TO `ytt12`@`%` ?|

+-----------------------------------+

2 rows in set (0.00 sec)

-- 在細(xì)化點(diǎn),看看ytt12擁有哪些具體的權(quán)限

mysql show grants for ytt12 using ytt11;

+--------------------------------------------+

| Grants for ytt12@% ? ? ? ? ? ? ? ? ? ? ? ? |

+--------------------------------------------+

| GRANT USAGE ON *.* TO `ytt12`@`%` ? ? ? ? ?|

| GRANT SELECT ON `ytt_new`.* TO `ytt12`@`%` |

| GRANT `ytt11`@`%` TO `ytt12`@`%` ? ? ? ? ? |

+--------------------------------------------+

3 rows in set (0.00 sec)

示例 7:角色的撤銷

角色撤銷和之前權(quán)限撤銷類似。要么 revoke,要么刪除角色,那這個(gè)角色會(huì)從所有擁有它的用戶上移除。

-- 用管理員登錄,移除ytt2的角色

mysql revoke db_datareader from ytt2;

Query OK, 0 rows affected (0.01 sec)

-- 刪除所有角色

mysql drop role db_owner,db_datareader,db_datawriter;

Query OK, 0 rows affected (0.01 sec)

-- 對(duì)應(yīng)的角色也從ytt1上移除掉了

mysql show grants for ytt1;

+----------------------------------+

| Grants for ytt1@% ? ? ? ? ? ? ? ?|

+----------------------------------+

| GRANT USAGE ON *.* TO `ytt1`@`%` |

+----------------------------------+

1 row in set (0.00 sec)

至此,我分了 7 個(gè)目錄說明了角色在各個(gè)方面的使用以及注意事項(xiàng),希望對(duì)大家有幫助。

mysql返回?cái)?shù)據(jù)列表函數(shù)功能如何實(shí)現(xiàn)

布爾值 NULL ,false, 0 ," " ,都代表為假, mysql_query 對(duì)于 SELECT,SHOW,EXPLAIN 或 DESCRIBE 語句返回一個(gè)資源標(biāo)識(shí)符,打印出來是 類似于 “Resource id #3" 的一個(gè)字符串,所以就為真了。 這個(gè) “Resource id #3" 就好比是一個(gè)指示牌, 連接著你要操作的數(shù)據(jù),用函數(shù)操作他時(shí),例如:mysql_fetch_array($insert), 他就把從數(shù)據(jù)庫調(diào)出來的結(jié)果帶到函數(shù)里做參數(shù)了。

怎么樣將mysql中獲取的數(shù)據(jù)變成列表

可以通過查詢系統(tǒng)表來獲取。

1、打開Navicat for Mysql,登錄到指定數(shù)據(jù)庫下。

2、新建查詢。

3、輸入以下語句:

1

select column_name from information_schema.COLUMNS where table_name='表名'

結(jié)果:

其中id和name就是test表的字段名字。

MySQL實(shí)現(xiàn)類似Oracle序列的方案

MySQL實(shí)現(xiàn)類似Oracle的序列

Oracle一般使用序列(Sequence)來處理主鍵字段,而MySQL則提供了自增長(increment)來實(shí)現(xiàn)類似的目的;

但在實(shí)際使用過程中發(fā)現(xiàn),MySQL的自增長有諸多的弊端:不能控制步長、開始索引、是否循環(huán)等;若需要遷移數(shù)據(jù)庫,則對(duì)于主鍵這塊,也是個(gè)頭大的問題。

本文記錄了一個(gè)模擬Oracle序列的方案,重點(diǎn)是想法,代碼其次。

Oracle序列的使用,無非是使用.nextval和.currval偽列,基本想法是:

1、MySQL中新建表,用于存儲(chǔ)序列名稱和值;

2、創(chuàng)建函數(shù),用于獲取序列表中的值;

具體如下:

表結(jié)構(gòu)為:

drop

table

if

exists

sequence;

create

table

sequence

(

seq_name

VARCHAR(50)

NOT

NULL,

--

序列名稱

current_val

INT

NOT

NULL,

--當(dāng)前值

increment_val

INT

NOT

NULL

DEFAULT

1,

--步長(跨度)

PRIMARY

KEY

(seq_name)

);

實(shí)現(xiàn)currval的模擬方案

create

function

currval(v_seq_name

VARCHAR(50))

returns

integer

begin

declare

value

integer;

set

value

=

0;

select

current_value

into

value

from

sequence

where

seq_name

=

v_seq_name;

return

value;

end;

函數(shù)使用為:select

currval('MovieSeq');

實(shí)現(xiàn)nextval的模擬方案

create

function

nextval

(v_seq_name

VARCHAR(50))

return

integer

begin

update

sequence

set

current_val

=

current_val

+

increment_val

where

seq_name

=

v_seq_name;

return

currval(v_seq_name);

end;

函數(shù)使用為:select

nextval('MovieSeq');

增加設(shè)置值的函數(shù)

create

function

setval(v_seq_name

VARCHAR(50),

v_new_val

INTEGER)

returns

integer

begin

update

sequence

set

current_val

=

v_new_val

where

seq_name

=

v_seq_name;

return

currval(seq_name);

同理,可以增加對(duì)步長操作的函數(shù),在此不再敘述。

注意語法,數(shù)據(jù)庫字段要對(duì)應(yīng)上

use

bvboms;

DELIMITER

$$

create

function

setval(v_seq_name

VARCHAR(50),

v_new_val

INTEGER)

returns

integer

begin

update

sequence

set

current_val

=

v_new_val

where

seq_name

=

v_seq_name;

return

currval(seq_name);

end

$$

DELIMITER

$$

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接

您可能感興趣的文章:mysql實(shí)現(xiàn)sequence功能的代碼Can''t

connect

to

local

MySQL

through

socket

''/tmp/mysql.sock''解決方法Mysql常用函數(shù)大全(分類匯總講解)利用MySQL主從配置實(shí)現(xiàn)讀寫分離減輕數(shù)據(jù)庫壓力mysql+spring+mybatis實(shí)現(xiàn)數(shù)據(jù)庫讀寫分離的代碼配置Golang中如何對(duì)MySQL進(jìn)行操作詳解將圖片儲(chǔ)存在MySQL數(shù)據(jù)庫中的幾種方法MySQL存儲(chǔ)文本和圖片的方法Ubuntu上mysql的安裝及使用(通用版)nodejs同步調(diào)用獲取mysql數(shù)據(jù)時(shí)遇到的大坑

在java中怎樣創(chuàng)建MySQL數(shù)據(jù)庫列表 給個(gè)例子

java中怎樣創(chuàng)建MySQL數(shù)據(jù)庫列表 需要使用jdbc訪問數(shù)據(jù)庫。

具體步驟如下:

1:加載驅(qū)動(dòng) ,返回連接

private static final String DRIVER_CLASS = "com.mysql.jdbc.Driver";

private static final String DATABASE_URL = "jdbc:mysql://localhost:3306/student";

private static final String DATABASE_USRE = "root";

private static final String DATABASE_PASSWORD = "cs";

/**

* 返回連接

*

* @return Connection

*/

public static Connection getConnection() {

Connection dbConnection = null;

try {

Class.forName(DRIVER_CLASS);

dbConnection = DriverManager.getConnection(DATABASE_URL,

DATABASE_USRE, DATABASE_PASSWORD);

} catch (Exception e) {

e.printStackTrace();

}

return dbConnection;

}

2:獲取連接,執(zhí)行sql語句

public static List selectAllStudent() {

Connection con = null;

PreparedStatement pstm = null;

ResultSet rs = null;

List list = new ArrayList();

String sql = "select * from Student ";

try {

con = ConnectionManager.getConnection();

pstm = con.prepareStatement(sql);

// pstm.setString(1, uname);

rs = pstm.executeQuery();

while (rs.next()) {

Student model = new Student();

model.setStuId(rs.getInt("stuId"));

list.add(model);

}

} catch (SQLException e) {

e.printStackTrace();

} finally {

ConnectionManager.closeResultSet(rs);

ConnectionManager.closeStatement(pstm);

ConnectionManager.closeConnection(con);

}

return list;

}

3:調(diào)用獲取列表方法。

mysql按照in的id順序,查詢列表

FIND_IN_SET是絕對(duì)匹配類型的。例如id為1,那么返回2。直接匹配到1上。而不會(huì)匹配到11上

在mybatis的xml中,實(shí)現(xiàn)方式

bind標(biāo)簽中的value是直接讀取的參數(shù)的 。

bind name="ids" value="a"/ 這樣并不是代表值是a,而是讀取a這個(gè)參數(shù)。

bind name="ids" value=""/不能直接默認(rèn)這樣寫。而是bind name="ids" value="''"/這樣寫,才可以。默認(rèn)為空字符

名稱欄目:MySQL怎么實(shí)現(xiàn)列表 mysql創(chuàng)建列表
網(wǎng)頁路徑:http://m.rwnh.cn/article44/hichhe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營銷型網(wǎng)站建設(shè)網(wǎng)站導(dǎo)航、ChatGPT、動(dòng)態(tài)網(wǎng)站、面包屑導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司
吴江市| 云南省| 竹山县| 阿巴嘎旗| 什邡市| 平山县| 綦江县| 罗定市| 新绛县| 通渭县| 潼南县| 西乡县| 崇义县| 平武县| 沈丘县| 武威市| 平果县| 鹤庆县| 五台县| 沙田区| 阜城县| 揭西县| 廊坊市| 宿松县| 玉林市| 东乌| 正定县| 万安县| 罗田县| 新安县| 通化市| 布拖县| 汉寿县| 梅河口市| 宁乡县| 金门县| 钟山县| 新密市| 邵阳市| 阿图什市| 全椒县|