欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL數(shù)據(jù)庫(kù)簡(jiǎn)介與基本操作

 更新時(shí)間:2022年05月30日 15:06:21   作者:springsnow  
這篇文章介紹了MySQL數(shù)據(jù)庫(kù)與其基本操作,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

一、MySQL簡(jiǎn)介

1、數(shù)據(jù)庫(kù)管理軟件分類(lèi)

主要分為關(guān)系型和非關(guān)系型。

可以簡(jiǎn)單的理解為,關(guān)系型數(shù)據(jù)庫(kù)需要有表結(jié)構(gòu),非關(guān)系型數(shù)據(jù)庫(kù)是key-value存儲(chǔ)的,沒(méi)有表結(jié)構(gòu)。

關(guān)系型:如sqllite,db2,oracle,access,sql server,MySQL,注意:sql語(yǔ)句通用。

非關(guān)系型:mongodb,redis,memcache

2、MySQL

MySQL是一個(gè)關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng) ,由瑞典MySQL AB 公司開(kāi)發(fā),目前屬于 Oracle 旗下產(chǎn)品。

MySQL是最流行的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)之一,在 WEB 應(yīng)用方面,MySQL是最好的RDBMS (關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng))應(yīng)用軟件。

MySQL所使用的 SQL 語(yǔ)言是用于訪問(wèn)數(shù)據(jù)庫(kù)的最常用標(biāo)準(zhǔn)化語(yǔ)言。MySQL 軟件采用了雙授權(quán)政策,分為社區(qū)版和商業(yè)版,由于其體積小、速度快、總體擁有成本低,尤其是開(kāi)放源碼這一特點(diǎn),一般中小型網(wǎng)站的開(kāi)發(fā)都選擇 MySQL 作為網(wǎng)站數(shù)據(jù)庫(kù)。

MySQL為我們提供開(kāi)源的安裝在各個(gè)操作系統(tǒng)上的安裝包,包括mac,linux,windows。

二、存儲(chǔ)引擎(也稱作表類(lèi)型)

MySQL中的數(shù)據(jù)用各種不同的技術(shù)存儲(chǔ)在文件(或者內(nèi)存)中。每一種技術(shù)都使用不同的存儲(chǔ)機(jī)制、索引技巧、鎖定水平并且最終提供廣泛的不同的功能和能力。這些不同的技術(shù)以及配套的相關(guān)功能在MySQL中被稱作存儲(chǔ)引擎(也稱作表類(lèi)型)。

MySQL默認(rèn)配置了許多不同的存儲(chǔ)引擎,可以預(yù)先設(shè)置或者在MySQL服務(wù)器中啟用。

1、常用存儲(chǔ)引擎及適用場(chǎng)景

  • InnoDB:用于事務(wù)處理應(yīng)用程序,支持外鍵和行級(jí)鎖。如果應(yīng)用對(duì)事物的完整性有比較高的要求,在并發(fā)條件下要求數(shù)據(jù)的一致性,數(shù)據(jù)操作除了插入和查詢之外,還包括很多更新和刪除操作,那么InnoDB存儲(chǔ)引擎是比較合適的。 
    InnoDB除了有效的降低由刪除和更新導(dǎo)致的鎖定,還可以確保事務(wù)的完整提交和回滾,對(duì)于類(lèi)似計(jì)費(fèi)系統(tǒng)或者財(cái)務(wù)系統(tǒng)等對(duì)數(shù)據(jù)準(zhǔn)確要求性比較高的系統(tǒng)都是合適的選擇。
  • MyISAM:如果應(yīng)用是以讀操作和插入操作為主,只有很少的更新和刪除操作,并且對(duì)事務(wù)的完整性、并發(fā)性要求不高,那么可以選擇這個(gè)存儲(chǔ)引擎。
  • Memory:將所有的數(shù)據(jù)保存在內(nèi)存中,在需要快速定位記錄和其他類(lèi)似數(shù)據(jù)的環(huán)境下,可以提供極快的訪問(wèn)。 
    Memory的缺陷是對(duì)表的大小有限制,雖然數(shù)據(jù)庫(kù)因?yàn)楫惓=K止的話數(shù)據(jù)可以正?;謴?fù),但是一旦數(shù)據(jù)庫(kù)關(guān)閉,存儲(chǔ)在內(nèi)存中的數(shù)據(jù)都會(huì)丟失。

