Python MySQL數(shù)據(jù)庫(kù)1:數(shù)據(jù)存儲(chǔ)介紹、阿里云安裝myspl(使用)以及客戶端Navicat使用

一、總體內(nèi)容

  • 1.1、數(shù)據(jù)存儲(chǔ)
  • 1.2、數(shù)據(jù)庫(kù)
  • 1.3、RDBMS
  • 1.4、RDBMS 和 數(shù)據(jù)庫(kù)的關(guān)系
  • 1.5、SQL
  • 1.6、MySQL
  • 1.7、通過navicat操作數(shù)據(jù)庫(kù)
  • 1.8、數(shù)據(jù)完整性(數(shù)據(jù)類型與約束)
  • 1.9、命令行腳本操作數(shù)據(jù)庫(kù) (重點(diǎn))
  • 1.10、表中數(shù)據(jù)的增刪改查(curd)
  • 1.11、數(shù)據(jù)庫(kù)的備份與恢復(fù)

目標(biāo):熟練編寫數(shù)據(jù)的增刪改查相關(guān)的 SQL 語句

二、數(shù)據(jù)存儲(chǔ)

  • 2.1、以前是這樣記錄的:結(jié)繩記事


    結(jié)繩記事
  • 2.2、也有這樣記錄的:甲骨文


    甲骨文
  • 2.3、后來開始這樣記錄:圖書


    圖書
  • 2.4、傳統(tǒng)記錄數(shù)據(jù)的缺點(diǎn) : 不易保存、備份困難、查找不便,舉個(gè)例子:在有紙質(zhì)的時(shí)候,你想要另存一份東西,你就需要再抄寫一份,耗時(shí)耗精力。

  • 2.5、現(xiàn)代化手段----文件

    • 使用簡(jiǎn)單,例如python中的open可以打開文件,用read/write對(duì)文件進(jìn)行讀寫,close關(guān)閉文件
    • 對(duì)于數(shù)據(jù)容量較大的數(shù)據(jù),不能夠很好的滿足,而且性能較差
    • 不易擴(kuò)展
  • 2.5、更好的 現(xiàn)代化手段----數(shù)據(jù)庫(kù)

    • 持久化存儲(chǔ)
    • 讀寫速度極高
    • 保證數(shù)據(jù)的有效性
    • 對(duì)程序支持性非常好,容易擴(kuò)展
    • 真實(shí)的倉(cāng)庫(kù)是這樣的:


      真實(shí)倉(cāng)庫(kù)的樣子
    • 我們看到的是這個(gè)樣子的(開發(fā)者看到的樣子)


      我們看到的樣子
    • 顧客看到的是這個(gè)樣子的:


      顧客看到的樣子

三、數(shù)據(jù)庫(kù)

  • 3.1、數(shù)據(jù)庫(kù)就是一種特殊的文件,通過特殊的處理,讀寫的方式和普通的文本文件是不一樣的,其中存儲(chǔ)著需要的數(shù)據(jù)


    數(shù)據(jù)庫(kù)就是一種特殊的文件,其中存儲(chǔ)著需要的數(shù)據(jù)
  • 3.2、關(guān)系型數(shù)據(jù)庫(kù)核心元素

    • 數(shù)據(jù)行(記錄)
    • 數(shù)據(jù)列(字段)
    • 數(shù)據(jù)表(數(shù)據(jù)行的集合)
    • 數(shù)據(jù)庫(kù)(數(shù)據(jù)表的集合)
    • 一個(gè)數(shù)據(jù)庫(kù)可以有很多的表,每個(gè)表都有一個(gè)主鍵,每個(gè)表都可以作為其他表的字段


      關(guān)系型數(shù)據(jù)庫(kù)核心元素

