MySQL基礎

數據庫定義:存儲數據的倉庫 php

應用:金融機構,遊戲網站,購物網站,論壇網站 java

提供數據庫軟件:Oracle,DB2,SQL server,MySQL,Mariadb,mongodb,redis (紅色不開源;SQL server不跨平臺,藍色非關係型數據庫) mysql

數據遷移: redis

MySQL介紹:關係型數據庫,跨平臺,可移植性好,支持多種編程語言(php .net java) sql

mysql-community-client(MySQL工具包)mysql-community-server(MySQL服務包) mongodb

服務名:mysqld;端口:3306;協議:tcp; 主配置文件:/etc/my.cnf 數據庫目錄:/var/lib/mysql 用戶和用戶組:root 數據庫

SQL語言分類: 編程

DDL:數據定義語言 緩存

DML:數據操做語言 安全

DCL:數據控制語言

DTL:數據事物語言

MySQL體系結構:

管理工具:安裝mysql數據庫服務軟件後自帶的命令

connection pool:鏈接池

檢查是否有空閒的線程和是否有硬件資源分配給線程使用。

SQL Interface: SQL接口

把SQL命令傳遞給mysqld進程。

Parser: 解析器

檢查執行的SQL命令是否語法錯誤。

Optimizer: 查詢優化器

優化執行的SQL命令,以最節省硬件資源的方式運行。

Cache和Buffer: 查詢緩存

