1. 程式人生 > >MYSQL快速入門(1)

MYSQL快速入門(1)

MYSQL快速入門

一、MySQL資料庫基礎

1.為什麼要存在資料庫

對於資料儲存,我們可以接使用檔案,但是為什麼要存在資料庫,因為檔案儲存資料有很大的缺點

  • 檔案不利於資料查詢和管理
  • 檔案儲存資料不安全
  • 檔案在程式中控制不安全
  • 檔案不利於存放海量資料
    為了解決上面的一些問題,一些大牛們設計出了各類資料庫用來儲存和管理資料
    ,儲存介質主要有磁碟和記憶體

2.目前主流的資料庫

  • sql server: 微軟的資料庫,適用於中大型專案
  • Oracle :全球最大的資料庫使用量,java程式設計師必學,適合處理複雜業務,收費的
  • MySqlsun公司產品,現在也屬於甲骨文,併發性好,不適合複雜的業務,免費的,主要 用在電商,SNS,論壇。對簡單的SQL處理效果好。
  • DB2IBM公司,處理海量資料,功能強悍
  • informixIBM公司,安全非常強

3.MTSQL的基本使用

3.1 MYSQL的安裝

  • centos 7.0下直接執行yum -y install mysql-server進行安裝

3.2 MYSQL的啟動和關閉

  • 啟動:service mysqld start
  • 關閉:service mysqld stop

3.3 連線到MYSQL

  • mysql [-h 主機] -u 使用者 -p

說明:

  • -h: 如果沒有寫-h 127.0.0.1預設是連線本地 。如果需要登入到另外一個mysql,則需要修改配置,一般情況不讓遠端登入
  • -u:表示登入的使用者,一般是root
  • -p:表示登入密碼,剛開始如果自己沒有設定,預設是空,直接跳過即可
  • 出現下面的介面,說明已經連線到資料庫
    在這裡插入圖片描述

3.4 資料庫伺服器、資料庫和表的關係

  • 安裝資料庫伺服器,只是在機器上安裝了一個資料庫管理程式,這個管理程式可以管理多個數據庫,一般開發人員會針對每一個應用建立一個數據庫
  • 為儲存應用中實體的資料,一般會在資料庫中建立多個表,以儲存程式中實體的資料
  • 一個資料庫伺服器可以存在多個數據庫,而一個數據庫也可以存在多個表

3.5 建立庫和表

  • 建立庫:create database 庫名
  • 使用庫:use 庫名
  • 建立表: 表是在庫裡建立的,所以要先選擇庫才能建立表
-- 建立表
create table 表名(    
欄位1 列型別1,    
欄位2 列型別2,    
...    
欄位n 列型別n 
);
  • 向表中插入資料:
insert into 表名(欄位名1, 欄位2, ...) values(values1, value2);
  • 查看錶中的資料
select * from 表名

例如:建立一個person表,並插入一條記錄

-- 建立表
create table person( name varchar(30), id int);
-- 插入記錄
insert into person values('zhangsan',123);
-- 查看錶中的資料
-- select * from person

3.5 SQL分類

  • 資料定義語言,用來維護儲存資料的結構
    DDL:create drop alter
  • 資料操作語言,操作表中的內容
    DML:insert delete update
  • 資料查詢語言
    DQL:select
  • 資料控制語句,負責許可權管理和事務
    DCL:grant revoke commit

二.庫的操作

1.建立資料庫

  • 語法
create database [if not exists] db_name 
[createspecification][createspecification]
-- createspecification:
		-- CHARSET(字符集,一般指定為utf8)
		-- COLLATE(校驗規則,資料庫字符集的比較方式,預設utf8_ general_ ci,一般不指定)

1.1 字符集和校驗規則

  • 字符集:是一套表示字元的符號和這些的符號的底層編碼
  • 校驗規則: 是在字符集內用於比較字元的一套規則

如在某個字符集“X”A與a,他們的底層編碼分別是A=0,a=100。這裡符號“A”“a”和底層編碼“0”“100”就是字符集的概念範圍。假設我們要比較A與a的大小,我們得到a>A,因為我們是根據其底層編碼進行比較的,這就是這個字符集“X”的一種校驗規則“Z”(根據底層編碼來比較)。假設,現在有另外一種校驗規則,是先取其相反數,然後再比較大小,那麼就很顯然的得到a<A,這就是字符集“X”的另外一種校驗規則“Z1”。由此可見,一種字符集可能存在多個與之對應的校驗規則(一對多關係)

-- 建立一個數據庫,校驗規則使用utf8_ general_ ci[不區分大小寫]
-- a A b B (排序)
mysql> create database x1 collate utf8_general_ci; 
-- 建立一個數據庫,校驗規則使用utf8_ general_ bin[區分大小寫]
-- A B a b(排序)
 create database x2 collate utf8_bin;
  • 檢視系統預設字符集以及校驗規則
show variables like 'character_set_database'; -- 字符集
show variables like 'collation_database';  -- 校驗規則
  • 建立庫的各種情況
create database company1; -- 系統預設的字符集和校驗規則
create database company2 charset=utf8; -- 指定為utf8字符集建庫
create database company3 charset=utf8 collate utf8_general_ci; -- 指定字符集為utf8和校驗規則為utf8_general_ci