四、RDBMS:(Relational Database Management System)通過表來表示關(guān)系型
查看數(shù)據(jù)庫(kù)排名

  • 4.1、RDBMS 是一套軟件,將來用來管理數(shù)據(jù)庫(kù)的文件,關(guān)系型數(shù)據(jù)庫(kù)
  • 4.2、當(dāng)前主要使用兩種類型的數(shù)據(jù)庫(kù):關(guān)系型數(shù)據(jù)庫(kù)、非關(guān)系型數(shù)據(jù)庫(kù),本部分主要討論關(guān)系型數(shù)據(jù)庫(kù),對(duì)于非關(guān)系型數(shù)據(jù)庫(kù)會(huì)在后面學(xué)習(xí)
  • 4.3、所謂的關(guān)系型數(shù)據(jù)庫(kù)RDBMS,是建立在關(guān)系模型基礎(chǔ)上的數(shù)據(jù)庫(kù),借助于集合代數(shù)等數(shù)學(xué)概念和方法來處理數(shù)據(jù)庫(kù)中的數(shù)據(jù)
  • 4.4、關(guān)系型數(shù)據(jù)庫(kù)的主要產(chǎn)品:
    • oracle:在以前的大型項(xiàng)目中使用,銀行,電信等項(xiàng)目,做大型網(wǎng)站
    • mysql:web時(shí)代使用最廣泛的關(guān)系型數(shù)據(jù)庫(kù),一般用作網(wǎng)站,存儲(chǔ)持久化的數(shù)據(jù),一般用作小型網(wǎng)站和中型網(wǎng)站足夠了
    • ms sql server:在微軟的項(xiàng)目中使用
    • sqlite:輕量級(jí)數(shù)據(jù)庫(kù),主要應(yīng)用在移動(dòng)平臺(tái)
    • redis 一般用來當(dāng)做緩存
    • mongodb 用來存儲(chǔ)非關(guān)系型的數(shù)據(jù)結(jié)構(gòu),一般用作爬蟲,存儲(chǔ)沒有關(guān)系的數(shù)據(jù)

五、RDBMS和數(shù)據(jù)庫(kù)的關(guān)系

RDBMS和數(shù)據(jù)庫(kù)的關(guān)系

六、SQL (Structured Query Language): 是一門特殊的語言,專門用來操作關(guān)系數(shù)據(jù)庫(kù),不區(qū)分大小寫
SQL是結(jié)構(gòu)化查詢語言,是一種用來操作RDBMS的數(shù)據(jù)庫(kù)語言,當(dāng)前關(guān)系型數(shù)據(jù)庫(kù)都支持使用SQL語言進(jìn)行操作,也就是說可以通過 SQL 操作 oracle,sql server,mysql,sqlite 等等所有的關(guān)系型的數(shù)據(jù)庫(kù)

  • 6.1、SQL語句主要分為:
    • DQL:數(shù)據(jù)查詢語言,用于對(duì)數(shù)據(jù)進(jìn)行查詢,如select
    • DML:數(shù)據(jù)操作語言,對(duì)數(shù)據(jù)進(jìn)行增加、修改、刪除,如insert、udpate、delete
    • TPL:事務(wù)處理語言,對(duì)事務(wù)進(jìn)行處理,包括begin transaction、commit、rollback
    • DCL:數(shù)據(jù)控制語言,進(jìn)行授權(quán)與權(quán)限回收,如grant、revoke
    • DDL:數(shù)據(jù)定義語言,進(jìn)行數(shù)據(jù)庫(kù)、表的管理等,如create、drop
    • CCL:指針控制語言,通過控制指針完成表的操作,如declare cursor
  • 6.2、對(duì)于web程序員來講,重點(diǎn)是數(shù)據(jù)的crud(增刪改查),必須熟練編寫DQL、DML,能夠編寫DDL完成數(shù)據(jù)庫(kù)、表的操作,其它語言如TPL、DCL、CCL了解即可
  • 6.2、學(xué)習(xí)要求
    • 熟練掌握數(shù)據(jù)增刪改查相關(guān)的 SQL 語句編寫

    • 在 Python代碼中操作數(shù)據(jù)就是通過 SQL 語句來操作數(shù)據(jù)

      # 創(chuàng)建Connection連接
      conn = connect(host='localhost', port=3306, user='root', password='mysql', database='python1', charset='utf8')
      # 得Cursor對(duì)象
      cs = conn.cursor()
      # 更新
      # sql = 'update students set name="劉邦" where id=6'
      # 刪除
      # sql = 'delete from students where id=6'
      # 執(zhí)行select語句,并返回受影響的行數(shù):查詢一條學(xué)生數(shù)據(jù)
      sql = 'select id,name from students where id = 7'
      # sql = 'SELECT id,name FROM students WHERE id = 7'
      count=cs.execute(sql)
      # 打印受影響的行數(shù)
      print(count)
      

