您好,登錄后才能下訂單哦!
小編給大家分享一下MySQL怎么操作,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
創(chuàng)建數(shù)據(jù)庫luowei
mysql> CREATE DATABASE luowei;
使用數(shù)據(jù)庫
mysql> use luowei
創(chuàng)建表study
mysql> CREATE TABLE study ( ID bigint(20) NOT NULL AUTO_INCREMENT UNIQUE, Name varchar(255) NOT NULL, Age int(10),Gender enum('F','M') DEFAULT 'M');
查詢表study;
mysql> SELECT * FROM study;
查看表的結(jié)構(gòu):
mysql> DESC study;
+--------+---------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------------+------+-----+---------+----------------+
| ID | bigint(20) | NO | PRI | NULL | auto_increment |
| Name | varchar(255) | NO | | NULL | |
| Age | int(10) | YES | | NULL | |
| Gender | enum('F','M') | YES | | M | |
+--------+---------------+------+-----+---------+----------------+
插入數(shù)據(jù);
mysql> INSERT INTO study (Name) VALUE ('luowei'); //單個插入
mysql> INSERT INTO study (Name) VALUE ('Qi'),('Ro'),('RQ'); //批量插入
mysql> INSERT INTO study SET Name='Hua'; //使用SET插入
mysql> SELECT * FROM study;
+----+--------+------+--------+
| ID | Name | Age | Gender |
+----+--------+------+--------+
| 1 | luowei | NULL | M |
| 2 | Qi | NULL | M |
| 3 | Ro | NULL | M |
| 4 | RQ | NULL | M |
| 5 | Hua | NULL | M |
+----+--------+------+--------+
5 rows in set (0.00 sec)
這是插入數(shù)據(jù)后的一個簡單的表的內(nèi)容
修改表的數(shù)據(jù)
mysql> UPDATE study SET Gender='F' WHERE ID=2; //把ID=2的Gender改為F
mysql> UPDATE study SET Gender='F' WHERE ID IN (4,5);//批量處理
mysql> SELECT * FROM study;
+----+--------+------+--------+
| ID | Name | Age | Gender |
+----+--------+------+--------+
| 1 | luowei | NULL | M |
| 2 | Qi | NULL | F |
| 3 | Ro | NULL | M |
| 4 | RQ | NULL | F |
| 5 | Hua | NULL | F |
+----+--------+------+--------+
刪除表中的數(shù)據(jù)
mysql> DELETE FROM study WHERE ID=5;//刪除指定的行
mysql> SELECT * FROM study;
+----+--------+------+--------+
| ID | Name | Age | Gender |
+----+--------+------+--------+
| 1 | luowei | NULL | M |
| 2 | Qi | NULL | F |
| 3 | Ro | NULL | M |
| 4 | RQ | NULL | F |
+----+--------+------+--------+
但是這個時候如果我們在再次插入的話ID號會從原來刪除的編號增加
mysql> SELECT LAST_INSERT_ID();//顯示上次插入的是第幾個
+------------------+
| LAST_INSERT_ID() |
+------------------+
| 5 |
+------------------+
mysql> INSERT INTO study (Name) VALUE ('aQ');
mysql> SELECT * FROM study;
+----+--------+------+--------+
| ID | Name | Age | Gender |
+----+--------+------+--------+
| 1 | luowei | NULL | M |
| 2 | Qi | NULL | F |
| 3 | Ro | NULL | M |
| 4 | RQ | NULL | F |
| 6 | aQ | NULL | M |
+----+--------+------+--------+
看到了吧,不是依次增長的,而是有間隔,現(xiàn)在我們在刪除了ID為6的行,然后插入設(shè)置他的ID為5,接著再自動插入;
mysql> DELETE FROM study WHERE ID=6;
mysql> INSERT INTO study SET ID=5,Name='pk';
mysql> INSERT INTO study (Name) VALUE ('jk');
mysql> SELECT * FROM study;
+----+--------+------+--------+
| ID | Name | Age | Gender |
+----+--------+------+--------+
| 1 | luowei | NULL | M |
| 2 | Qi | NULL | F |
| 3 | Ro | NULL | M |
| 4 | RQ | NULL | F |
| 5 | pk | NULL | M |
| 7 | jk | NULL | M |
+----+--------+------+--------+
可以看出還是不會按照我們的意思讓他接著自動增長,這個時候我們可以通過設(shè)置,讓他重新按照我們設(shè)置的為起點自動增長
mysql> DELETE FROM study WHERE ID=7;
mysql> ALTER TABLE study AUTO_INCREMENT=5;//設(shè)置自動增長的起點
mysql> INSERT INTO study (Name) VALUE ('jk');
mysql> INSERT INTO study (Name) VALUE ('OL');
mysql> SELECT * FROM study;
+----+--------+------+--------+
| ID | Name | Age | Gender |
+----+--------+------+--------+
| 1 | luowei | NULL | M |
| 2 | Qi | NULL | F |
| 3 | Ro | NULL | M |
| 4 | RQ | NULL | F |
| 5 | pk | NULL | M |
| 6 | jk | NULL | M |
| 7 | OL | NULL | M |
+----+--------+------+--------+
又OK了,我估計QQ在設(shè)置QQ號的時候也是通過這種方式,保留小于5位的QQ號,所有大家用的都是7位以上的(題外話,呵呵)。
修改表結(jié)構(gòu)
如果想插入一個新的字段,可以使用ALTER來修改
mysql> DESC study;//原本表的結(jié)構(gòu)
+--------+---------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------------+------+-----+---------+----------------+
| ID | bigint(20) | NO | PRI | NULL | auto_increment |
| Name | varchar(255) | NO | | NULL | |
| Age | int(10) | YES | | NULL | |
| Gender | enum('F','M') | YES | | M | |
+--------+---------------+------+-----+---------+----------------+
mysql> ALTER TABLE study ADD Work INT ;
mysql> DESC study;
+--------+---------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------------+------+-----+---------+----------------+
| ID | bigint(20) | NO | PRI | NULL | auto_increment |
| Name | varchar(255) | NO | | NULL | |
| Age | int(10) | YES | | NULL | |
| Gender | enum('F','M') | YES | | M | |
| Work | int(11) | YES | | NULL | |
+--------+---------------+------+-----+---------+----------------+
默認(rèn)插入最后一行,如果想插入指定的行,可以使用AFTER,FIRST等參數(shù)
mysql> ALTER TABLE study ADD Master VARCHAR(30) AFTER Gender;
mysql> DESC study;
+--------+---------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------------+------+-----+---------+----------------+
| ID | bigint(20) | NO | PRI | NULL | auto_increment |
| Name | varchar(255) | NO | | NULL | |
| Age | int(10) | YES | | NULL | |
| Gender | enum('F','M') | YES | | M | |
| Master | varchar(30) | YES | | NULL | |
| Work | int(11) | YES | | NULL | |
+--------+---------------+------+-----+---------+----------------+
這就把新插入的字段放在了Gender的后面了
如果我們想把原來的表中字段的名字改一下,比如我想把Work改成work
mysql> ALTER TABLE study CHANGE Work work INT;//修改表中的字段
mysql> DESC study;
+--------+---------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------------+------+-----+---------+----------------+
| ID | bigint(20) | NO | PRI | NULL | auto_increment |
| Name | varchar(255) | NO | | NULL | |
| Age | int(10) | YES | | NULL | |
| Gender | enum('F','M') | YES | | M | |
| Master | varchar(30) | YES | | NULL | |
| work | int(11) | YES | | NULL | |
+--------+---------------+------+-----+---------+----------------+
可以實現(xiàn)效果
當(dāng)讓還可以通過使用MODIFY來試下對表中字段的屬性進行設(shè)置
mysql> ALTER TABLE study MODIFY work VARCHAR(30) NOT NULL ;
mysql> DESC study;
+--------+---------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------------+------+-----+---------+----------------+
| ID | bigint(20) | NO | PRI | NULL | auto_increment |
| Name | varchar(255) | NO | | NULL | |
| Age | int(10) | YES | | NULL | |
| Gender | enum('F','M') | YES | | M | |
| Master | varchar(30) | YES | | NULL | |
| work | varchar(30) | NO | | NULL | |
+--------+---------------+------+-----+---------+----------------+
但是如果你表中原本work中沒有字段的話,會有warning,所以在你做的時候可以先添加數(shù)據(jù),然后在修改。
隨著發(fā)展,我發(fā)現(xiàn)后面的work這個字段沒用了,想刪除study表中的這個屬性
mysql> ALTER TABLE study DROP work;
mysql> DESC study;
+--------+---------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------------+------+-----+---------+----------------+
| ID | bigint(20) | NO | PRI | NULL | auto_increment |
| Name | varchar(255) | NO | | NULL | |
| Age | int(10) | YES | | NULL | |
| Gender | enum('F','M') | YES | | M | |
| Master | varchar(30) | YES | | NULL | |
+--------+---------------+------+-----+---------+----------------+
當(dāng)然如果我們表中有索引(目前),也可以使用DROP刪除索引
mysql> SHOW INDEX FROM study;//查看表的索引
mysql> ALTER TABLE study ADD INDEX index_name(Name);//添加索引
也可以私用KEY(mysql> ALTER TABLE study ADD KEY index_name(Name);)
mysql> SHOW INDEX FROM study;
+-------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+-------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| study | 0 | ID | 1 | ID | A | 7 | NULL | NULL | | BTREE | |
| study | 1 | index_name | 1 | Name | A | NULL | NULL | NULL | | BTREE | |
+-------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
mysql> ALTER TABLE study DROP INDEX index_name;//刪除索引
現(xiàn)在我覺得表明有點長,想換一個短的來方便下面的實驗,當(dāng)然在實際的過程中,我們應(yīng)該見名知意
mysql> ALTER TABLE study RENAME TO st;//把表名從study改成st
mysql> SHOW TABLES;
+------------------+
| Tables_in_luowei |
+------------------+
| st |
+------------------+
想查看當(dāng)前的數(shù)據(jù)庫可以使用一下命令
mysql> SELECT DATABASE();
mysql> SHOW TABLES;//顯示當(dāng)前數(shù)據(jù)庫中的表
mysql> SELECT * FROM st;
+----+--------+------+--------+--------+
| ID | Name | Age | Gender | Master |
+----+--------+------+--------+--------+
| 1 | luowei | NULL | M | NULL |
| 2 | Qi | NULL | F | NULL |
| 3 | Ro | NULL | M | NULL |
| 4 | RQ | NULL | F | NULL |
| 5 | pk | NULL | M | NULL |
| 6 | jk | NULL | M | NULL |
| 7 | OL | NULL | M | NULL |
+----+--------+------+--------+--------+
這里我只有一個表,現(xiàn)在我修改一下表中的數(shù)據(jù),把Master的類型改為INT,并添加一些數(shù)據(jù)在里面
mysql> ALTER TABLE st CHANGE MODIFY Master INT;
mysql> UPDATE st SET Master=1 WHERE ID=1;
mysql> UPDATE st SET Master=2 WHERE ID=2;
mysql> UPDATE st SET Master=3 WHERE ID=3;
mysql> UPDATE st SET Master=4 WHERE ID=4;
mysql> UPDATE st SET Master=7 WHERE ID=5;
mysql> UPDATE st SET Master=8 WHERE ID=6;
mysql> UPDATE st SET Master=5 WHERE ID=7;
mysql> SELECT * FROM st;
+----+--------+------+--------+--------+
| ID | Name | Age | Gender | Master |
+----+--------+------+--------+--------+
| 1 | luowei | NULL | M | 1 |
| 2 | Qi | NULL | F | 2 |
| 3 | Ro | NULL | M | 3 |
| 4 | RQ | NULL | F | 4 |
| 5 | pk | NULL | M | 7 |
| 6 | jk | NULL | M | 8 |
| 7 | OL | NULL | M | 5 |
+----+--------+------+--------+--------+
現(xiàn)在表的基本情況如上所示。當(dāng)然我們?yōu)榱朔奖阌涗汳aster,使用是INT來標(biāo),其實Master是一個姓名,所以我們再建立一個新表mt,來記錄Master的對應(yīng)的關(guān)系
mysql> CREATE TABLE mt(
-> id INT NOT NULL UNIQUE AUTO_INCREMENT ,
-> name VARCHAR(30) NOT NULL );
mysql> INSERT INTO mt (name) VALUE ('A');
......
自己多插入幾行,我這里就省略了
mysql> SELECT * FROM mt;
+----+------+
| id | name |
+----+------+
| 1 | A |
| 2 | B |
| 3 | C |
| 4 | D |
| 5 | E |
| 6 | F |
+----+------+
好了現(xiàn)在兩個表準(zhǔn)備好了,接下來我將做一下多表之間的查詢
多表之間的查詢可以分為:
交叉查詢:笛卡爾乘積,兩表相乘;
內(nèi)連接:對稱連接,就是顯示兩個表中都有的,一個表中如果沒有,就不顯示了;
外連接:非對稱連接
左外連接:LEFT JOIN ON 左表中的都顯示,右表中無的話顯示為NULL
右外連接:RIGHT JOIN ON 右表中的都顯示,左表中無的話顯示為NULL
自連接:一個表中的一列建立在同張表的另一列;
UNION:連接兩個表;
接下來分別對上面的情況進行實驗;
1.交叉查詢:
mysql> SELECT * FROM st,mt;
42 rows in set (0.00 sec)//中間的數(shù)據(jù)就省略了,這里的結(jié)果就是兩個表的行數(shù)相乘的結(jié)果;
2.內(nèi)連接:
mysql> SELECT st.Name,mt.name FROM st,mt WHERE st.Master=mt.id;
+--------+------+
| Name | name |
+--------+------+
| luowei | A |
| Qi | B |
| Ro | C |
| RQ | D |
| OL | E |
+--------+------+
3.左外連接:
mysql> SELECT st.Name,mt.name FROM st LEFT JOIN mt ON st.Master=mt.id;
+--------+------+
| Name | name |
+--------+------+
| luowei | A |
| Qi | B |
| Ro | C |
| RQ | D |
| pk | NULL |
| jk | NULL |
| OL | E |
+--------+------+
這時候我們可以看到,凡是左表中有的,都顯示了,右表中沒有的都顯示為NULL了;
4.右外連接:
mysql> SELECT st.Name,mt.name FROM st RIGHT JOIN mt ON st.Master=mt.id;
+--------+------+
| Name | name |
+--------+------+
| luowei | A |
| Qi | B |
| Ro | C |
| RQ | D |
| OL | E |
| NULL | F |
+--------+------+
5.自連接:
mysql> SELECT k1.Name,k2.Gender FROM st AS k1,st AS k2 WHERE k1.ID = k2.Master;
+--------+--------+
| Name | Gender |
+--------+--------+
| luowei | M |
| Qi | F |
| Ro | M |
| RQ | F |
| OL | M |
| pk | M |
+--------+--------+
6.UNION;
mysql> SELECT ID AS new_id,Name AS new_name FROM st UNION SELECT id AS new_id,name AS new_name FROM mt;
+--------+----------+
| new_id | new_name |
+--------+----------+
| 1 | luowei |
| 2 | Qi |
| 3 | Ro |
| 4 | RQ |
| 5 | pk |
| 6 | jk |
| 7 | OL |
| 1 | A |
| 2 | B |
| 3 | C |
| 4 | D |
| 5 | E |
| 6 | F |
+--------+----------+
13 rows in set (0.00 sec)這樣就把兩個表連接到了一起了。
多表操作就到此了,接下來要說的是數(shù)據(jù)庫中的視圖,子查詢,事務(wù),同步的相關(guān)知識了;
我就以st這個表為基礎(chǔ):
mysql> SELECT * FROM st;
+----+--------+------+--------+--------+
| ID | Name | Age | Gender | Master |
+----+--------+------+--------+--------+
| 1 | luowei | NULL | M | 1 |
| 2 | Qi | NULL | F | 2 |
| 3 | Ro | NULL | M | 3 |
| 4 | RQ | NULL | F | 4 |
| 5 | pk | NULL | M | 7 |
| 6 | jk | NULL | M | 8 |
| 7 | OL | NULL | M | 5 |
+----+--------+------+--------+--------+
視圖:就是建立在基表上執(zhí)行查詢語句的一系列的虛表
創(chuàng)建視圖:
mysql> CREATE VIEW view AS SELECT ID,Name,Gender FROM st;//創(chuàng)建一個查詢顯示ID,Name,Gender的視圖;
mysql> SELECT * FROM view;
+----+--------+--------+
| ID | Name | Gender |
+----+--------+--------+
| 1 | luowei | M |
| 2 | Qi | F |
| 3 | Ro | M |
| 4 | RQ | F |
| 5 | pk | M |
| 6 | jk | M |
| 7 | OL | M |
+----+--------+--------+
刪除視圖可以使用
mysql> DROP VIEW view;
子查詢語句:(其實MySQL的子查詢支持的還不是很好)
mysql> SELECT * FROM view WHERE ID > 0;
我就借用剛建立的視圖進行查詢,其實這個是多此一舉的做法,呵呵,只是演示一下效果,當(dāng)讓在工作中可能會遇到更多的問題的。
事務(wù):transact
事務(wù)就是幾個Sql語句要么都執(zhí)行,要么都不執(zhí)行,這樣就防治一方執(zhí)行,另一方?jīng)]執(zhí)行,從而產(chǎn)生虛擬的假象,比如A通過銀行向B轉(zhuǎn)賬,如果這個時候A剛轉(zhuǎn)出去,B那邊的斷電了(假設(shè),其實這樣的事出現(xiàn)的概率還是蠻小的,呵呵),所以等A和B見面之后,就說不清了,所以事務(wù)就是如果兩個都沒實現(xiàn),就是A發(fā)送成功,B接受成功,才能算是真正的成功,所以這樣就能避免不必要的損失。
接下來介紹一下事務(wù)隔離的級別:
1.讀未提交 READ UNCOMMITED
2.讀提交 READ COMMITED
3.可重讀 REPEATABLE READ 默認(rèn)
4.串行化 SERIABLIZABLE
從1-->4隔離級別依次增加,并發(fā)性依次降低
mysql> SHOW VARIABLES LIKE 'tx_isolation';//查看系統(tǒng)使用的默認(rèn)的隔離級別
+---------------+-----------------+
| Variable_name | Value |
+---------------+-----------------+
| tx_isolation | REPEATABLE-READ |
+---------------+-----------------+
但是如果我們的數(shù)據(jù)庫使用的引擎是MyISAM的話,就不支持事務(wù),查看數(shù)據(jù)庫使用的引擎命令如下
mysql> SHOW ENGINES;或使用SHOW TABLE STATUS LIKE 'st';或使用SHOW TABLE STATUS ;都能查看
+------------+---------+----------------------------------------------------------------+
| Engine | Support | Comment |
+------------+---------+----------------------------------------------------------------+
| MyISAM | DEFAULT | Default engine as of MySQL 3.23 with great performance |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables |
| InnoDB | YES | Supports transactions, row-level locking, and foreign keys |
| BerkeleyDB | YES | Supports transactions and page-level locking |
| BLACKHOLE | NO | /dev/null storage engine (anything you write to it disappears) |
| EXAMPLE | NO | Example storage engine |
| ARCHIVE | NO | Archive storage engine |
| CSV | NO | CSV storage engine |
| ndbcluster | NO | Clustered, fault-tolerant, memory-based tables |
| FEDERATED | NO | Federated MySQL storage engine |
| MRG_MYISAM | YES | Collection of identical MyISAM tables |
| ISAM | NO | Obsolete storage engine |
+------------+---------+----------------------------------------------------------------+
顯示為DEFAULT的是默認(rèn)使用的引擎,應(yīng)為這個時候數(shù)據(jù)庫不支持事務(wù),為了演示事務(wù)的效果,我把mysql的引擎改為InnoDB ,使用如下命令:
mysql> SET SESSION storage_engine = InnoDB;
然后在這個引擎的基礎(chǔ)上建立一個表
mysql> CREATE TABLE tt (
-> tid INT UNIQUE NOT NULL AUTO_INCREMENT,
-> tname VARCHAR(30) NOT NULL,
-> tage INT);
插入數(shù)據(jù)如下圖所示,當(dāng)然你可以自己隨便添加表中的數(shù)據(jù)
mysql> SELECT * FROM tt;
+-----+-------+------+
| tid | tname | tage |
+-----+-------+------+
| 1 | ser | NULL |
| 2 | linux | NULL |
| 3 | php | NULL |
+-----+-------+------+
查看當(dāng)前表的存儲引擎
mysql> SHOW TABLE STATUS LIKE 'tt';
顯示的結(jié)果是InnoDB的引擎;
1.設(shè)置為READ UNCOMMITTED(讀未提交)的級別
mysql> SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;//修改隔離級別為READ UNCONMMITED顯示為REPEATABLE-READ
mysql> SHOW VARIABLES LIKE 'tx_isolation';
+---------------+------------------+
| Variable_name | Value |
+---------------+------------------+
| tx_isolation | READ-UNCOMMITTED |
+---------------+------------------+
這個級別下,如果兩個事務(wù)同時進行,任何一方的改變,對方都能看到,因為我們在設(shè)置的時候采用的是SESSION,會話的模式,所以兩個終端都要進行READ UNCOMMITTED設(shè)置
所以這個的設(shè)置的并發(fā)性最好,但是受到的影響卻是最大的
2.設(shè)置為READ COMMITED(讀提交)級別
這個級別下,當(dāng)其中的任意一個事務(wù)提交了,其他處于事務(wù)狀態(tài)的就能同步到信息,如下圖是沒有提交之前的圖,這個時候還不能看到
如果B的事務(wù)提交了,再來看看這個結(jié)果,如下圖所示:
盡管A沒有提交,但是也能看到信息了
3.設(shè)置為REPEATABLE READ(可重讀)級別
如果設(shè)置為這個級別的話,兩個同時進行的事務(wù),相互不受影響,只用當(dāng)兩個事務(wù)都提交了才能看到所有變化的信息,否則,各自只能看到自己完成的
我現(xiàn)在打開兩個終端A、B,同時進入事務(wù)
mysql> START TRANSACTION;//A進入事務(wù)狀態(tài)
mysql> START TRANSACTION;//B進入事務(wù)狀態(tài)
然后我在B事務(wù)狀態(tài)下向表進行插入一行數(shù)據(jù),然后在兩個表中都查看,結(jié)果發(fā)現(xiàn)數(shù)據(jù)不一樣,如下圖所示:
如果我現(xiàn)在把B的事務(wù)提交了,再在A、B上查看,發(fā)現(xiàn)只有B上的有新插入的一行,而A任然沒有,如圖所示:
如果我現(xiàn)在把A的也提交了,在查看的話,兩個就會出現(xiàn)數(shù)據(jù)同步了,如圖所示:
這就是REPEATABLE READ級別的效果,就是兩個事務(wù)操作的時候相互不干擾,只有當(dāng)兩個事務(wù)都提交了,數(shù)據(jù)才會同步。
4.設(shè)置為SERIABLIZABLE級別
這個時候只有當(dāng)前一個事務(wù)執(zhí)行完成并提交了,下一個事務(wù)才開始,做了更加嚴(yán)格的限制,所以一般不做這樣的級別限制
同步:(clock)
通過鎖機制來解決同步問題
鎖:
共享鎖(讀鎖):
獨占鎖(寫鎖):
寫鎖的優(yōu)先級高于讀鎖
鎖級別:
表鎖,行鎖,頁鎖(內(nèi)存空間)
鎖的實現(xiàn):
服務(wù)器級別的;只能實現(xiàn)表鎖
存儲引擎級別的:可以實現(xiàn)行鎖
>LOCK TABLES tab_name READ;加鎖
>UNLOCK TABLES;釋放鎖
(注意:如果在InnoDB中,定義時候并不生效,只有真正的事務(wù)開始,
定義的鎖才生效)
降低粒度,可以更好的支持并發(fā)性,這樣鎖的顆粒就越小,類似行鎖,鎖的
范圍小一些。
MYSQL的用戶管理:
創(chuàng)建用戶
CREATE USER
刪除用戶
DROP USER
授權(quán)
GRANT PRIV_LIST ON db.table TO [IDENTIFIED BY 'redhat'];
收回權(quán)限
REVOKE priv_list ON db.table FROM ;
WITH GRANT OPTION 同時把授權(quán)也一并授權(quán)給他
設(shè)置其使用的資源:
WITH MAX_QUERIES_PER_HOUT N;每個小時只能做N次查詢
WITH MAX_UPDATES_PER_HOUT N每個小時只能做N次更新
WITH MAX_CONNECTIONS_PER_HOUT N 每個小時只能做N次連接
WITH MAX_USER_CONNECTIONS N 每個用戶同時最大連接數(shù)
FLUSH USER_RESOURCES;
GRANT SELECT(name) ON db.table TO ;字段級別的權(quán)限
執(zhí)行存儲過程的權(quán)限
GRANT EXECUTE ON XXXX TO
忘記MySQL的密碼:
方法1.重裝
方法2.
vim /etc/init.d/d
先停止MySQL服務(wù)
#service mysqld stop
找到mysqld的二進制文件的位置,我這里就在/user/local/mysql/下
#/user/local/mysql/bin/mysqld_safe --skip-grant-tables --skip-networking & 后臺運行安全模式
然后連接數(shù)據(jù)庫
#mysql
>use mysql
>UPDATE user SET Password=PASSWORD('redhat') WHERE User='root' AND Host='localhost';
>UPDATE user SET Password=PASSWORD('redhat') WHERE User='root' AND Host='127.0.0.1';
#killall mysqqld
#service mysqld start
#mysql -uroot -p 登錄
以上是“MySQL怎么操作”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。