1. 程式人生 > >MySQL-基礎總結

MySQL-基礎總結

目錄

資料庫

常見資料庫

- 庫操作

- 表相關

- 記錄相關

資料庫

理論:儲存資料的軟體,以表、庫的形式將資料永久儲存。

常見資料庫

關係型資料庫:表與表之間的資料存在某種關聯關係

  • mysql:免費開源,只是中大型企業,已被oracle公司收購。創始人重寫了相同功能的mariaDB
  • oracle:收費閉源,強大的分散式資料庫。目前市面效能最強大的昂貴軟體。
  • SQLServer:僅支援windows系統的微軟軟體。
  • DB2:IMB公司開發的收費閉源資料庫。常與IMB機器繫結銷售。

非關係型資料庫:通過key-value儲存資料,各個資料之間沒有關係,非通用性資料庫,具有侷限性。MongoDB,redis,memcache等

資料庫相關概念

  • 資料:用來記錄事物的狀態資訊,例如:數字、字元、聲音、影象等
  • 記錄:一條記錄用於儲存一個事物的典型特徵,相當於檔案中的一行
  • DBMS:資料庫管理軟體,即一個套接字服務端軟體
  • 資料庫伺服器:執行有資料庫管理軟體的計算機
  • 資料庫: 資料庫是一些關聯表的集合。即,儲存表的資料夾
  • 資料表: 表是資料的矩陣。看起來像一個簡單的表格。本質是一個檔案,建立表即建立一個檔案
  • 列: 一列(資料元素) 包含了相同的資料, 例如郵政編碼的資料。
  • 行:一行(=元組,或記錄)是一組相關的資料,例如一條使用者訂閱的資料。
  • 冗餘:儲存兩倍資料,冗餘降低了效能,但提高了資料的安全性。
  • 主鍵:主鍵是唯一的。一個數據表中只能包含一個主鍵。你可以使用主鍵來查詢資料。
  • 外來鍵:外來鍵用於關聯兩個表。
  • 複合鍵:複合鍵(組合鍵)將多個列作為一個索引鍵,一般用於複合索引。
  • 索引:使用索引可快速訪問資料庫表中的特定資訊。索引是對資料庫表中一列或多列的值進行排序的一種結構。類似於書籍的目錄。
  • 參照完整性: 參照的完整性要求關係中不允許引用不存在的實體。與實體完整性是關係模型必須滿足的完整性約束條件,目的是保證資料的一致性。

安裝MySQL

  1. 官網下載安裝包(不帶介面,對應系統,穩定版本)
  2. 目錄解析順序 bin - mysqld - mysql - data - 資料夾 - 庫 - my-default.ini
  3. 啟動mysql伺服器  
  4. 新增環境變數:

cmd 內命令:

  • 啟動伺服器:mysqld
  • 啟動客戶端 :mysql -h -P -u -p
  • 關閉伺服器 :
    tasklist | findstr mysqld        
    taskkill /F /PID 8372

注:windows系統下可以在執行 ->services.msc 檢視系統服務,找到mysql相應服務,輕鬆開啟服務端。

MySQL修改密碼

修改管理員密碼:

cmd >>> mysqladmin -uroot -p舊密碼 password'123'

注:如果存在警告報錯,可忽視

修改使用者密碼方式:

  • mysql資料夾內刪除user使用者檔案
  • 重灌mysql
  • 開啟伺服器時跳過授權表,直接進入系統修改授權
  1. 停止原服務
  2. cmd命令啟動伺服器  
     mysqld --skip-grant-tables
  3. 使用客戶端登入,執行修改命令:
    update mysql.user set password = password('123123') where user= 'root' and host = 'localhost'
  4. 重新整理許可權 flush privileges
  5. 重啟驗證密碼

MySQL 編碼設定

mysql隨著版本不同,預設編碼格式不統一,前期存在gbk等編碼格式。於是需要utf8來統一格式、

編碼設定步驟(windows):

  1. 檢視當前伺服器的設定:客戶端內 執行 \s
  2. 複製mysql安裝目錄下的my-default.ini檔案,重新命名一份副本為 my,ini,用來編寫配置檔案
  3. my.ini內配置檔案內容分為 分割槽和選項:
    [mysqld]
    character_set_server = utf8
    collation_server = utf8_general_ci
    [mysql]
    default-character-set = utf8
    [client]
    default-character-set = utf8

