1. 程式人生 > >淺談資料庫(一)

淺談資料庫(一)

**

1、MySQL概述

a、什麼是資料庫
    儲存資料的倉庫
b、哪些公司在用資料庫
    金融機構、遊戲網站、購物網站、論壇網站 ... ...
c、資料庫服務軟體
***1、軟體分類***
  MySQL、Oracle、SQL_Server、MongoDB、DB2、Maraidb  
2、生產環境中如何選擇使用哪個資料庫軟體
  1、是否開源
    1、開源軟體 :MySQL、Mariadb、MongoDB
        2、商業軟體 :Oracle、DB2、SQL_Server
    2、是否跨平臺
        1、不跨平臺 :SQL_Server
        2、跨平臺 :... 
   3、公司的型別
        1、商業軟體 :政府部門、金融機構
 2、開源軟體 :遊戲網站、購物網站、論壇網站 ...

2、MySQL特點

1、關係型資料庫
      1、資料以 行和列(表) 的形式去儲存的
      2、表中行:一條記錄  列:一個欄位
      3、表和表之間的邏輯關聯叫關係
      2、示例
        1、關係型資料庫儲存
        表1、學生資訊表
      姓名    年齡   班級
      星矢     25    三班
      水冰月   23    六班
表2、班級資訊表
      班級    班主任
      三班    大空翼
      六班    鬆人
    2、非關係型資料庫儲存
          {"姓名":"星矢"
,"年齡":25,"班級":"三班","班主任":"大空翼"} {"姓名":"水冰月","年齡":23,"班級":"六班","班主任":"鬆人"}
2、跨平臺
  在Windows、Linux、Unix執行資料庫服務
3、支援多種程式語言
  python、java、php ... ...

4、資料庫軟體、

1、資料庫軟體
      看的見、可操作,實現資料庫的邏輯功能
2、資料庫
  邏輯概念,儲存資料,側重於儲存
3、資料倉庫
  資料量特別龐大,主要用於資料分析、資料探勘

資料庫 :user表
資料倉庫 :哪個時間段使用者登入最多,哪個使用者購物最多

 1、Ubuntu安裝MySQL服務
    1、安裝服務端
      sudo apt-get install mysql-server
    2、安裝客戶端
      sudo apt-get install mysql-client
    3、Ubuntu安裝軟體
      1、sudo apt-get install update
      2、sudo apt-get -f install
        作用 :修復依賴關係
  2、Windows安裝MySQL服務
    1、下載安裝包(windows)
      mysql-installer***5.7***.msi
    2、雙擊安裝
  3、Mac安裝MySQL
    1、下載安裝包
    2、設定環境變數
      1、vi .bash_profile
      2、新增如下內容儲存退出
        export PATH=${PATH}:/usr/local/mysql/bin
      3、終端 :source .bash_profile
      4、驗證 :mysql -uroot -p密碼
3、啟動和連線MySQL服務
  1、服務端啟動
    1、檢視服務狀態
      sudo /etc/init.d/mysql status
      sudo /etc/init.d/mysql start
      sudo /etc/init.d/mysql stop
      sudo /etc/init.d/mysql restart
      sudo /etc/init.d/mysql reload
  2、客戶端連線
    1、命令格式
      mysql -h主機地址 -u使用者名稱 -p密碼
      mysql -hlocalhost -uroot -p123456
      # 本地登入可省略 -h 選項
        mysql -uroot -p