七、MySQL

  • 7.1、MySQL 簡(jiǎn)介

    • 點(diǎn)擊查看MySQL官方網(wǎng)站
    • MySQL是一個(gè)關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),由瑞典MySQL AB公司開發(fā),后來被Sun公司收購(gòu),Sun公司后來又被Oracle公司收購(gòu),目前屬于Oracle旗下產(chǎn)品
    • 特點(diǎn)
      • 使用C和C++編寫,并使用了多種編譯器進(jìn)行測(cè)試,保證源代碼的可移植性
      • 支持多種操作系統(tǒng),如Linux、Windows、AIX、FreeBSD、HP-UX、MacOS、NovellNetware、OpenBSD、OS/2 Wrap、Solaris等
      • 為多種編程語言提供了API,如C、C++、Python、Java、Perl、PHP、Eiffel、Ruby等
      • 支持多線程,充分利用CPU資源
      • 優(yōu)化的SQL查詢算法,有效地提高查詢速度
      • 提供多語言支持,常見的編碼如GB2312、BIG5、UTF8
      • 提供TCP/IP、ODBC和JDBC等多種數(shù)據(jù)庫(kù)連接途徑
      • 提供用于管理、檢查、優(yōu)化數(shù)據(jù)庫(kù)操作的管理工具
      • 大型的數(shù)據(jù)庫(kù)??梢蕴幚?yè)碛猩锨f條記錄的大型數(shù)據(jù)庫(kù)
      • 支持多種存儲(chǔ)引擎
      • MySQL 軟件采用了雙授權(quán)政策,它分為社區(qū)版和商業(yè)版,由于其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點(diǎn),一般中小型網(wǎng)站的開發(fā)都選擇MySQL作為網(wǎng)站數(shù)據(jù)庫(kù)
      • MySQL使用標(biāo)準(zhǔn)的SQL數(shù)據(jù)語言形式
      • Mysql是可以定制的,采用了GPL協(xié)議,你可以修改源碼來開發(fā)自己的Mysql系統(tǒng)
      • 在線DDL更改功能
      • 復(fù)制全局事務(wù)標(biāo)識(shí)
      • 復(fù)制無崩潰從機(jī)
      • 復(fù)制多線程從機(jī)

      開源 免費(fèi) 不要錢 使用范圍廣,跨平臺(tái)支持性好,提供了多種語言調(diào)用的 API,是學(xué)習(xí)數(shù)據(jù)庫(kù)開發(fā)的首選

  • 7.2、MySQL服務(wù)器下載以及安裝,服務(wù)器端一般以服務(wù)方式管理,名稱為mysql

    • 我的是Mac電腦,mysql的官網(wǎng)地址 , 選擇一個(gè)進(jìn)行下載

      mysql

    • 查看是否安裝上mysql,打開偏好設(shè)置,在安裝的過程中會(huì)讓輸入一個(gè)密碼,記好


      打開偏好設(shè)置
    • 也可以在終端輸入 mysql -v 查看是否安裝上,會(huì)報(bào)錯(cuò),想輸入mysql,不報(bào)這個(gè)錯(cuò)咋辦? 起別名

      # 從命令行訪問常用程序(如 mysql 和 mysqladmin)
      alias mysql=/usr/local/mysql/bin/mysql
      alias mysqladmin=/usr/local/mysql/bin/mysqladmin
      
      終端輸入 mysql -v 查看是否安裝上
    • 輸入mysql --help 即可看到mysql都具有哪些命令

    • 添加系統(tǒng)環(huán)境變量

      cd ~
      vim .bash_profile
      # 添加以下代碼
      export PATH=${PATH}:/usr/local/mysql/bin
      # 退出后
      source .bash_profile
      # 如果不進(jìn)行以下操作的話,每打開一個(gè)終端,都要再輸一遍 source .bash_profile
      vim .zshrc
      # 添加以下代碼
      export PATH=${PATH}:/usr/local/mysql/bin
      # 退出后
      source .zshrc
      
    • 修改密碼

      mysqladmin -u root -p password 12345678
      # 12345678是我的新密碼,自行修改成自己想要設(shè)置的密碼
      # 按回車后, 提示輸入密碼,此時(shí)讓輸入的密碼不是你電腦的密碼,而是數(shù)據(jù)庫(kù)的密碼。
      
    • mysql -u root -p 回車之后輸入密碼,進(jìn)入MySQL的運(yùn)行框,可看下圖

      mysql -u root -p

    • show databases;查看都有哪些庫(kù);; 不可少

      `show databases;`查看都有哪些庫(kù)

    • 輸入exitquit\q,按下回車退出, 或者control+D退出

    • 另外 啟動(dòng)/停止/重啟 MySQL服務(wù)

      啟動(dòng)MySQL服務(wù)
      sudo /usr/local/mysql/support-files/mysql.server start
      
      停止MySQL服務(wù)
      sudo /usr/local/mysql/support-files/mysql.server stop
      
      重啟MySQL服務(wù)
      sudo /usr/local/mysql/support-files/mysql.server restart
      
    • Mac上安裝Mysql配置文件的添加及修改配置文件

    提示:上面的步驟都是我在本地搞的,這個(gè)博客里面是我在服務(wù)器安裝mysql的參考 在阿里云的服務(wù)器linux下安裝mysql和卸載mysql,在7.3里面添加其他用戶也是我在阿里云服務(wù)器搞的

  • 7.3、MySQL添加其他用戶

    • (1)、找到my.cnf配置文件: 你的MySQL有沒有配置,如果沒有配置的話,配置下:my.cnf 配置文件
      如果/etc/目錄下沒有my.cnf配置文件,請(qǐng)到/usr/share/mysql/下找到*.cnf文件,拷貝其中一個(gè)到/etc/并改名為my.cnf)中。命令如下:cp /usr/share/mysql/my-medium.cnf /etc/my.cnf

      提示:我是報(bào)錯(cuò):mysql創(chuàng)建用戶報(bào)錯(cuò)ERROR 1364 (HY000): Field 'ssl_cipher' doesn't have a default value,原因是mysql默認(rèn)配置嚴(yán)格模式,該模式禁止通過insert的方式直接修改mysql庫(kù)中的user表進(jìn)行添加新用戶。

    • (2)、vim /etc/my.cnf

      sql-mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION 
      

      修改成:

      sql-mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION 
      

      然后重啟mysql服務(wù)

      service mysql restart
      
    • (3)、創(chuàng)建用戶,創(chuàng)建之前先輸入一下:use mysql;

      mysql> insert into mysql.user(Host,User,Password) values("localhost","test",password("456123"));
      

      這樣就創(chuàng)建了一個(gè)名為:test 密碼為:1234 的用戶。
      注意:此處的"localhost",是指該用戶只能在本地登錄,不能在另外一臺(tái)機(jī)器上遠(yuǎn)程登錄。如果想遠(yuǎn)程登錄的話,將"localhost"改為"%",表示在任何一臺(tái)電腦上都可以登錄。也可以指定某臺(tái)機(jī)器可以遠(yuǎn)程登錄。

    • (4)、登錄MYSQL(有ROOT權(quán)限),這里以ROOT身份登錄

      > mysql -u root -p
      
    • (5)、為用戶創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)(test),如果數(shù)據(jù)庫(kù)存在就不需要再建了,直接進(jìn)行第六步

      mysql>create database test;
      
    • (6)、授權(quán)test1用戶擁有test數(shù)據(jù)庫(kù)的所有權(quán)限(某個(gè)數(shù)據(jù)庫(kù)的所有權(quán)限)

      mysql>grant all privileges on test.* to test1@localhost identified by '456123';
      mysql>flush privileges;//刷新系統(tǒng)權(quán)限表
      
    • (7)、如果想指定部分權(quán)限給一用戶,可以這樣來寫

      mysql>grant select,update on test.* to test1@localhost identified by '456123';
      
    • (8)、授權(quán)test1用戶擁有所有數(shù)據(jù)庫(kù)的某些權(quán)限

      mysql>grant select,delete,update,create,drop on *.* to test1@"%" identified by "456123";
      
    • (9)、參考資料 MySQL添加用戶、刪除用戶與授權(quán)

      提示:

      • 查看有所有的庫(kù): show databases;
      • 建立數(shù)據(jù)庫(kù) : create database testTable;
        建的新表
      • 查看版本:select version();
      • 顯示當(dāng)前時(shí)間:select now();
  • 7.4、MySQL客戶端安裝以及使用,客戶端為開發(fā)人員與dba使用,通過socket方式與服務(wù)端通信,常用的有navicat、命令行 mysql

    • 圖形化界面客戶端 navicat, 可以到Navicat官網(wǎng)下載

      圖形化界面客戶端 `navicat`

    • 問題一:中文亂碼
      解決辦法:打開start_navicat文件

      將export LANG="en_US.UTF-8"改為export LANG="zh_CN.UTF-8"
      
    • 問題二:試用期
      解決辦法:刪除用戶目錄下的.navicat64目錄

      cd ~
      rm -r .navicat64
      
    • 最基本的連接命令如下,輸入后回車

      mysql -u root -p 
      
    • 連接 阿里云 mysql 數(shù)據(jù)庫(kù)


      image.png
    • 解決阿里云MySQL遠(yuǎn)程連接不上的問題:

      • step1:
        1、修改user表:MySQL>update user set host = '%' where user = 'root';
        2、授權(quán)主機(jī)訪問:MySQL>GRANT ALL PRIVILEGES ON . TO 'root'@'%' IDENTIFIED BY '你的密碼' WITH GRANT OPTION;
        3、刷新權(quán)限:MySQL>FLUSH PRIVILEGES;
        4、退出:MySQL>EXIT;

      • step2:查看端口監(jiān)聽狀態(tài),netstat -an|grep 3306,如果顯示不是如下圖所示,則需要修改配置文件。找到my.cnf,一般在/etc/mysql/下面,具體情況根據(jù)實(shí)際而定。注釋掉其中的bind-address屬性。如下


        再次-an|grep 3306,如下級(jí)OK:

      • step3:開啟阿里云安全組端口策略
        進(jìn)入控制臺(tái),網(wǎng)絡(luò)和安全->安全組->配置規(guī)則,將MySQL監(jiān)聽端口開放即可,如下:


        網(wǎng)絡(luò)和安全->安全組->配置規(guī)則
      • step4:再次測(cè)試就是上面圖中連接成功的狀態(tài)

      • 連接后的效果(這里我用了一個(gè)root用戶和四個(gè)測(cè)試用戶)


        連接后的效果