2.操縱資料庫

2.1 檢視現在存在哪些資料庫

show databases;

2.2 顯示資料庫建立語句

mysql> show create database mytest; 
+----------+------------------------------------------------------------+   | Database | Create Database                                            | 
+----------+----------------------------------------------------------+ | 
mytest     | CREATE DATABASE `mytest` /*!40100 DEFAULT CHARACTER SET utf8 */| +----------+----------------------------------------------------------+
 
說明:    
1) MySQL 建議我們關鍵字使用大寫,但是不是必須的。    
2) 資料庫名字的反引號``,是為了防止使用的資料庫名剛好是關鍵字    
3) /*!40100  default.... */ 這個不是註釋,表示當前mysql 版本大於4.01版本,就執行這句話

2.3 刪除資料庫

DROP DATABASE [IF EXISTS] db_ name; 
-- []代表可存在也可不存在
-- 刪庫操作一定要慎重使用
-- 資料庫內部看不到對應的資料庫 
-- 對應的資料庫資料夾被刪除,級聯刪除,裡面的資料表全部被刪

2.4 檢視當前MySQL資料庫的連線情況

  show processlist 
  -- 可以查出當前有哪些使用者連線到我們的MySQL,如果查出某個使用者不是你正常登陸的,很有可能你的資料庫被人入侵了。如果發現自己資料庫比較慢時,可以用這個指令來看看資料庫連線情況。 

在這裡插入圖片描述

2.5 備份和恢復資料庫

備份語法:mysqldump -u(以哪個使用者去備份) -p(密碼) 資料庫名 > 資料庫存放路徑

-- 退出mysql,在shell下執行對資料庫進行備份
mysqldump -u root -p  msg > ./msg.bk
-- 然後進入mysql中刪除原來的庫
drop database msg
-- 要恢復資料庫,必須先建立一個空的資料庫。好和以前的資料庫名字一致
create database msg
use msg
source ./msg.bk
-- 這樣即可恢復原來的資料庫
  • 備份的是資料庫中的一張表,而是資料庫
-- 備份到當前目錄下
mysqldump -u root -p密碼 資料庫名 表名1  表名2  > ./msg.bk 
-- 恢復
source 備份的檔案路徑及檔名
  • 備份多個數據庫
mysqldump -u root -p密碼 -B 資料庫名1  資料庫名2 ... > 資料庫存放路徑 
-- 同時恢復多個數據庫  
source 備份的檔案 

注意點:

  • 在使用source 恢復資料時,保證use對應的資料庫
  • 當我們備份一個數據庫時,也帶上-B引數,在恢復資料庫時,不需要再建立空資料庫

2.6 修改庫

修改庫的語法:
ALTER DATABASE [IF EXISTS] db_name [alter_spacification ],[alter_spacification]

-- 對資料庫的修改主要指的是修改資料庫的字符集,校驗規則
alter_spacification:   
	[DEFAULT] CHARACTER SET charset_name   
	[DEFAULT] COLLATE collation_name 

例如:

-- 修改msg庫的字符集為utf8
alter database msg charset=utf8

檢視msg庫的字符集:
在這裡插入圖片描述

三.表的操作

1.建立表

  • 建立表的語法:
CREATE TABLE table_name (  
field1 datatype,  
field2 datatype,  
field3 datatype 
) character set 字符集 collate 校驗規則 engine 儲存引擎; 
說明:
-- field 表示列名 
-- datatype 表示列的型別
-- character set 字符集,如果沒有指定字符集,則以所在資料庫的字符集為準 
--collate 校驗規則,如果沒有指定校驗規則,則以所在資料庫的校驗規則為準
  • 建立一張學生表
 create  table  stu1 (      
 	id int comment '學號',      
 	name varchar(20) comment '姓名'
 ) character set utf8 engine MyISAM; 

不同的儲存引擎,建立表的檔案不一樣:
在這裡插入圖片描述

  • 查看錶的結構
desc 表名

例如:檢視學生表示stu1的表結構
在這裡插入圖片描述

2. 修改表

修改表一般指的是修改某個表的結構,比如欄位名字欄位大小欄位型別,表的字符集型別,表的儲存引擎新增欄位刪除欄位等等

# 修改表結構
-- 新增列
alter table 表名 add (filed datatype) 

-- 預設插入到最後一列
alter table user add addr varchar(60);

-- after name 表示插入到name後邊,但是不能用before
alter table user add gender varchar(2) after name;

-- in first 表示插入到第一列
alter table user add class int first;

-- 改變列的型別
alter table 表名 modify 列名 新型別名
alter table user modify name varchar(60)

-- 刪除某列,這一列的資料全部沒有,儘量不要這麼做
alter table user drop 列名;

-- 改表名
alter table user rename to 新表名;

-- 修改表的字符集
alter table user charset=gbk;

-- 修改列的字符集
alter table user modify name varchar(60) charset utf8;

-- 將name列修改為xingming
alter table user change name xingming varchar(30);

注:在MYSQL中的各類語句一般使用大寫,在本篇博文中,由於大寫寫起來比較難看懂,所以就採用小寫