真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

MySQL怎么操作

小編給大家分享一下MySQL怎么操作,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、小程序制作、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了全南免費(fèi)建站歡迎大家使用!

創(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'); //單個(gè)插入
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ù)后的一個(gè)簡(jiǎn)單的表的內(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      |
+----+--------+------+--------+
但是這個(gè)時(shí)候如果我們?cè)谠俅尾迦氲脑扞D號(hào)會(huì)從原來刪除的編號(hào)增加
mysql> SELECT LAST_INSERT_ID();//顯示上次插入的是第幾個(gè)
+------------------+
| 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      |
+----+--------+------+--------+
看到了吧,不是依次增長(zhǎng)的,而是有間隔,現(xiàn)在我們?cè)趧h除了ID為6的行,然后插入設(shè)置他的ID為5,接著再自動(dòng)插入;
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      |
+----+--------+------+--------+
可以看出還是不會(huì)按照我們的意思讓他接著自動(dòng)增長(zhǎng),這個(gè)時(shí)候我們可以通過設(shè)置,讓他重新按照我們?cè)O(shè)置的為起點(diǎn)自動(dòng)增長(zhǎng)
mysql> DELETE FROM study WHERE ID=7;
mysql> ALTER TABLE study AUTO_INCREMENT=5;//設(shè)置自動(dòng)增長(zhǎng)的起點(diǎn)
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了,我估計(jì)QQ在設(shè)置QQ號(hào)的時(shí)候也是通過這種方式,保留小于5位的QQ號(hào),所有大家用的都是7位以上的(題外話,呵呵)。

修改表結(jié)構(gòu)
如果想插入一個(gè)新的字段,可以使用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    |                |
+--------+---------------+------+-----+---------+----------------+
可以實(shí)現(xiàn)效果
當(dāng)讓還可以通過使用MODIFY來試下對(duì)表中字段的屬性進(jìn)行設(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中沒有字段的話,會(huì)有warning,所以在你做的時(shí)候可以先添加數(shù)據(jù),然后在修改。
隨著發(fā)展,我發(fā)現(xiàn)后面的work這個(gè)字段沒用了,想刪除study表中的這個(gè)屬性
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)在我覺得表明有點(diǎn)長(zhǎng),想換一個(gè)短的來方便下面的實(shí)驗(yàn),當(dāng)然在實(shí)際的過程中,我們應(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   |
+----+--------+------+--------+--------+
這里我只有一個(gè)表,現(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),其實(shí)Master是一個(gè)姓名,所以我們?cè)俳⒁粋€(gè)新表mt,來記錄Master的對(duì)應(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)在兩個(gè)表準(zhǔn)備好了,接下來我將做一下多表之間的查詢
多表之間的查詢可以分為:
  交叉查詢:笛卡爾乘積,兩表相乘;
  內(nèi)連接:對(duì)稱連接,就是顯示兩個(gè)表中都有的,一個(gè)表中如果沒有,就不顯示了;
  外連接:非對(duì)稱連接
    左外連接:LEFT JOIN ON 左表中的都顯示,右表中無的話顯示為NULL
    右外連接:RIGHT JOIN ON 右表中的都顯示,左表中無的話顯示為NULL
  自連接:一個(gè)表中的一列建立在同張表的另一列;
  UNION:連接兩個(gè)表;
接下來分別對(duì)上面的情況進(jìn)行實(shí)驗(yàn);
1.交叉查詢:
mysql> SELECT * FROM st,mt;
42 rows in set (0.00 sec)//中間的數(shù)據(jù)就省略了,這里的結(jié)果就是兩個(gè)表的行數(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    |
+--------+------+
這時(shí)候我們可以看到,凡是左表中有的,都顯示了,右表中沒有的都顯示為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)這樣就把兩個(gè)表連接到了一起了。

多表操作就到此了,接下來要說的是數(shù)據(jù)庫中的視圖,子查詢,事務(wù),同步的相關(guān)知識(shí)了;
我就以st這個(gè)表為基礎(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)建一個(gè)查詢顯示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;
子查詢語句:(其實(shí)MySQL的子查詢支持的還不是很好)
mysql> SELECT * FROM view WHERE ID > 0;
我就借用剛建立的視圖進(jìn)行查詢,其實(shí)這個(gè)是多此一舉的做法,呵呵,只是演示一下效果,當(dāng)讓在工作中可能會(huì)遇到更多的問題的。

事務(wù):transact
事務(wù)就是幾個(gè)Sql語句要么都執(zhí)行,要么都不執(zhí)行,這樣就防治一方執(zhí)行,另一方?jīng)]執(zhí)行,從而產(chǎn)生虛擬的假象,比如A通過銀行向B轉(zhuǎn)賬,如果這個(gè)時(shí)候A剛轉(zhuǎn)出去,B那邊的斷電了(假設(shè),其實(shí)這樣的事出現(xiàn)的概率還是蠻小的,呵呵),所以等A和B見面之后,就說不清了,所以事務(wù)就是如果兩個(gè)都沒實(shí)現(xiàn),就是A發(fā)送成功,B接受成功,才能算是真正的成功,所以這樣就能避免不必要的損失。
接下來介紹一下事務(wù)隔離的級(jí)別:
1.讀未提交 READ UNCOMMITED
2.讀提交 READ COMMITED
3.可重讀 REPEATABLE READ 默認(rèn)
4.串行化 SERIABLIZABLE
從1-->4隔離級(jí)別依次增加,并發(fā)性依次降低
mysql> SHOW VARIABLES LIKE 'tx_isolation';//查看系統(tǒng)使用的默認(rèn)的隔離級(jí)別
+---------------+-----------------+
| 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)為這個(gè)時(shí)候數(shù)據(jù)庫不支持事務(wù),為了演示事務(wù)的效果,我把mysql的引擎改為InnoDB ,使用如下命令:
mysql> SET SESSION storage_engine = InnoDB;
然后在這個(gè)引擎的基礎(chǔ)上建立一個(gè)表
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)前表的存儲(chǔ)引擎
mysql> SHOW TABLE STATUS LIKE 'tt';
顯示的結(jié)果是InnoDB的引擎;
1.設(shè)置為READ UNCOMMITTED(讀未提交)的級(jí)別
mysql> SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;//修改隔離級(jí)別為READ UNCONMMITED顯示為REPEATABLE-READ
mysql> SHOW VARIABLES LIKE 'tx_isolation';
+---------------+------------------+
| Variable_name | Value            |
+---------------+------------------+
| tx_isolation  | READ-UNCOMMITTED |
+---------------+------------------+
這個(gè)級(jí)別下,如果兩個(gè)事務(wù)同時(shí)進(jìn)行,任何一方的改變,對(duì)方都能看到,因?yàn)槲覀冊(cè)谠O(shè)置的時(shí)候采用的是SESSION,會(huì)話的模式,所以兩個(gè)終端都要進(jìn)行READ UNCOMMITTED設(shè)置