4、基本SQL命令
  1SQL命令的使用規則
    1、每條命令必須以 ; 結尾
    2、SQL命令不區分字母大小寫
    3、使用 \c 終止當前命令的執行
  2、庫的管理  
    1、庫基本操作
      1、檢視所有庫
        show databases;
      2、建立庫(指定字符集)
        create database 庫名 character set utf8;
      3、檢視建立庫的語句(檢視字符集)
        show create database 庫名;
      4、檢視當前所在庫
        select database();
      5、切換庫
        use 庫名;
      6、檢視庫中的表
        show tables;
      7、刪除庫
        drop database 庫名;
    2、庫的命名規則
      1、數字、字母、_,但是不能是純數字
      2、庫名區分字母大小寫
      3、不能使用特殊字元 和 MySQL關鍵字3、練習
      1、建立庫 testdb,指定字符集為 utf8
        create database testdb character set utf8;
      2、進入庫 testdb
        use testdb;
      3、檢視當前所在庫
        select database();
      4、建立庫 testdb2,字符集為 latin1
        create database testdb2 character set latin1;
      5、進入到庫 testdb2
        use testdb2;
      6、檢視庫 testdb2 的字符集是什麼
        show create database testdb2;
      7、檢視庫 testdb2 中的所有表
        show tables;
      8、刪除庫 testdb
        drop database testdb;
      9、刪除庫 testdb2
        drop database testdb2;
  3、表的管理
    1、表的基本操作
      1、建立表(別忘了選擇庫,指定字符集)
        create table 表名(
    欄位名 資料型別,
        欄位名 資料型別,
        欄位名 資料型別
    )character set utf8;
      2、檢視建立表的語句(字符集、儲存引擎)
        show create table 表名;
      3、查看錶結構
        desc 表名;
      4、刪除表
        drop table 表名;
 2、練習
      1、建立庫 python1
        create database python1;
      2、在python1庫中建立表 pymysql,指定字符集為utf8,欄位有3個:
        id int, name char(15) ,age int
        use python1;
    create table pymysql(
    id int,
    name char(15),
    age int
    )character set utf8;
      3、查看錶 pymysql 的字符集和儲存引擎
        show create table pymysql;
      4、查看錶 pymysql 的表結構
        desc pymysql;
      5、刪除表 pymysql
        drop table pymysql;
      6、建立庫 python2
        create database python2;
      7、在庫 python2 中建立表t1並指定字符集utf8,欄位有 username char(20),password char(20)
        use python2;

    select database();
    create table t1(
    username char(20),
    password char(20)
    )character set utf8;

        show tables;
      8、檢視t1的表結構
        desc t1;
      9、刪除表 t1
        drop table t1;
      10、刪除庫 python2
        drop database python2;
 4、注意
    1、所有資料都是以檔案形式儲存在資料庫目錄下/var/lib/mysql
  5、表記錄管理
    1、插入(insert)
      1、insert into 表名 values(值1),(值2);
      2、insert into 表名(欄位1,欄位2) 
         values(值1),(值2);
    2、查詢(select)
      1select * from 表名 where 條件;
      2select 欄位1,欄位2 from 表名 where 條件;
    3、練習
      1、檢視所有庫
        show databases;
      2、建立新庫 studb
      3、在庫studb中建立表 tab1,指定字符集utf8
        欄位(4個): id、name、age、score
    use studb;
    create table tab1(
    id int,
    name char(20),
    age int,
    score int
    )character set utf8;
      4、檢視tab1的表結構
        desc tab1;
      5、在tab1中任意插入2條記錄
        insert into tab1 values
    (1,"唐伯虎",23,88),
    (2,"祝枝山",22,60);
      6、查詢所有表記錄
        select * from tab1;
      7、在tab1中name、score兩個欄位插入2條記錄
        insert into tab1(name,score) values
    ("文徵明",55),
    ("秋香",99);
      8、查看錶tab1中所有人的姓名和年齡
        select name,age from tab1;
      9、查看錶tab1中成績及格的學生資訊(高於60分)
        select * from tab1 where score>60;
5、如何更改庫的預設字符集
  1、方法 :更改配置檔案
  2、步驟
    1、獲取root許可權
      sudo -i
    2、cd /etc/mysql/mysql.conf.d
    3、cp mysqld.cnf    mysqld.cnf.bak
    4、subl  mysqld.cnf
    5、在[mysqld]下的tmpdir = /tmp新增
      character_set_server = utf8
    6、/etc/init.d/mysql restart
  3、Mac本
    vi /etc/my.cnf
    寫入:
      [mysqld]
      character_set_server = utf8
