一、 數據庫的出現
1. 數據庫是什么: 數據庫簡單來說,就是存儲數據的地方(廢話),對于用戶認證這個過程來說,當用戶登錄服務器時, 系統需要把用戶的輸入的用戶認證信息和存儲的用戶認證信息進行比對,這一過程就需要事先把所有用戶的信息存儲在一個數據庫中,然后逐條進行比對。早起最傳統的數據庫當然就是文本文檔了,每個用戶認證時,需要把整個文本文檔湊頭到尾比對一邊,效率極其低下。隨著數據爆炸式的增長,以及用戶并發訪問量的增加,這樣的文本數據庫逐漸不能滿足互聯網時代的需要。于是產生了各種各樣的其他專門的數據庫程序來管理數據。
另外文本數據庫擁有幾個嚴重的缺陷:
1) 數據冗余和不一致: 同一個數據可能存放多次
2) 數據訪問困難
3) 數據孤立性:大文件拆分后,很難建立聯系
4) 數據完整性問題
5) 原子性問題:保證數據庫間交互式,能夠同步
6) 并發訪問
7) 安全性問題:不能只設置部分內容的權限 , 因此來說,把所有數據類操作交給前端程序,太過于粗糙。
2. 數據庫軟件:
為了更加精細的操作數據的存取,在應用程序和數據之間建立一個中間層,專門用來負載數據存取和管理,就產生了數據庫管理系統(DBMS)。
數據庫管理系統,包含前端API接口與前端應用程序交互,也包含shell命令行接口與程序員直接交互。同時負責完成數據存取。這時,前端程序將不再直接面對數據,而有數據庫管理系統代理完成更加精細管理工作。包括權限,以及如何按照比較高效的方式分配數據。
3. 數據庫模型:
1)層次模型
2)網狀模型
3)關系模型:1975年又IBM研究院E.F.Coded提出并發表了最開始論述關系型數據庫的模型論文,有拉里.克瑞森和其程序員朋友將其實現,后來承接了美國軍方一個名叫oracle的項目創建了oracle公司
4)NoSQL:No only SQL , 很多產品,各有側重點。 由于海量數據是由分布式存貯, 所以需要CAP測試,NoSQL 產品通常只能滿足兩個。
CAP測試: Consistent Avilable Partition tolerence 一致性, 可用性,容錯性
4. 開源數據庫:sqliteMySQL, PostgreSQL (EnterpriseDB),MariaDB,MySQL
二、 關系型數據庫管理器模型
1. 存儲的文件:
1) 數據:保存的數據
2) 索引:保存數據的索引文件
3) 事物文件:操作事物文件
2. 磁盤空間管理器: 用于管理磁盤上數據的存取,建立索引等工作
3. 緩沖區管理器: 為了解決頻繁I/O的低效,一部分檢索結果會存在緩沖區中內存中,緩沖區管理器用于管理存于內存中
4. 存取方法接口:管理數據的存取方法,于sql語句作用
5. 事物管理器:當以個存取操作完成后,并不是直接寫入數據文件,而且寫入事物日志中,如果此時數據庫崩潰,數據庫存取數據將會存入事務日志中。寫入數據庫文件為隨機I/O,寫入日志文件為順序I/O 所以后者比較快。
事物:滿足ACID測試
A:原子性
C: 一致性
I:隔離性
D:持久性
6. 鎖管理器:當某一數據在被用戶訪問時,它將不能再被其他用戶訪問,會被鎖管理器鎖住。
7. 恢復管理器:存取操作寫入事務日志但沒寫入數據中時,數據庫崩潰,在第二次重新啟時候,事務日志中內容將通過恢復管理器寫入到數據文件中
8. SQL查詢引擎:
1). SQL Struct Query Language : 結構化查詢語言, 包含以下三類命令
(1) DCL: Data Control Language: 數據控制語言,主要是授予或取消某些訪問權限
GRANT/REVORK
(2) DDL: Data Definition Language:數據定義語言,建立表,創建索引
CTREAT/ALTER/DROP
(3) DML : Data Manipulation Language:數據需改語言
SELECT/INSERT/DELETE/UPDATE
2). SQL查詢引擎包含四個部分
(1) 分析器,進行SQL語言的語法分析
(2) 查詢計劃,對查詢對象路徑進行優化,有可能統一對象存在多條索引
(3) 優化器, 對于SQL語言查詢方式進行優化
(4) 求解器, 管理返回結果等
(5) 線程池, 當mysql服務器接收多個并發請求時,分配線程響應多用戶
9. SQL命令行接口: SQL的客戶端程序,使用SQL命令查詢SQL服務器
10. 應用程序命令API:不同編程語言有不同的SQL命令輸出接口,可以通過API驅動把SQL語句輸送給SQL服務器,本質上也是SQL客戶端
11. ODBC: 底層關系型數據庫查詢標準
12. SQL索語言的標準 ANSI: SQL-86, SQL-89, SQL-92, SQL-99, SQL-2003
三、 mysql 服務器安裝和基本使用
1. mysql程序來源: 官方網站 mysql.com
1) vendor 系統自帶的rpm包
2) MySQL官方rpm包 : 不建議使用,可能會打破依賴關系
3) 通用二進制格式 : 建議
4) 源碼編譯 : 建議
2. 使用通用二進制文件安裝
1. 下載官方二進制文件tar包,解壓縮,并且復制其到/usr/local/ # wget http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.44-linux2.6-x86_64.tar.gz # tar -xf mysql-5.5.44-linux2.6-x86_64.tar.gz # cp -r mysql-5.5.44-linux2.6-x86_64 /usr/local/ # cd /usr/local/ # ln -sv mysql-5.5.44-linux2.6-x86_64 mysql 2. 創建mysql系統用戶用戶組 -r 選項創建系統用戶用戶組 # groupadd -r mysql # useradd -g mysql -r -s /sbin/nologin mysql # id mysql uid=498(mysql) gid=498(mysql) groups=498(mysql) 3. 修改文件的屬主屬組 # cd /local/usr/mysql # chown -R root:mysql * 4. 數據庫服務器初始化, 運行./script/mysql_install_db 創建系統庫 創建額外的LVM來存儲數據庫文件 # fdisk /dev/sdb Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First cylinder (1-13054, default 1): Using default value 1 Last cylinder, +cylinders or +size{K,M,G} (1-13054, default 13054): +10G Command (m for help): t Hex code (type L to list codes): 8e Command (m for help): w The partition table has been altered! # pvcreate /etc/sdb1 Physical volume "/dev/sdb1" successfully created # vgcreate mydata /dev/sdb1 Physical volume "/dev/sdb1" successfully created # lvcreate -L 6G -n mysqlData mydata Logical volume "mysqlData" created # mke2fs -t ext4 /dev/mydata/mysqlData # vim /etc/fstabl 中添加一行,設置開機自動掛 /dev/mydata/mysqlData /data ext4 defaults,noatime 0 0 # mkdir /data # mount -a # mkdir /data/mydata # chown -R mysql:mysql /data/mydata 由于數據庫操作是由mysql用戶執行的,所以要修改這個目錄權限 5. 運行數據庫初始化腳本 # ./mysql_install_db --basedir=/usr/local/mysql --datadir=/data/mydata --user=mysql Installing MySQL system tables... 150602 19:08:09 [Note] /usr/local/mysql/bin/mysqld (mysqld 5.5.44) starting as process 3913 ... OK Filling help tables... 150602 19:08:10 [Note] /usr/local/mysql/bin/mysqld (mysqld 5.5.44) starting as process 3920 ... OK 數據庫初始化腳本的幾個選項 --basedir=/usr/local/mysql 設置mysql頂層目錄位置 --datadir=/data/mydata 數據庫數據存放位置 --user=mysql 負責運行mysql數據庫的用戶 # ls /data/mydata 每一個數據庫為一個文件夾 mysql performance_schema test 5. 預備服務腳本和配置文件 # cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld # chkconfig --add mysqld # chkconfig --list | grep mysql chkconfig --list | grep mysql # cp /usr/local/mysql/support-files/my-large.cnf /etc/my.cnf 修改配置文的個別選項,在[mysqld]項下面加上 datadir = /data/mydata # service mysqld start Starting MySQL.. [ OK ] # 添加PATH換機變量 # vim /etc/profile.d/mysql.sh 添加 export PATH=/usr/local/mysql/bin:$PATH # chmod +x /etc/profile.d/mysql.sh # source /etc/profile.d/mysql.sh # mysql Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.5.44-log MySQL Community Server (GPL) Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
3. 啟動后產生的文件
# cd /data/mydata/ && ls ibdata1 ib_logfile0 ib_logfile1 mysql mysql-bin.000001 mysql-bin.index performance_schema test www.playground.com.err www.playground.com.pid 錯誤日志
www.playground.com.pid pid文件
ibdata1 inodb存儲引擎的表空間文件 ib_logfle0 inodb事物日志 mysql-bin.* 二進制日志 每個目錄相當于一個數據庫 插件式的存儲引擎,表類型, 底層的存儲引擎可以按需自行修改 MyISAM InoDB XtraDB(percona開源組織) InoDB的改良版
4. 需改管理員密碼
# mysql mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('root'); Query OK, 0 rows affected (0.00 sec) mysql> SET PASSWORD FOR 'root'@'127.0.0.1' = PASSWORD('root'); Query OK, 0 rows affected (0.00 sec) 演示效果 [root@www ~]# mysql -u root -h localhost -proot Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 12 Server version: 5.5.44-log MySQL Community Server (GPL) Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
5. 刪除匿名用戶
# mysql -uroot -hlocalhost -proot mysql> use mysql ## 系統內建有mysql系統庫, 里面user表,mysql服務器的用戶名和密碼都存放在里面 Database changed mysql> DESC user +------------------------+-----------------------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------------------+-----------------------------------+------+-----+---------+-------+ | Host | char(60) | NO | PRI | | | | User | char(16) | NO | PRI | | | | Password | char(41) | NO | | | | | Select_priv | enum('N','Y') | NO | | N | | | Insert_priv | enum('N','Y') | NO | | N | | | Update_priv | enum('N','Y') | NO | | N | | mysql> SELECT User,Host,Password FROM user; +------+--------------------+-------------------------------------------+ | User | Host | Password | +------+--------------------+-------------------------------------------+ | root | localhost | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | | root | www.playground.com | | | root | 127.0.0.1 | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | | root | ::1 | | | | localhost | | | | www.playground.com | | +------+--------------------+-------------------------------------------+ 6 rows in set (0.01 sec) ## 此時我們看見有兩個匿名用戶 mysql> DROP USER 'root'@'::1'; ## 刪除ipv6地址的root用戶 Query OK, 0 rows affected (0.00 sec) mysql> DROP USER ''@'localhost'; ## 刪除匿名用戶 Query OK, 0 rows affected (0.00 sec) mysql> DROP USER ''@'www.playground.com'; ## 刪除另一個匿名用戶 Query OK, 0 rows affected (0.00 sec) mysql> SET PASSWORD FOR 'root'@'www.playground.com' = PASSWORD('root'); ## 為另一個空密碼root用戶設置密碼 Query OK, 0 rows affected (0.00 sec) mysql> SELECT User,Host,Password FROM user; +------+--------------------+-------------------------------------------+ | User | Host | Password | +------+--------------------+-------------------------------------------+ | root | localhost | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | | root | www.playground.com | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | | root | 127.0.0.1 | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | +------+--------------------+-------------------------------------------+ 3 rows in set (0.00 sec)
7. 導出頭文件,庫文件和man文檔
# ln -sv /usr/local/mysql/include/ /usr/include/mysql `/usr/include/mysql' -> `/usr/local/mysql/include/' # vim /etc/ld.so.conf.d/mysql.conf 添加 /usr/local/mysql/lib/ # ldconfig -p | grep mysql libmysqlclient.so.18 (libc6,x86-64) => /usr/local/mysql/lib/libmysqlclient.so.18 # vim /etc/man.config 中添加 /usr/local/mysql/man # man mysqld AUTHOR Oracle Corporation (http://dev.mysql.com/). MySQL 5.5 05/02/2015 MYSQLD(8) (END) 說明已經是新版本了
四、 mysql客戶端以及命令的基本使用
1. 配置文件基本個是/etc/my.cnf,服務器配置文件和客戶端配置文件寫在一起,通常包含三個部分
1) [mysql] :mysql客戶端配置部分,只是用來配置mysql自己的客戶端
2) [mysqld]:mysql客戶端服務器配置段
3) [client]:mysql的所有客戶端,包括其他的客戶端
2. mysql客戶端用戶登錄
mysql -u 用戶名,不指定默認為root用戶 -h 主機名或IP,不指定為localhost -p 密碼, 不指定為空密碼
3. mysql的命令 :
命令不去分大小寫,命令參數區分大小寫,與文件相關的區分大小寫
1) 客戶端命令 : 在客戶端可以自動執行的命令
例如: help, status, quit,不需要語句終止符默認為“;”
使用help可以獲取命令幫助符, help KEYWORD
\g : 把命令送去服務器端,如果結束符被改了的情況下可以在sql命令后面加這個 mysql> SELECT User,host,Password FROM user\g +------+--------------------+-------------------------------------------+ | User | host | Password | +------+--------------------+-------------------------------------------+ | root | localhost | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | | root | www.playground.com | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | | root | 127.0.0.1 | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | +------+--------------------+-------------------------------------------+ \G : 把命令送去服務器, 顯示時候一行一行顯示 mysql> SELECT User,host,Password FROM user\G *************************** 1. row *************************** User: root host: localhost Password: *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B *************************** 2. row *************************** User: root host: www.playground.com Password: *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B *************************** 3. row *************************** User: root host: 127.0.0.1 Password: *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B 3 rows in set (0.00 sec)
2) 服務器端命令
SELECT SELECT col1, col2, ... FROM tb1, tb2, ... WHERE clause; WHERE clause: WHERE col1 > 30 ; 同城這里為判斷語句 SHOW DATABASES; 顯示所所有庫 USE database_name; 顯示數據庫 SHOW TABLES; 顯示某庫所有表 CREATE DATABASE database_name; 創建數據庫 DROP DATABASE database_name; 刪除數據庫
3) mysql 命令接收的兩種模式
交互式模式: 直接在mysql shell中輸入命令
批處理模式: 使用輸入重定向,mysql < test.sql 實現
非登錄執行命令:mysql -e "sql_command"
五、 mysql 服務器的幾個重要概念
1. 約束,constraint : 某一個字段取值的范圍
1) 主鍵約束 : 只要某些字段被定為主鍵,則填入數據時不能重復,另外不能為NULL 值
2) 外鍵約束:通過另一張表的取值范圍來約束當前表
3) 唯一鍵約束:與主鍵相同,但是可以為空 ,主鍵只能有一個,唯一鍵只能多個
4) 檢查式約束: 用戶自定義的取值范圍,通常為布爾表達式,符合條件才能填
5) 非空約束 : 不能為空
2. 鍵(key)
1)主鍵:能惟一標識表中每一個記錄的字段或字段的組合;
2)候選鍵 : 可以作為主鍵使用的字段或字段組合,不一定只有一種
3) 唯一鍵 : 唯一標示,但可以為空,數據不能重復出現
4) 外鍵
3. 表創建需要定義
1)需要定義的內容:字段名, 約束,字段類型
2)字符類型:
char(#): 不區分大小寫
varchar(#):區分大小寫
binary(#):不區分大小寫
varbinary(#):區分大小寫,
text(不區分大小寫):存儲指針,指向對象
blob(區分大小寫): 二進制大對象,只存儲指針,指向對象
3)數值型:
精確數值 :
int:tinyint(1byt), smallint(2byt),mediumint(4byt),int(4byt),bigint(8byt)
decimal :十進制小樹
近似值: float, double
日期時間型:date, time, datatime, timestamp
布爾型:
內置類型: ENUM 限定特定的取值范圍, SET
六、 mysql服務器的基本使用
1. 創建表刪除表:
CREATE TABLE tb_name (col1_name col1_type,...); DROP TABLE tb_name; 可以使用的字段修飾符,重建時寫在col_name 后面 NOT NULL NULL UNSIGNED DEFAULT AUTO_INCREMENT:自動增長類型的字段必須為主鍵或惟一鍵; 定義鍵類型的修飾符 PRIMARY KEY UNIQUE KEY 舉例: 創建一個名單 mysql> CREATE DATABASE mydata ; mysql> CREATE TABLE students (StuID int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, Name varchar(20) NOT NULL, Age tinyint UNSIGNED NOT NULL, Gender ENUM('F','M'));
mysql> DESC students; +--------+---------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------+---------------------+------+-----+---------+----------------+ | StuID | int(10) unsigned | NO | PRI | NULL | auto_increment | | Name | varchar(20) | NO | | NULL | | | Age | tinyint(3) unsigned | NO | | NULL | | | Gender | enum('F','M') | YES | | NULL | | +--------+---------------------+------+-----+---------+----------------+ 4 rows in set (0.00 sec)
2. 插入數據
INSERT INTO tb_name (col1, col2, ...) VALUE|VALUES (val1, val2, ...); INSERT INTO tb_name VALUES () 例子;插入多個記錄時,可以用逗號隔開 mysql> INSERT INTO students(Name,Age, Gender) VALUES ('john',35,'M'),('mark',28,'M'),('luke',20,'M'),('mathew',29,'M'); mysql> SELECT * FROM students ; +-------+--------+-----+--------+ | StuID | Name | Age | Gender | +-------+--------+-----+--------+ | 3 | john | 35 | M | | 4 | mark | 28 | M | | 5 | luke | 20 | M | | 6 | mathew | 29 | M | +-------+--------+-----+--------+ 6 rows in set (0.00 sec)
3. 查詢
SELECT col1, col2 FROM tb_name WHERE = > < >= <= LIKE : 加通配符, %: 任意長度的任意字符 _: 任意單個字符; RLIKE : 正則表達式 組合條件: and or not 例子: mysql> SELECT * FROM students WHERE Name LIKE 'm%'; +-------+--------+-----+--------+ | StuID | Name | Age | Gender | +-------+--------+-----+--------+ | 4 | mark | 28 | M | | 6 | mathew | 29 | M | +-------+--------+-----+--------+ 2 rows in set (0.00 sec mysql> SELECT * FROM students WHERE Name RLIKE '^m'; +-------+--------+-----+--------+ | StuID | Name | Age | Gender | +-------+--------+-----+--------+ | 4 | mark | 28 | M | | 6 | mathew | 29 | M | +-------+--------+-----+--------+ 2 rows in set (0.00 sec) mysql> SELECT * FROM students WHERE Age < 28; +-------+------+-----+--------+ | StuID | Name | Age | Gender | +-------+------+-----+--------+ | 5 | luke | 20 | M | +-------+------+-----+--------+ 1 row in set (0.00 sec)
4. 刪除;使用方式與SELECT類似, 如果不加限定條件會清空整張表
DELETE FROM tb_name; DELETE FROM tb_name WHERE clause;
5. 更新數據
UPDATE tb_name SET col1 = value WHERE clause; 例子:把所有的所有年齡小于20的Gender 改成F mysql> UPDATE students SET Gender = 'F' WHERE Age < 28; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> SELECT * FROM students ; +-------+--------+-----+--------+ | StuID | Name | Age | Gender | +-------+--------+-----+--------+ | 1 | john | 35 | M | | 2 | john | 35 | M | | 3 | john | 35 | M | | 4 | mark | 28 | M | | 5 | luke | 20 | F | | 6 | mathew | 29 | M | +-------+--------+-----+--------+ 6 rows in set (0.00 sec)
6. 字符集以及其他狀態命令: 字符集決定了字符的編碼格式和排列順序
SHOW CHARACTER SET : 顯示支持的字符集 常用的字符集: GBK GB2312 GB18030 UTF-8 SHOW COLLATION :排序規則, 相同的字符集有可能有不同的排序規則 GB2312_chinese_ci GB2312_bin SHOW ENGINES : 顯示存儲引擎 mysql> SHOW ENGINES ; +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | Engine | Support | Comment | Transactions | XA | Savepoints | +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO | | MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO | | CSV | YES | CSV storage engine | NO | NO | NO | | BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO | | MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO | | InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES | | ARCHIVE | YES | Archive storage engine | NO | NO | NO | | MyISAM | YES | MyISAM storage engine | NO | NO | NO | | FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL | +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ 9 rows in set (0.00 sec) SHOW TABLE STATUS [LIKE clause] mysql> SHOW TABLE STATUS LIKE 'students' \G *************************** 1. row *************************** Name: students Engine: InnoDB Version: 10 Row_format: Compact Rows: 6 Avg_row_length: 2730 Data_length: 16384 Max_data_length: 0 Index_length: 0 Data_free: 10485760 Auto_increment: 7 Create_time: 2015-06-03 23:44:13 Update_time: NULL Check_time: NULL Collation: latin1_swedish_ci Checksum: NULL Create_options: Comment: 1 row in set (0.00 sec)
7. 用戶授權;
GRANT ALL PRIVILEGES ON db_name.tb_name TO 'username'@'hostname' IDENTIFIED BY 'your_password'; FLUSH PRIVILEGES;
8. 服務器工作特性以及服務器特性變量
SHOW {GLOBAL|SESSION} VARIABLES [LIKE clause]; 例子: mysql> SHOW GLOBAL VARIABLES LIKE 'v%'; +-------------------------+------------------------------+ | Variable_name | Value | +-------------------------+------------------------------+ | version | 5.5.44-log | | version_comment | MySQL Community Server (GPL) | | version_compile_machine | x86_64 | | version_compile_os | linux2.6 | +-------------------------+------------------------------+ 4 rows in set (0.00 sec)
9. 服務器運行中的狀態變量輸出值查詢
SHOW {GLOBAL|SESSION} STATUS [LIKE clause]; 例子; mysql> SHOW GLOBAL STATUS LIKE 't%'; +-----------------------+-------+ | Variable_name | Value | +-----------------------+-------+ | Table_locks_immediate | 70 | | Table_locks_waited | 0 | | Tc_log_max_pages_used | 0 | | Tc_log_page_size | 0 | | Tc_log_page_waits | 0 | | Threads_cached | 0 | | Threads_connected | 1 | | Threads_created | 1 | | Threads_running | 1 | +-----------------------+-------+ 9 rows in set (0.00 sec)
原創文章,作者:以馬內利,如若轉載,請注明出處:http://www.www58058.com/4885
大神,你寫一篇博客需要多久???
@黑白子:一兩天吧, 主要是做實驗和畫圖費時間。工作起來沒那么多時間一個星期弄一篇就不錯了
哥你這文章錯別字真心太多了。。。。
@北京-清虛:這不能怪我,搜狗拼音就這么給力,好吧多謝建議,下次敲慢點