所以這個(gè)的設(shè)置的并發(fā)性最好,但是受到的影響卻是最大的
2.設(shè)置為READ COMMITED(讀提交)級(jí)別
這個(gè)級(jí)別下,當(dāng)其中的任意一個(gè)事務(wù)提交了,其他處于事務(wù)狀態(tài)的就能同步到信息,如下圖是沒有提交之前的圖,這個(gè)時(shí)候還不能看到


 
如果B的事務(wù)提交了,再來看看這個(gè)結(jié)果,如下圖所示:

盡管A沒有提交,但是也能看到信息了
3.設(shè)置為REPEATABLE READ(可重讀)級(jí)別
如果設(shè)置為這個(gè)級(jí)別的話,兩個(gè)同時(shí)進(jìn)行的事務(wù),相互不受影響,只用當(dāng)兩個(gè)事務(wù)都提交了才能看到所有變化的信息,否則,各自只能看到自己完成的
我現(xiàn)在打開兩個(gè)終端A、B,同時(shí)進(jìn)入事務(wù)
mysql> START TRANSACTION;//A進(jìn)入事務(wù)狀態(tài)
mysql> START TRANSACTION;//B進(jìn)入事務(wù)狀態(tài)
然后我在B事務(wù)狀態(tài)下向表進(jìn)行插入一行數(shù)據(jù),然后在兩個(gè)表中都查看,結(jié)果發(fā)現(xiàn)數(shù)據(jù)不一樣,如下圖所示:

如果我現(xiàn)在把B的事務(wù)提交了,再在A、B上查看,發(fā)現(xiàn)只有B上的有新插入的一行,而A任然沒有,如圖所示:

如果我現(xiàn)在把A的也提交了,在查看的話,兩個(gè)就會(huì)出現(xiàn)數(shù)據(jù)同步了,如圖所示:

這就是REPEATABLE READ級(jí)別的效果,就是兩個(gè)事務(wù)操作的時(shí)候相互不干擾,只有當(dāng)兩個(gè)事務(wù)都提交了,數(shù)據(jù)才會(huì)同步。
4.設(shè)置為SERIABLIZABLE級(jí)別
這個(gè)時(shí)候只有當(dāng)前一個(gè)事務(wù)執(zhí)行完成并提交了,下一個(gè)事務(wù)才開始,做了更加嚴(yán)格的限制,所以一般不做這樣的級(jí)別限制
 
同步:(clock)
  通過鎖機(jī)制來解決同步問題
  鎖:
    共享鎖(讀鎖):
    獨(dú)占鎖(寫鎖): 
    寫鎖的優(yōu)先級(jí)高于讀鎖
    鎖級(jí)別:
      表鎖,行鎖,頁鎖(內(nèi)存空間)
    鎖的實(shí)現(xiàn):
      服務(wù)器級(jí)別的;只能實(shí)現(xiàn)表鎖
      存儲(chǔ)引擎級(jí)別的:可以實(shí)現(xiàn)行鎖
    >LOCK TABLES tab_name READ;加鎖
    >UNLOCK TABLES;釋放鎖
    (注意:如果在InnoDB中,定義時(shí)候并不生效,只有真正的事務(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 同時(shí)把授權(quán)也一并授權(quán)給他
設(shè)置其使用的資源:
WITH MAX_QUERIES_PER_HOUT N;每個(gè)小時(shí)只能做N次查詢
WITH MAX_UPDATES_PER_HOUT N每個(gè)小時(shí)只能做N次更新
WITH MAX_CONNECTIONS_PER_HOUT N  每個(gè)小時(shí)只能做N次連接
WITH MAX_USER_CONNECTIONS N 每個(gè)用戶同時(shí)最大連接數(shù)
FLUSH USER_RESOURCES;
GRANT SELECT(name) ON db.table TO ;字段級(jí)別的權(quán)限
執(zhí)行存儲(chǔ)過程的權(quán)限
GRANT EXECUTE ON XXXX TO
 
 
忘記MySQL的密碼:
方法1.重裝
方法2.
vim /etc/init.d/d
先停止MySQL服務(wù)
#service mysqld stop
找到mysqld的二進(jìn)制文件的位置,我這里就在/user/local/mysql/下
#/user/local/mysql/bin/mysqld_safe --skip-grant-tables --skip-networking & 后臺(tái)運(yùn)行安全模式
然后連接數(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)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


名稱欄目:MySQL怎么操作
URL標(biāo)題:http://weahome.cn/article/pdsjih.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部