天天看點

Mysql 增删改查 Python互動01

1. 資料庫

- 1. 資料庫 :存儲資料的倉庫
- 2. 資料庫軟體分類 :
    * 1. MySQL,Oracle,SQL Server,MongoDB,DB2,
         MariaDB,Redis...
    * 2. 分類 :
        根據資料的存儲方式不同,劃分為 :
        + 1. 關系型資料庫
            采用标準化的行和列建構二維表存儲資料,
            表與表之間的邏輯關聯稱為關系。
            MySQL, Oracle, SQL Server,DB2,MariaDB
        + 2. 非關系型資料庫     (NoSQL-Not Only SQL)
            采用鍵值對的形式存儲資料
            MongoDB,Redis(緩存)
    * 3. 如何選擇
        + 1. 資料存儲方式
        + 2. 是否開源 :
                開源 :MySQL MariaDB MongoDB
                閉源 :Oracle DB2 ,SQL Server
        + 3. 是否跨平台 :
                不跨平台 : SQL Server
                跨平台 :...
           

2. 資料庫與資料倉庫

資料庫 :提供資料存儲和資料操作的服務(DataBase)
資料倉庫 :存儲海量資料,提供資料分析與挖掘
                    (Data WareHouse - DW/DWH)
           

3. MySQL 資料庫

1. 關系型資料庫 :
        1. 資料以二維表形式存儲
        2. 表中的每一行,稱為一條記錄
        3. 表中的每一列,稱為一個字段
        示例 :
            1. 關系型資料庫存儲資料
                表1        學生資訊表
                            姓名    年齡    班級
                            星矢     20        一班
                            水冰月 18        二班
                表2   班級資訊表
                            班級    班主任 人數
                            一班    老王        30
                            二班    老張        50
            2. 非關系資料庫存儲資料
                    {"姓名":"星矢","年齡":"20"}
2. 跨平台 :
     Ubuntu,windows, CentOS, Linux...
3. 支援多種開發語言 :
     Python,Java,PHP...
           

4. MySQL 安裝

1. Ubuntu :
        1. 安裝服務端
            sudo apt-get install mysql-server
        2. 安裝用戶端
            sudo apt-get install mysql-client
        3. ubuntu 軟體更新
            1. sudo apt-get update
                 通路源清單中的所有網址,讀取軟體清單,儲存
                 到本地(/var/lib/apt/lists/)
            2. sudo apt-get upgrade
                 把本地已安裝軟體與剛下載下傳的軟體清單進行對比
                 如果目前軟體版本低,則更新
            3. 修複依賴關系
                 sudo apt-get -f install
2. windows :
     下載下傳安裝包 xxx.msi
3. Mac :
     下載下傳安裝包 8.0
           

5. 啟動和連接配接資料庫

1. 服務端啟動 :
    1. 檢視MySQL狀态
            sudo /etc/init.d/mysql status
         連接配接服務端
          sudo /etc/init.d/mysql start | stop | restart
2. 連接配接用戶端
    1. 指令格式 :
        mysql -h主機位址 -u使用者名 -p密碼
        本機 :
        mysql -hlocalhost -uroot -p123456
        mysql -uroot -p123456
           

6. MySQL 語句規範

1. 每一條指令以;結束
2. SQL指令不區分大小寫
3. 使用/c終止目前指令
           

7. 基本SQL指令

1. 庫的基本操作
    1. 檢視已有庫
        show databases;
    2. 建立資料庫
        create database 庫名; (預設字元集為Latin1)
        create database 庫名 character set utf8;
        建庫的同時指定字元集
    3. 檢視建立庫的語句(檢視字元集)
        show create database 庫名;
    4. 檢視目前所在庫
        select database();
    5. 使用已有庫/切換資料庫
        use 庫名;
    6. 檢視目前資料庫中的所有表
        show tables;
    7. 删除資料庫
        drop database 庫名;
2. 庫名的命名規範
    1. 庫名自定義,由數字,字母,下劃線組成,禁止
         與關鍵字沖突,禁止使用純數字,盡量見名知意
    2. 為了區分庫名和表名,可以在庫名後添加db
            例: studb
    3. 庫名和表名大小寫敏感
            例: stuDB
3. 練習
    1. 建立資料庫testdb ,指定字元集為utf8
            create database testdb character set utf8;
    2. 進入資料庫 testdb
            use testdb;
    3. 檢視目前所在庫
            select database();
    4. 建立資料庫testdb2
            create database testdb2;
    5. 檢視testdb2的字元集
            show create database testdb2;
    6. 删除testdb和testdb2
            drop database testdb;
            drop database testdb2;
4. 表的基本操作
    1. 建立表
        create table 表名(字段名 資料類型,
        字段名 資料類型,
        字段名 資料類型);
    2. 檢視表的字元集
        show create table 表名;
    3. 檢視表結構(表中包含哪些字段)
        desc 表名;
    4. 删除表
        drop table 表名;
    5. 練習 :
        1. 建立庫 pyDB,指定字元集為utf8
             create database pyDB character set utf8;
        2. 在資料庫中建立表,tab1,指定 id name age
             三個字段(int char(10) int)
             use pyDB;
             create table tab1(id int,name char(10),age int);

        3. 檢視表的字元集
             show create table tab1;
        4. 檢視表結構
             desc tab1;
        5. 删除表,删除庫
             drop table tab1;
             drop database pyDB;