存儲客戶端曾經查找過的sql記錄(相似交換機工做原理

Engine :存儲引擎

訪問表時,決定對錶加鎖的粒度

文件系統:存儲數據的存儲設備(如硬盤)

   

常見管理工具:

   

登錄

mysql -h 主機名 -u 用戶名 -p

  • -h : 該命令用於指定客戶端所要登陸的MySQL的ip(受權), 登陸當前機器該參數能夠省略;(主機就是本機時,主機名能夠是localhost)
  • -u : 所要登陸的用戶名,root不是系統用戶;
  • -p : 接密碼

注:登錄初始密碼在"/var/log/mysqld.log"文件的"localhost:"字符串後,若密碼有!用''引發

退出登陸

Quit;(\q)

註釋:

#

--

COMMENT '內容' 給字段添加註釋

察看手冊:

HELP command;

? command;

\h command;

取消當前命令

\c

將日誌文件保存(結束)到文本文件

\T 文件路徑 (\t)

當前打開的數據庫名稱

SELECT DATABASE();

選擇數據庫

兩種方式對數據庫進行使用的選擇:

一: 在登陸數據庫時指定, 命令: mysql -D dbname -h 主機名 -u 用戶名 -p

例如登陸時選擇剛剛建立的數據庫: mysql -D samp_db -u root -p

二: 在登陸後使用 use 語句指定, 命令: use dbname;

use 語句能夠不加分號, 執行 use samp_db 來選擇剛剛建立的數據庫, 選擇成功後會提示: Database changed

庫級知識

顯示數據庫: show databases;

建立數據庫(指定編碼方式): create database dbname [charset utf8]; #庫名支持數字,字母,下劃線,不能純數字,區分大小寫

更改數據庫編碼方式:ALTER DATABASE dbname DEFAULT CHARSET utf8;

刪除數據庫: drop database dbname;

察看數據庫建立時語法:SHOW CREATE DATABASE dbname; \G #參數用於格式化輸出

表級操做:

顯示庫下面的表 show tables;

查看錶的結構: desc tableName;

查看錶的建立過程: show create table tableName;

查看錶的內容:select * from tableName;

建立表:

create table tbName (

列名稱1列類型[列參數][not null default ],

....2… , #無符號,在數據類型下添加UNSIGNED

....3… #零填充,在數據以前以0填充ZEROFILL

---n #最後一列不能有逗號

);

刪除表:

DROP TABLE tbName;

更改表名:

ALTER TABLE tal_name RENAME [TO|AS] new_name;

RENAME TABLE tbl_name TO new_name;

移動數據表:

RENAME TABLE 庫1.表名 TO 庫2.表名; #把表從庫1移動到庫2

複製表:

CREATE TABLE .表 sql查詢; #將查詢結果複製到新表,key屬性不會複製,查詢無結果就只複製表結構

向表中插入記錄:

INSERT tbl_name VALUE|VALUES(…..); 插入全部

INSERT TableName (col1,col2,……) VALUES (val1,val2……); -- 插入指定列

INSERT TableName VALUES 一次插入多行

(val1,val2……),

(val1,val2……),

(val1,val2……);

刪除表中的數據:

刪除全部數據:TRUNCATE TABLE tablename

刪除指定數據:DELETE FROM tablename WHERE 條件;

修改數據

UPDATE TableName

SET

Col1=newval1,

Col2=newval2,

Coln=newvaln #此處沒有逗號

WHERE 條件; #此處有分號

修改表結構:

基本用法:

ALTER TABLE 表名 執行動做

執行動做:

添加新字段 ADD 字段名1 類型(寬度) 約束條件 [選項];

選項:

AFTER 字段名2 #添加在字段名2後面

FIRST #添加最前面

注:默認添加到最後

刪除已有字段 DROP 字段名

修改字段 MODIFY 字段名 類型(寬度) 約束條件;

注:新約束不能和已有數據衝突

修改字段名 CHANGE 原字段名 新字段名 類型(寬度) 約束條件;

注:也能夠更改字段

數據導入,導出:

導入:

LOAD DATA INFILE "目錄名/文件名"

INTO TABLE 表名

FIELDS TERMINATED BY "分隔符"

LINES TERMINATED BY "\n";

注:查找導入位置show variables like "secure_file_priv",win下能夠接完整路徑

修改導入位置:secure_file_priv="路徑"加在/etc/my.cnf,路徑存在並mysql有權限

記一次故障排除:導入數據提示"ERROR 1265 (01000): Data truncated for column 'Id' at row 1"數據導入截斷,分隔符改成","

導出:

sql查詢 INTO OUTFILE "目錄/文件名" #能夠只有這一句

FIELDS TERMINATED BY "分隔符"

LINES TERMINATED BY "\n";

#分隔符可自定義

存儲引擎:

指表的類型,數據庫的存儲方式.

察看支持的數據引擎: SHOW ENGINES; #顯示引擎名,是否默認,描述,是否支持事務,

察看默認存儲引擎:SHOW VARIABLES LIKE 'storage_engine';

經常使用存儲引擎特色:

innoDB

提供事務,提交,回滾,多事務併發控制;支持外鍵;缺點:數據空間大,速度慢

共享表空間,表文件:*.frm(表結構)*.ibd(表索引,表數據)

行級鎖(對錶訪問時,只給被訪問行加鎖)

注:事務:一次數據訪問從開始到結束的過程;

事務回滾:訪問過程當中任意一步失敗,把操做恢復到操做以前的狀態。(經過事務日誌文件記錄)

MyISAM

佔用空間小,速度快 缺點:不支持事務不支持外鍵,安全性差;

獨享表空間,表文件:*.frm(表結構)*.myi(表索引)*.myd(表數據)

表級鎖(對錶訪問時,給一張表加鎖)

注:鎖解決併發訪問衝突問題,鎖分爲讀鎖和寫鎖

處理寫操做多的表適合innoDB,處理讀操做多的表適合myisam

MEMORY

提升表的處理速度;服務器內存大 缺點:斷電影響數據(數據存在內存中)

修改默認存儲引擎(/etc/my.cnf):在【mysqld】下添加default-storage-engine=引擎名

建表指定存儲引擎:

create table 表名(

……

)engine=引擎名;

修改表存儲引擎:ALTER TABLE 表名 engine=存儲引擎名;

相關文章
相關標籤/搜索