八、通過navicat操作數(shù)據(jù)庫(kù)

  • 8.1、在 7.3 里面,我們已經(jīng)安裝好 navicat,那么我們使用一下它。

  • 8.2、建庫(kù)

    • 選中一個(gè)庫(kù),右擊建庫(kù)


      選中一個(gè)庫(kù),右擊建庫(kù)
      • 選擇 utf8 作為字符集


        選擇 utf8 作為字符集
      • 選擇普通的默認(rèn)排序


        選擇普通的默認(rèn)排序
  • 8.3、建表 和 在表中建字段

    建表 和 在表中建字段

    在表中建字段

    在表中添加數(shù)據(jù)

九、數(shù)據(jù)完整性

  • 9.1、一個(gè)數(shù)據(jù)庫(kù)就是一個(gè)完整的業(yè)務(wù)單元,可以包含多張表,數(shù)據(jù)被存儲(chǔ)在表中;在表中為了更加準(zhǔn)確的存儲(chǔ)數(shù)據(jù),保證數(shù)據(jù)的正確有效,可以在創(chuàng)建表的時(shí)候,為表添加一些強(qiáng)制性的驗(yàn)證,包括數(shù)據(jù)字段的類型、約束。

  • 9.2、數(shù)據(jù)類型

    • 可以通過查看幫助文檔查閱所有支持的數(shù)據(jù)類型
    • 使用數(shù)據(jù)類型的原則是:夠用就行,盡量使用取值范圍小的,而不用大的,這樣可以更多的節(jié)省存儲(chǔ)空間
    • 常用數(shù)據(jù)類型如下:
      • 整數(shù):int,bit(更小的類型)
      • 小數(shù):decimal
      • 字符串:varchar,char
      • 日期時(shí)間: date, time, datetime
      • 枚舉類型(enum)
    • 特別說明的類型如下:
      • decimal表示浮點(diǎn)數(shù),如decimal(5,2)表示共存5位數(shù),小數(shù)占2位
      • char表示固定長(zhǎng)度的字符串,如char(3),如果填充'ab'時(shí)會(huì)補(bǔ)一個(gè)空格為'ab '
      • varchar表示可變長(zhǎng)度的字符串,如varchar(3),填充'ab'時(shí)就會(huì)存儲(chǔ)'ab'
      • 字符串text表示存儲(chǔ)大文本,當(dāng)字符大于4000時(shí)推薦使用
      • 對(duì)于圖片、音頻、視頻等文件,不存儲(chǔ)在數(shù)據(jù)庫(kù)中,而是上傳到某個(gè)服務(wù)器上,然后在表中存儲(chǔ)這個(gè)文件的保存路徑(我一般他視頻或者圖片放到七牛云,在自己的服務(wù)器存儲(chǔ)視頻或者圖片的鏈接)
      • 更全的數(shù)據(jù)類型可以參考:東哥推薦的博客
  • 9.3、約束

    • 主鍵primary key:物理上存儲(chǔ)的順序
    • 非空not null:此字段不允許填寫空值
    • 惟一unique:此字段的值不允許重復(fù)
    • 默認(rèn)default:當(dāng)不填寫此值時(shí)會(huì)使用默認(rèn)值,如果填寫時(shí)以填寫為準(zhǔn)
    • 外鍵foreign key:對(duì)關(guān)系字段進(jìn)行約束,當(dāng)為關(guān)系字段填寫值時(shí),會(huì)到關(guān)聯(lián)的表中查詢此值是否存在,如果存在則填寫成功,如果不存在則填寫失敗并拋出異常;提示:在自己的表中導(dǎo)入的其他表的主鍵是外鍵
    • 說明:雖然外鍵約束可以保證數(shù)據(jù)的有效性,但是在進(jìn)行數(shù)據(jù)的crud(增加、修改、刪除、查詢)時(shí),都會(huì)降低數(shù)據(jù)庫(kù)的性能,所以不推薦使用,那么數(shù)據(jù)的有效性怎么保證呢?答:可以在邏輯層進(jìn)行控制;
  • 9.4、類型表

    • 數(shù)值類型(常用)

      類型 字節(jié)大小 有符號(hào)范圍(Signed) 無符號(hào)范圍(Unsigned)
      TINYINT 1 -128 ~ 127 0 ~ 255
      SMALLINT 2 -32768 ~ 32767 0 ~ 65535
      MEDIUMINT 3 -8388608 ~ 8388607 0 ~ 16777215
      INT/INTEGER 4 -2147483648 ~2147483647 0 ~ 4294967295
      BIGINT 8 -9223372036854775808 ~ 9223372036854775807 0 ~ 18446744073709551615
    • 字符串

      類型 字節(jié)大小 示例
      CHAR 0-255 類型:char(3) 輸入 'ab', 實(shí)際存儲(chǔ)為'ab ', 輸入'abcd' 實(shí)際存儲(chǔ)為 'abc'
      VARCHAR 0-255 類型:varchar(3)'ab',實(shí)際存儲(chǔ)為'ab', 輸入'abcd',實(shí)際存儲(chǔ)為'abc'
      TEXT 0-65535 大文本
    • 日期時(shí)間類型

      類型 字節(jié)大小 示例
      DATE 4 '2020-01-01'
      TIME 3 '12:29:59'
      DATETIME 8 '2020-01-01 12:29:59'
      YEAR 1 '2017'
      TIMESTAMP 4 '1970-01-01 00:00:01' UTC ~ '2038-01-01 00:00:01' UTC