5. 表記錄管理
    1. 插入記錄
        insert into 表名 values (字段值,字段值),(字段值,字段值);
        指定字段插入資料:
        insert into 表名(字段1,字段2) values(字段值,字段值);
    2. 查詢記錄
        select * from 表名; (查詢所有資料)
        select 字段名,字段名 from 表名; (查詢指定字段)
        指定查詢條件
        select * from 表名 where 條件;
    3. 練習
        1. 檢視所在庫,檢視已有庫
        2. 建立新庫,userdb
        3. 在新庫中建立表 userInfo,設定字元集為utf8,
             設定字段 id name age
        4. 檢視表結構
             desc userInfo;
        5. 在表中插入幾條記錄
        6. 在表中針對name,age兩個字段插入兩條資料
        7. 查詢表中所有資料
        8. 查詢表中所有姓名
        9. 查詢表中所有年齡大于20的姓名資訊
             select name from userInfo where age>20;
6. 更改資料庫預設字元集
        1. 方法 :修改資料庫的配置檔案
        2. 步驟 :
            1. 擷取root權限
                    sudo -i
            2. cd /etc/mysql/mysql.conf.d/
            3. 檔案備份(必須執行)
                 cp mysqld.cnf mysqld.cnf.bak
            4. 修改配置檔案
                    subl mysqld.cnf
                    找 :
                        [mysqld]
                    添加
                        character_set_server = utf8
            5. 儲存檔案,重新開機服務
                    sudo /etc/init.d/mysql restart
            Mac :
                /etc/my.cnf
           

8. 用戶端的連接配接與斷開

連接配接 : mysql -h主機名 -u使用者名 -p密碼
                隻有連接配接成功,才可以使用資料庫服務,書寫
                SQL語句
    斷開 :
            exit; | quit; | \q;
            斷開與用戶端的連結,并不會結束服務
            結束服務使用 :
                sudo /etc/init.d/mysql stop
           

9. 資料類型

1. 數值類型
    1. 整數
        1. int (大)整型 (占據4個位元組)
             取值範圍 :
             無符号整型(unsigned) :0 ~ 2(32)-1
             有符号整型(signed 預設為有符号) : -2(31)~2(31)-1
        2. tinyint 微小整型 (占據1個位元組)
             有符号整型 :-128 ~ 127
             無符号整型 :0 ~ 255
             例 :
                    age tinyint unsigned
        3. smallint 小整型 (占據2個位元組)
        4. bigint        (極)大整型 (占據8個位元組)
    2. 浮點數
        1. float (4個位元組,最多表示小數點後7位)
                用法 :
                    字段名 float(m,n)
                    m表示總位數,n表示小數位的位數
        2. double(8個位元組,最多表示小數點後15位)
        3. decimal 最多表示到小數點後28位
                用法 :
                    decimal(m,n)
    3. 練習
        1. 建立庫 studb,在庫中建立表stuInfo,要求
                id   大整型(int)
                name 字元型 char(10)
                age  無符号微小整型
                height 浮點型表示,2位小數位,3位整數位
                weight 浮點型,3位整數位,3位小數位
                ---------------------------------
                create table stuInfo(
                id int,
                name char(10),
                age tinyint unsigned,
                height float(5,2),
                weight decimal(6,3)
                );
        2. 檢視表結構
        3. 檢視字元集
        4. 插入一條完整記錄
        5. 在 id name兩個字段下插入兩條資料
        6. 查詢所有學生的id和姓名
    4. 浮點型使用注意 :
        1. 如果插入的是整數資料,小數位會自動補0
        2. 如果插入資料的小數位超出指定位數,會自動
             四舍五入
        3. 整數位超出限制,插入失敗
2. 字元類型
    1. 定長 char(長度)
         長度取值範圍 :1 ~ 255
    2. 變長 varchar(長度)
         長度取值範圍 :1 ~ 65535
         定長與變長的差別 :
         定長 :根據指定的長度固定配置設定存儲空間
                            char(10)
                            存儲'a',也要配置設定10個字元的空間
                        優點 :效率高,速度快
                        缺點 :浪費存儲空間

         變長 :在不超過指定長度的情況下,動态配置設定存儲
                        空間
                            varchar(10)
                            存儲'a',動态根據資料的字元長度配置設定空間
                        優點 :節省存儲空間
                        缺點 :效率比定長存儲要低
         共同點 :
             給出的長度,就是最大輸入的字元數,超出則
             無法存儲
             例 :
                    name varchar(10)
                    "wangzhaojun" 超出無法存儲
    3. 長文本存儲
            text
            longtext (4G)
    4. 二進制資料存儲
            blob
            longblob (4G)
    5. 數值類型的顯示寬度與字元型的最大字元數
            int(11) 顯示寬度與存儲空間無關
                借助zerofill關鍵字,檢視整型的顯示寬度
                例 :
                    id int(5) zerofill
                    存儲資料 :
                    insert ... (5)  ->顯示00005
                    insert ... (1234567)  -> 顯示1234567
                    insert ... (123456789012345):
                        error : 超過了目前資料類型的表示範圍
                        int unsigned : 2(32) - 1 (42億多)

            char(10)設定資料的存儲空間,超出則無法存儲
3. 枚舉類型
        1. enum 類型 (表示單選)
            枚舉是一個字元串對象,可以将一些
            不重複的字元串存儲成一個預定義的集合,字段存儲
            資料時,必須從集合中選擇,不在集合範圍的都是非法值
            例 :
                gender enum('男','女','保密');
                枚舉類型會自動為集合中的字元串選項配置設定下标
                查詢時,可根據下标表示對應的值
                select * from ...where gender="男";
                等價于
                select * from ...where gender=1;
        2. set 類型 (實作多選)
            特殊的枚舉類型,用法與enum一緻,提供字元串類型
            的集合(選項)
            例 :
                sportcourse set('籃球',"足球");
                inert ... values(1,"zhangsan","籃球,足球");
           

繼續閱讀