mysql支持的存儲(chǔ)引擎包括InnoDB、MyISAM、MEMORY、CSV、BLACKHOLE、 NDB、FEDERATED、MRG_MYISAM、ARCHIVE、PERFORMANCE_SCHEMA。 
其中NDB和InnoDB提供事務(wù)安全表,其他存儲(chǔ)引擎都是非事務(wù)安全表。

2、存儲(chǔ)引擎在mysql中的使用

# 查看當(dāng)前的默認(rèn)存儲(chǔ)引擎:
mysql> show variables like "default_storage_engine";

# 查詢當(dāng)前數(shù)據(jù)庫(kù)支持的存儲(chǔ)引擎
mysql> show engines \G;

1、 在建表時(shí)指定存儲(chǔ)引擎

mysql> create table ai(id bigint(12),name varchar(200)) ENGINE=MyISAM; 
mysql> create table country(id int(4),cname varchar(50)) ENGINE=InnoDB;

# 也可以使用alter table語(yǔ)句,修改一個(gè)已經(jīng)存在的表的存儲(chǔ)引擎。
mysql> alter table ai engine = innodb;

2 、在配置文件中指定存儲(chǔ)引擎

# my.ini文件
[mysqld]
default-storage-engine=INNODB

三、MySQL表操作

1、查看表結(jié)構(gòu)

查看表結(jié)構(gòu)有兩種方式:

  • desc[tablename]和describe [tablename]:這兩種方法和效果相同,可以查看當(dāng)前的表結(jié)構(gòu)。
  • show create table [tablename]:除了可以看到表定義之外,還可以看到engine(存儲(chǔ)引擎)和charset(字符集)等信息。(\G選項(xiàng)的含義是是的記錄能夠豎向排列,以便更好的顯示內(nèi)容較長(zhǎng)的記錄。)

舉例:

mysql> desc staff_info;
+-------+-----------------------+------+-----+---------+-------+
| Field | Type                  | Null | Key | Default | Extra |
+-------+-----------------------+------+-----+---------+-------+
| id    | int(11)               | YES  |     | NULL    |       |
| name  | varchar(50)           | YES  |     | NULL    |       |
| age   | int(3)                | YES  |     | NULL    |       |
| sex   | enum('male','female') | YES  |     | NULL    |       |
| phone | bigint(11)            | YES  |     | NULL    |       |
| job   | varchar(11)           | YES  |     | NULL    |       |
+-------+-----------------------+------+-----+---------+-------+
rows in set (0.00 sec)

mysql> show create table staff_info\G;
*************************** 1. row ***************************
       Table: staff_info