注:對於5.6版本的修改,服務端只認識下劃線設定,而不認識 ‘-’

編碼設定步驟(mac):

  1. mac預設無法修改mysql的安裝路徑:/usr/local (可使用 command + shift +g 前往)
  2. 配置檔名為 my.cnf

原理:mysql在啟動時,會自動在安裝目錄下查詢ini檔案,找到對應命了的標題載入裡面的設定項、

配置檔案內,mysql和client的區別:
         mysql是客戶端的一種,客戶端還包括python客戶端,java客戶端等。client和mysql同時存在,則首先生效mysql,其他客戶端同理。

注:修改了mysqld配置需要重啟伺服器。

MySQL基本語句

- 庫操作

增(建立資料庫):CREATE DATABASE 資料庫名 charset utf8;

命名規則:

  1. 可以由字母、數字、下劃線、@、#、$
  2. 取分大小寫
  3. 唯一性
  4. 不能使用關鍵詞,例:creat select
  5. 不能單獨使用數字
  6. 最長128位

create database mydb charset utf8;

刪:DROP DATABASE 資料庫名;

drop database mydb;

alter database mydb charset gbk

show databases;

show create databases mydb;

select database():

選擇資料庫:use 資料庫名

- 表相關

增(建立表):

#語法:
create table 表名(
欄位名1 型別[(寬度) 約束條件],
欄位名2 型別[(寬度) 約束條件],
欄位名3 型別[(寬度) 約束條件]
);

'''

#注意:
1. 在同一張表中,欄位名是不能相同
2. 寬度和約束條件可選
3. 欄位名和型別是必須的

'''
use mydb;
create table t1 (id int,name char) 

drop table 表名

  1. 改表名:
    ALTER TABLE 表名 RENAME 新表名;
    rename table tname1 to tname2
  2. 修改欄位名:

    alter table 表名 add | modify | drop | change

          add 跟 列名和型別  (新增欄位名)

          modify 跟 列名 和 型別 (修改欄位的屬性)

          drop 跟列名 (刪除欄位名)

          change 跟 舊列名 新列名 型別 (重置欄位名)

  3. 修改字元編碼:
      alter table 表名 default character set gbk

show tables;

show create table t1;   === 查看錶詳細結構,可新增 \G    show creat table t1\G;

desc t1;   == 簡寫:desc 表名

複製表

複製表結構+記錄 (key不會被複制: 主鍵、外來鍵和索引)
mysql> create table new_service select * from service;

只複製表結構
mysql> select * from service where 1=2;        //使用條件為假,查不到任何記錄。則只複製了表結構
Empty set (0.00 sec)

mysql> create table new1_service select * from service where 1=2;  
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> create table t4 like employees;

- 記錄相關

  1. 插入完整資料(順序插入):
    -1)INSERT INTO 表名(欄位1,欄位2,欄位3…欄位n) VALUES(值1,值2,值3…值n);
    -2)INSERT INTO 表名 VALUES (值1,值2,值3…值n);
  2. 指定欄位插入資料
    INSERT INTO 表名(欄位1,欄位2,欄位3…) VALUES (值1,值2,值3…);
  3. 插入多條資料
    INSERT INTO 表名 VALUES
            (值1,值2,值3…值n),
            (值1,值2,值3…值n),
            (值1,值2,值3…值n);
  4. 插入查詢資料
    INSERT INTO 表名(欄位1,欄位2,欄位3…欄位n) 
                        SELECT (欄位1,欄位2,欄位3…欄位n) FROM 表2
                        WHERE …

delete from 表名 where 條件; (沒有條件則刪除所有; )

truncate table t1; (重建表,清空所有資料;)

改(更新資料)

  1. 修改單個欄位:update 表名 set 欄位 = 值 where 條件 ;
  2. 修改多個欄位:update 表名 set 欄位1=值1,欄位2=值2,where條件;

注:可同時修改多個欄位 ,⽤逗號隔開。例:列名=值,列名=值...(沒有條件則修改全部)

查(單表查詢和多表查詢)