十、命令行腳本操作數(shù)據(jù)庫(kù)

  • 10.1、鏈接數(shù)據(jù)庫(kù)

    • 鏈接

      • 第一種:需要輸入密碼

        mysql -uroot -p
        輸入密碼進(jìn)入
        
      • 第二種:直接跟上密碼(-p與密碼之間沒有間隔)

        mysql -u root -p密碼
        
    • 鏈接成功


      鏈接成功
    • 退出登錄

      quit 和 exit 或 ctrl+d
      
    • 登錄成功后,輸入如下命令查看效果

      查看版本:select version();
      顯示當(dāng)前時(shí)間:select now();
      
    • 修改輸入提示符

      prompt python>
      
      • \D 完整日期
      • \U 使用用戶
  • 10.2、數(shù)據(jù)庫(kù)

    • 查看所有數(shù)據(jù)庫(kù)

      show databases;
      
    • 使用數(shù)據(jù)庫(kù)

      use 數(shù)據(jù)庫(kù)名;
      
    • 查看當(dāng)前使用的數(shù)據(jù)庫(kù)

      select database();
      
    • 創(chuàng)建數(shù)據(jù)庫(kù)(查看創(chuàng)建方式:show create table classes;

      create database 數(shù)據(jù)庫(kù)名 charset=utf8;
      

      例如:testBase是數(shù)據(jù)庫(kù)名字

      create database testBase charset=utf8;
      
    • 刪除數(shù)據(jù)庫(kù)

      drop database 數(shù)據(jù)庫(kù)名;
      

      例如:testBase是上面創(chuàng)建的數(shù)據(jù)庫(kù)名字

      drop database testBase;
      
  • 10.3、數(shù)據(jù)表

    • 查看當(dāng)前數(shù)據(jù)庫(kù)中所有表

      show tables;
      
    • 查看表結(jié)構(gòu)

      desc 表名;
      
    • 創(chuàng)建表,auto_increment 表示自動(dòng)增長(zhǎng)

      CREATE TABLE table_name(
            column1 datatype contrai,
            column2 datatype,
            column3 datatype,
            .....
            columnN datatype,
           PRIMARY KEY(one or more columns)
      );
      

      例:創(chuàng)建班級(jí)表

      create table classes(
           id int unsigned auto_increment primary key not null,
           name varchar(10)
      );
      

      例:創(chuàng)建學(xué)生表(primary key auto_increment not null:設(shè)為主鍵、自增長(zhǎng)、不為空) 約束的順序隨便寫,最后一個(gè)字段不要 逗號(hào),在定義類型的時(shí)候,后面加上 unsigned 表示無符號(hào),gender enum('男','女','人妖','保密') default "保密",可以為gender設(shè)置默認(rèn)值 "保密"

      create table students(
           id int unsigned primary key auto_increment not null,
           name varchar(20) default '',
           age tinyint unsigned default 0,
           height decimal(5,2),
           gender enum('男','女','人妖','保密') default "保密",
            cls_id int unsigned default 0
      );
      
    在庫(kù)中建表&查看建好的表
    • 給表添加數(shù)據(jù)

      insert into students values(0,"馬冶",26,172.33,"男",1)
      查詢表內(nèi)容
      select * from students;
      
    • 修改表-添加字段

      alter table 表名 add 列名 類型;
      

      例如:給students表添加生日字段

      alter table students add birthday datetime;
      
      修改表-添加字段
    • 修改表-修改字段:重命名版(字段名字、類型、及約束 都可以改變)

      alter table 表名 change 原名 新名 類型及約束;
      

      例如:把學(xué)生的 birthday 改為 birth 類型還是datetime not null,不能為空

      alter table students change birthday birth datetime not null;
      
      修改表-修改字段:重命名版
    • 修改表-修改字段:不重命名版(字段名字不變,類型以及約束可以改變)

      alter table 表名 modify 列名 類型及約束;
      

      例如:

      alter table students modify birth date not null;
      
      修改表-修改字段:不重命名版(字段名字不變,類型以及約束可以改變)
    • 修改表-刪除字段

      alter table 表名 drop 列名;
      

      例如:刪除表中 gender(性別) 字段

      alter table students drop gender;
      
      修改表-刪除字段
    • 查看表的創(chuàng)建語句

      show create table 表名;
      

      例如:

      show create table classes;
      
      查看表的創(chuàng)建語句
    • 刪除表

      drop table 表名;
      

      例如:刪除表

      drop table students;
      
      刪除表

十一、表中數(shù)據(jù)的增刪改查(curd)

curd的解釋: 代表 創(chuàng)建(Create)、更新(Update)、讀取(Retrieve)和 刪除(Delete)

  • 11.1、準(zhǔn)備

    • (1)、創(chuàng)建一個(gè)班級(jí)庫(kù):ClassDataBase

      create database ClassDataBase charset=utf8;
      
      創(chuàng)建一個(gè)班級(jí)庫(kù):`ClassDataBase`
    • (2)、在 班級(jí)庫(kù):ClassDataBase 里面創(chuàng)建一個(gè)學(xué)生表 studentTable
      ,里面創(chuàng)建 4 個(gè)字段:id、name、age、gender,提示:gender 是枚舉類型

      create table studentTable(
            id int unsigned primary key auto_increment not null,
            name varchar(20) default '',
            age tinyint unsigned default 0,
            gender enum('男','女','人妖','保密') default '保密'
      );
      
      在 班級(jí)庫(kù):`ClassDataBase ` 里面創(chuàng)建一個(gè)學(xué)生表 `studentTable` ,里面創(chuàng)建 4 個(gè)字段:id、name、age、gender

      查看表結(jié)構(gòu):desc 表名;
  • 11.2、 加數(shù)據(jù)

    • 全列插入:有幾個(gè)字段插入幾個(gè),主鍵字段 可以用 0、nulldefault 來占位,枚舉可以用 1,2,3,4來代替,如下面的例子中 "男" 可以用 1 來代替,看上圖的枚舉,男是第一位,枚舉有幾個(gè)最大是幾,上面的gender是四個(gè)性別,最大是4,超過4報(bào)錯(cuò)

      insert into 表名 values(value1,value2,value3,.....);
      

      例如:-- 向studentTable表插入 一個(gè)學(xué)生信息(studentTable是表名)

      insert into studentTable values(0, "小王", 26, "男");
      
      全列插入
    • 部分插入

      insert into 表名(列1名,列2名,...) values(值1,值2,...)
      

      例如:枚舉選的4 ,所以是 保密

      insert into studentTable (name, gender) values ("小紅", 4);
      
      部分插入
    • 多行插入

      insert into studentTable (name, gender) values ("小李", 3),("小明", 1);
      insert into studentTable values(default, "小飛", 20, "女"), (default, "小杜", 20, "男");
      
    多行插入
  • 11.3、 除數(shù)據(jù)

    • 物理刪除(不要去操作):delete from 表名 where 條件;

      delete from studentTable; -- 整個(gè)數(shù)據(jù)表中的所有數(shù)據(jù)全部刪除
      delete from studentTable where name="小杜";
      
    • 邏輯刪除:用一個(gè)字段來表示 這條信息是否已經(jīng)不能再使用了,給studentTable表添加一個(gè)is_delete字段 bit 類型, bit里面存儲(chǔ)的是 0 與 1。
      例如:給表studentTable增加bit字段,默認(rèn)為 0 ,代表沒有刪除

      alter table studentTable add is_delete bit default 0;
      

      根據(jù)小飛的id,模擬邏輯刪除 小飛(也就是更新數(shù)據(jù))

      update studentTable set is_delete=1 where id=5;
      
      邏輯刪除
  • 11.4、 變數(shù)據(jù)(修改數(shù)據(jù))
    update 表名 set 列1=值1,列2=值2... where 條件;
    例如:

    update studentTable set gender=1; -- 全部都改
    update studentTable set gender=2 where name="小王"; -- 只要name是小王的 全部的修改
    update studentTable set gender=1 where id=3; -- 只要id為3的 進(jìn)行修改
    update studentTable set age=22, gender=1 where id=3; -- 只要id為3的 進(jìn)行修改
    
  • 11.5、 詢數(shù)據(jù)

    • 查詢所有列

      select * from 表名;
      

      例如:

      select * from studentTable;
      
    • 一定條件下查詢

      select * from 表名 where 條件; -- 查詢 條件 下的所有信息
      

      例如:

      select * from studentTable where name="小王"; -- 查詢 name為 小王 的所有信息
      select * from studentTable where id>2; -- 查詢 id > 2 的所有信息
      
    • 查詢指定列

       select 列1,列2,... from 表名;
      

      例如:

      select name,gender from studentTable;
      
      查詢指定列
    • 可以 使用 as 為 列或表 指定別名

      select 字段[as 別名] , 字段[as 別名] from 數(shù)據(jù)表 where ....;
      

      例如:

      select name as 姓名,gender as 性別 from studentTable;
      
      可以 **使用 as 為 列或表 指定別名**
    • 查詢 字段的順序(哪個(gè)在前面就先顯示誰)

      select id as 序號(hào), gender as 性別, name as 姓名 from studentTable;
      
      查詢 字段的順序(哪個(gè)在前面就先顯示誰)

十二、數(shù)據(jù)庫(kù)的備份與恢復(fù) 參考博客

  • 12.1、備份
    運(yùn)行mysqldump命令 (下面 python.sql是新的數(shù)據(jù)庫(kù) )

    mysqldump –u root –p 數(shù)據(jù)庫(kù)名 > fileName.sql;
    # 按提示輸入mysql的密碼
    
    WechatIMG468.jpeg

    提示:mysqldump –u root –p 數(shù)據(jù)庫(kù)名 > fileName.sql;里面的 python.sql 你可以指定路徑,如果不指定就是備份到當(dāng)前目錄

  • 12.2、恢復(fù)
    連接mysql,創(chuàng)建新的數(shù)據(jù)庫(kù)

    mysql -u root -p密碼
    create database 數(shù)據(jù)庫(kù)名 charset=utf8;
    quit
    

    退出連接,執(zhí)行如下命令

    mysql -u root –p 上面創(chuàng)建的新數(shù)據(jù)庫(kù)名 < fileName.sql
    # 根據(jù)提示輸入mysql密碼
    

    提示:fileName.sql 會(huì)自動(dòng)回到當(dāng)初把它備份出來的地方,名字是你新起的名字

參考博客1
參考博客2
參考博客3

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容