Create Table: CREATE TABLE `staff_info` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(50) DEFAULT NULL,
  `age` int(3) DEFAULT NULL,
  `sex` enum('male','female') DEFAULT NULL,
  `phone` bigint(11) DEFAULT NULL,
  `job` varchar(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
row in set (0.01 sec)

ERROR: 
No query specified

2、自動(dòng)增長(zhǎng)列

約束字段為自動(dòng)增長(zhǎng),被約束的字段必須同時(shí)被key主鍵約束

--不指定id,則自動(dòng)增長(zhǎng)
create table student(id int primary key auto_increment,name varchar(20),sex enum('male','female') default 'male');

mysql> desc student;
+-------+-----------------------+------+-----+---------+----------------+
| Field | Type                  | Null | Key | Default | Extra          |
+-------+-----------------------+------+-----+---------+----------------+
| id    | int(11)               | NO   | PRI | NULL    | 
auto_increment  |
| name  | varchar(20)           | YES  |     | NULL    |                |
| sex   | enum('male','female') | YES  |     | male    |                |
+-------+-----------------------+------+-----+---------+----------------+
mysql> insert into student(name) values ('nick'),('tank') ;

mysql> select * from student;
+----+------+------+
| id | name | sex  |
+----+------+------+
|  1 | nick | male |
|  2 | tank | male |
+----+------+------+


--也可以指定id
mysql> insert into student values(4,'asb','female');
Query OK, 1 row affected (0.00 sec)

mysql> insert into student values(7,'wsb','female');
Query OK, 1 row affected (0.00 sec)

mysql> select * from student;
+----+------+--------+
| id | name | sex    |
+----+------+--------+
|  1 | nick | male   |
|  2 | tank | male   |
|  4 | asb  | female |
|  7 | wsb  | female |
+----+------+--------+


--對(duì)于自增的字段,在用delete刪除后,再插入值,該字段仍按照刪除前的位置繼續(xù)增長(zhǎng)
mysql> delete from student;
Query OK, 4 rows affected (0.00 sec)

mysql> select * from student;
Empty set (0.00 sec)

mysql> insert into student(name) values('ysb');
mysql> select * from student;
+----+------+------+
| id | name | sex  |
+----+------+------+
|  8 | ysb  | male |
+----+------+------+

--應(yīng)該用truncate清空表,比起delete一條一條地刪除記錄,truncate是直接清空表,在刪除大表時(shí)用它
mysql> truncate student;
Query OK, 0 rows affected (0.01 sec)

mysql> insert into student(name) values('nick');
Query OK, 1 row affected (0.01 sec)

mysql> select * from student;
+----+------+------+
| id | name | sex  |
+----+------+------+
|  1 | nick | male |
+----+------+------+
row in set (0.00 sec)

--在創(chuàng)建完表后,修改自增字段的起始值
mysql> create table student(id int primary key auto_increment, name varchar(20),sex enum('male','female') default 'male');
mysql> alter table student auto_increment=3 ;
mysql> show create table student;
.......
ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8

--也可以創(chuàng)建表時(shí)指定auto_increment的初始值,注意初始值的設(shè)置為表選項(xiàng),應(yīng)該放到括號(hào)外
mysql> create table student(id int primary key auto_increment, name varchar(20),sex enum('male','female') default 'male' 
                           )auto_increment=3 ;

四 、MySQL支持的數(shù)據(jù)類(lèi)型

1、ENUM和SET類(lèi)型

  • ENUM中文名稱叫枚舉類(lèi)型,它的值范圍需要在創(chuàng)建表時(shí)通過(guò)枚舉方式顯示。 
    ENUM只允許從值集合中選取單個(gè)值,而不能一次取多個(gè)值。用途:?jiǎn)芜x:選擇性別

ENUM: 
對(duì)1-255個(gè)成員的枚舉需要1個(gè)字節(jié)存儲(chǔ); 
對(duì)于255-65535個(gè)成員,需要2個(gè)字節(jié)存儲(chǔ); 
最多允許65535個(gè)成員。

  • SET和ENUM非常相似,也是一個(gè)字符串對(duì)象,里面可以包含0-64個(gè)成員。根據(jù)成員的不同,存儲(chǔ)上也有所不同。 
    set類(lèi)型可以允許值集合中任意選擇1或多個(gè)元素進(jìn)行組合。對(duì)超出范圍的內(nèi)容將不允許注入,而對(duì)重復(fù)的值將進(jìn)行自動(dòng)去重。用途:多選:興趣愛(ài)好性別

SET: 
1-8個(gè)成員的集合,占1個(gè)字節(jié) 
9-16個(gè)成員的集合,占2個(gè)字節(jié) 
17-24個(gè)成員的集合,占3個(gè)字節(jié) 
25-32個(gè)成員的集合,占4個(gè)字節(jié) 
33-64個(gè)成員的集合,占8個(gè)字節(jié)

2、set/enum示例

mysql> create table t10 (name char(20),gender enum('female','male') );
Query OK, 0 rows affected (0.01 sec)

-- 選擇enum('female','male')中的一項(xiàng)作為gender的值,可以正常插入
mysql> insert into t10 values ('nick','male');
Query OK, 1 row affected (0.00 sec)

-- 不能同時(shí)插入'male,female'兩個(gè)值,也不能插入不屬于'male,female'的值
mysql> insert into t10 values ('nick','male,female');
ERROR 1265 (01000): Data truncated for column 'gender' at row 1

mysql> create table t11 (name char(20),hobby set('抽煙','喝酒','燙頭','翻車(chē)') );
Query OK, 0 rows affected (0.01 sec)

-- 可以任意選擇set('抽煙','喝酒','燙頭','翻車(chē)')中的項(xiàng),并自帶去重功能
mysql> insert into t11 values ('tank','燙頭,喝酒,燙頭');
Query OK, 1 row affected (0.01 sec)