6、客戶端把資料儲存到資料庫伺服器上的過程
  1、連線到資料伺服器 :mysql -u使用者名稱 -p
  2、選擇庫 :use 庫名
  3、建立/修改表 :update 表名
  4、斷開與資料庫連線 :exit; | quit; | \q;
7、資料型別
  1、數值型別
    1、整型
      1int 大整型(4個位元組)
    取值範圍 :0 ~ (2**32 - 1) 42億多
      2、tinyint 微小整型(1個位元組)
        1、有符號(signed預設) : -128~127
    2、無符號(unsigned) : 0~255
      age tinyint unsigned,
      3、smallint 小整型(2個位元組)
      4、bigint 極大整型(8個位元組)
    2、浮點型
      1float(4個位元組,最多顯示7個有效位)
        欄位名 float(m,n) m->總位數 n->小數位位數
    float(5,2) 取值範圍:-999.99 ~ 999.99
    ## m的值最大為7
      2double
        欄位名 double(m,n)
      3decimal(m,n)
        1、儲存空間(整數部分、小數部分分開儲存)
      規則:將9的倍數包裝成4個位元組

      餘數     位元組
        0        0
       1-2       1
       3-4       2
       5-6       3
       7-8       4
      例:decimal(19,9)
        整數部分:10/9=11  4位元組+1位元組=5
        小數部分:9/9=10   4位元組+0位元組=4
        總共 :9個位元組
    3、練習
      1、新建庫studb2,並在庫中建立表stuinfo,要求:
        id : 大整型
        name : 字元型別,寬度為15
    age : 微小整型,不能為負數
    height : 浮點型,小數位為2位(float)
    money : 浮點型,小數位為4位(decimal)
        create database studb2;
    use studb2;
    create table stuinfo(
    id int,
    name char(15),
    age tinyint unsigned,
    height float(5,2),
    money decimal(20,4));
      2、查看錶結構
        desc stuinfo;
      3、查看錶字符集和儲存引擎
        show create table stuinfo;
      4、在表中插入1條完整記錄
        insert into stuinfo values
        (1,"小昭",26,165,8888.88);
      5、查詢所有表記錄
        select * from stuinfo;
      6、在表中id、name和money三個欄位插入2條記錄
        insert into stuinfo(id,name,money) values
        (2,"趙敏",200000),(3,"周芷若",18000.23);
      7、查詢所有學生的 編號、姓名和money
        select id,name,money from stuinfo;
  2、字元型別
    1char :定長
      char(寬度) 寬度取值範圍:1 - 255
    2、varchar :變長
      varchar(寬度) 寬度取值範圍 :1 - 65535
    3、text / longtext(4G) /blob / longblob
    4char 和 varchar的特點
      1char :浪費儲存空間,效能高
      2、varchar :節省儲存空間,效能低
    5、字元型別的寬度和數值型別寬度的區別
      1、數值型別寬度為顯示寬度,只用於select查詢時顯示,和佔用儲存無關,可用zerofill檢視效果
      2、字元型別的寬度超過後無法儲存
  3、列舉型別
    1、單選enum
      sex enum(值1,值2,...)
    2、多選set
      likes set(值1,值2,...)
      ## 插入記錄時 "study,python,mysql"
作業:
1、MySQL中資料型別有:___、___、___、___
2、關係型資料庫的核心內容是 關係 即 二維表
3、簡述客戶端把資料儲存到資料庫伺服器上的過程
4char和varchar的區別,各自的特點
5、操作
  1、建立一個學校的庫 school
  2、在庫school中建立表students,字符集utf8
    欄位如下:
    id int 顯示寬度為3,位數不夠用0填充
    姓名、年齡(不能為負數)、性別(單選)、成績(浮點)、愛好(多選)
  3、查看錶結構
  4、在表中任意插入3條完整記錄,並查詢顯示
  5、在表中id、姓名、成績三個欄位插入3條記錄,並查詢顯示
  6、檢視所有學生的姓名和成績
  7、檢視成績及格的學生的姓名和成績
  8、更改配置檔案,把預設字符集改為 utf8
  9、重啟MySQL服務,並建庫驗證