mysql> select * from t11;
+------+---------------+
| name | hobby        |
+------+---------------+
| tank | 喝酒,燙頭     |
+------+---------------+
row in set (0.00 sec)

-- 不能選擇不屬于set('抽煙','喝酒','燙頭','翻車(chē)')中的項(xiàng),
mysql> insert into t11 values ('jason','燙頭,翻車(chē),看妹子');
ERROR 1265 (01000): Data truncated for column 'hobby' at row 1

五、MySQL表查詢

1、限制查詢的記錄數(shù)(limit)

示例:

SELECT * FROM employee ORDER BY salary DESC 
    LIMIT 3;    --默認(rèn)初始位置為0 

SELECT * FROM employee ORDER BY salary DESC
    LIMIT 0 , 5 ; --從第0開(kāi)始,即先出第一條,然后包含這一條在內(nèi)往后查5條

SELECT * FROM employee ORDER BY salary DESC
    LIMIT 5 , 5 ; --從第5開(kāi)始,即先出第6條,然后包含這一條在內(nèi)往后查5條

2、使用正則表達(dá)式查詢

小結(jié):對(duì)字符串匹配的方式

  • WHERE emp_name = 'nick';
  • WHERE emp_name LIKE 'sea%';
  • WHERE emp_name REGEXP 'on$';
SELECT * FROM employee WHERE emp_name REGEXP '^jas';
SELECT * FROM employee WHERE emp_name REGEXP 'on$';
SELECT * FROM employee WHERE emp_name REGEXP 'm{2}';

六、數(shù)據(jù)備份(命令行)

1、 數(shù)據(jù)庫(kù)的邏輯備份

--語(yǔ)法:
mysqldump -h 服務(wù)器 -u用戶名 -p密碼 數(shù)據(jù)庫(kù)名 > 備份文件.sql

--示例:
--單庫(kù)備份
mysqldump -uroot –p123  mysql > c:\db1.sql
mysqldump -uroot -p123 db1 table1 table2 > db1-table1-table2.sql

--多庫(kù)備份
mysqldump -uroot -p123 --databases db1 db2 mysql db3 > db1_db2_mysql_db3.sql

--備份所有庫(kù)
mysqldump -uroot -p123 --all-databases > all.sql

2、 數(shù)據(jù)恢復(fù)

--方法一:
[root@nick backup]-- mysql -uroot -p123 < /backup/all.sql

--方法二:
mysql> use db1;
mysql> SET SQL_LOG_BIN=0;   --關(guān)閉二進(jìn)制日志,只對(duì)當(dāng)前session生效
mysql> source /root/db1.sql

七、事務(wù)和鎖(SQL)

begin;  -- 開(kāi)啟事務(wù)
   select * from emp where id = 1 for update;  -- 查詢id值,for update添加行鎖;
    update emp set salary=10000 where id = 1; -- 完成更新
commit; -- 提交事務(wù)

八、執(zhí)行計(jì)劃Explain

執(zhí)行計(jì)劃:讓mysql預(yù)估執(zhí)行操作(一般正確)

Explain語(yǔ)法:

explain select … from … [where …]

Explain命令在解決數(shù)據(jù)庫(kù)性能上是第一推薦使用命令,大部分的性能問(wèn)題可以通過(guò)此命令來(lái)簡(jiǎn)單的解決,Explain可以用來(lái)查看SQL語(yǔ)句的執(zhí)行效果,可以幫助選擇更好的索引和優(yōu)化查詢語(yǔ)句,寫(xiě)出更好的優(yōu)化語(yǔ)句。

具體用法和字段含義可以參考官網(wǎng)explain-output ,這里需要強(qiáng)調(diào)rows是核心指標(biāo),絕大部分rows小的語(yǔ)句執(zhí)行一定很快(rows:顯示MySQL認(rèn)為它執(zhí)行查詢時(shí)必須檢查的行數(shù)。)。所以優(yōu)化語(yǔ)句基本上都是在優(yōu)化rows。

例如:

explain select * from news;

輸出:

+--+-----------+-----+----+-------------+---+-------+---+----+-----+?
|id|select_type|table|type|possible_keys|key|key_len|ref|rows|Extra|?
+--+-----------+-----+----+-------------+---+-------+---+----+----—+

到此這篇關(guān)于MySQL數(shù)據(jù)庫(kù)簡(jiǎn)介與基本操作的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • SQL實(shí)戰(zhàn)演練之網(wǎng)上商城數(shù)據(jù)庫(kù)用戶信息數(shù)據(jù)操作

    SQL實(shí)戰(zhàn)演練之網(wǎng)上商城數(shù)據(jù)庫(kù)用戶信息數(shù)據(jù)操作

    一直認(rèn)為,扎實(shí)的SQL功底是一名數(shù)據(jù)分析師的安身立命之本,甚至可以稱得上是所有數(shù)據(jù)從業(yè)者的基本功。當(dāng)然,這里的SQL絕不單單是寫(xiě)幾條查詢語(yǔ)句那么簡(jiǎn)單,接下來(lái)請(qǐng)跟著小編通過(guò)案例項(xiàng)目進(jìn)一步提高SQL的能力吧
    2021-10-10
  • 解決遠(yuǎn)程連接MySQL報(bào)錯(cuò):2003 - Can‘t connect to MySQL server on ‘X.X.X.X‘ (10060 “Unknown error“)問(wèn)題

    解決遠(yuǎn)程連接MySQL報(bào)錯(cuò):2003 - Can‘t connect to&nb

    這篇文章主要給大家介紹了解決遠(yuǎn)程連接MySQL報(bào)錯(cuò):2003 - Can‘t connect to MySQL server on ‘X.X.X.X‘ (10060 “Unknown error“)問(wèn)題的方案,文中有詳細(xì)的解決步驟,需要的朋友可以參考下
    2023-09-09
  • mysql5.7.18解壓版啟動(dòng)mysql服務(wù)

    mysql5.7.18解壓版啟動(dòng)mysql服務(wù)

    這篇文章主要為大家詳細(xì)介紹了mysql5.7.18解壓版啟動(dòng)mysql服務(wù)的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • MySQL內(nèi)存使用之線程獨(dú)享介紹

    MySQL內(nèi)存使用之線程獨(dú)享介紹

    這篇文章主要介紹了MySQL內(nèi)存使用之線程獨(dú)享介紹,線程獨(dú)享內(nèi)存主要用于各客戶端連接線程存儲(chǔ)各種操作的獨(dú)享數(shù)據(jù),如線程棧信息,分組排序操作,數(shù)據(jù)讀寫(xiě)緩沖,結(jié)果集暫存等等,而且大多數(shù)可以通過(guò)相關(guān)參數(shù)來(lái)控制內(nèi)存的使用量,需要的朋友可以參考下
    2014-12-12
  • MySQL打印死鎖日志的方法步驟

    MySQL打印死鎖日志的方法步驟

    本文主要介紹了MySQL打印死鎖日志的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • MySQL中必須了解的13個(gè)關(guān)鍵字總結(jié)

    MySQL中必須了解的13個(gè)關(guān)鍵字總結(jié)

    這篇文章主要為大家詳細(xì)介紹了MySQL中必須了解學(xué)會(huì)的13個(gè)關(guān)鍵字,文中的示例代碼簡(jiǎn)潔易懂,對(duì)我們掌握MySQL有一定的幫助,需要的可以了解下
    2023-09-09
  • MySQL批量SQL插入性能優(yōu)化詳解

    MySQL批量SQL插入性能優(yōu)化詳解

    這篇文章主要為大家詳細(xì)介紹了MySQL批量SQL插入性能優(yōu)化,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • mysql聚集索引、輔助索引、覆蓋索引、聯(lián)合索引的使用

    mysql聚集索引、輔助索引、覆蓋索引、聯(lián)合索引的使用

    本文主要介紹了mysql聚集索引、輔助索引、覆蓋索引、聯(lián)合索引的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • MYSQL主從庫(kù)不同步故障一例解決方法

    MYSQL主從庫(kù)不同步故障一例解決方法

    第一次做完主從庫(kù)同步后正常,但工作過(guò)程中發(fā)現(xiàn)有一個(gè)庫(kù)的數(shù)據(jù)庫(kù)沒(méi)有同步起來(lái),在另外一個(gè)mysql(3307)中
    2010-06-06
  • MySQL中的常用函數(shù)

    MySQL中的常用函數(shù)

    這篇文章主要介紹了MySQL中的常用函數(shù)的相關(guān)資料,需要的朋友可以參考下
    2016-08-08

最新評(píng)論