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、通過(guò)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 語(yǔ)句

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

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


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


    甲骨文
  • 2.3霉猛、后來(lái)開(kāi)始這樣記錄:圖書


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

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

    • 使用簡(jiǎn)單,例如python中的open可以打開(kāi)文件军熏,用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è)樣子的(開(kāi)發(fā)者看到的樣子)


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


      顧客看到的樣子

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

  • 3.1浊猾、數(shù)據(jù)庫(kù)就是一種特殊的文件抖甘,通過(guò)特殊的處理,讀寫的方式和普通的文本文件是不一樣的葫慎,其中存儲(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ò)表來(lái)表示關(guān)系型
查看數(shù)據(jù)庫(kù)排名

  • 4.1椒涯、RDBMS 是一套軟件柄沮,將來(lái)用來(lái)管理數(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é)概念和方法來(lái)處理數(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 一般用來(lái)當(dāng)做緩存
    • mongodb 用來(lái)存儲(chǔ)非關(guān)系型的數(shù)據(jù)結(jié)構(gòu)杨蛋,一般用作爬蟲,存儲(chǔ)沒(méi)有關(guān)系的數(shù)據(jù)

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

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

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

  • 6.1卵皂、SQL語(yǔ)句主要分為:
    • DQL:數(shù)據(jù)查詢語(yǔ)言秩铆,用于對(duì)數(shù)據(jù)進(jìn)行查詢,如select
    • DML:數(shù)據(jù)操作語(yǔ)言,對(duì)數(shù)據(jù)進(jìn)行增加殴玛、修改捅膘、刪除,如insert滚粟、udpate、delete
    • TPL:事務(wù)處理語(yǔ)言,對(duì)事務(wù)進(jìn)行處理厕妖,包括begin transaction橙喘、commit、rollback
    • DCL:數(shù)據(jù)控制語(yǔ)言亚侠,進(jìn)行授權(quán)與權(quán)限回收曹体,如grant、revoke
    • DDL:數(shù)據(jù)定義語(yǔ)言硝烂,進(jìn)行數(shù)據(jù)庫(kù)箕别、表的管理等,如create滞谢、drop
    • CCL:指針控制語(yǔ)言串稀,通過(guò)控制指針完成表的操作,如declare cursor
  • 6.2爹凹、對(duì)于web程序員來(lái)講厨诸,重點(diǎn)是數(shù)據(jù)的crud(增刪改查),必須熟練編寫DQL禾酱、DML微酬,能夠編寫DDL完成數(shù)據(jù)庫(kù)、表的操作颤陶,其它語(yǔ)言如TPL颗管、DCL、CCL了解即可
  • 6.2滓走、學(xué)習(xí)要求
    • 熟練掌握數(shù)據(jù)增刪改查相關(guān)的 SQL 語(yǔ)句編寫

    • 在 Python代碼中操作數(shù)據(jù)就是通過(guò) SQL 語(yǔ)句來(lái)操作數(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語(yǔ)句垦江,并返回受影響的行數(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公司開(kāi)發(fā),后來(lái)被Sun公司收購(gòu)姨涡,Sun公司后來(lái)又被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等
      • 為多種編程語(yǔ)言提供了API坠韩,如C、C++炼列、Python只搁、Java、Perl俭尖、PHP氢惋、Eiffel、Ruby等
      • 支持多線程稽犁,充分利用CPU資源
      • 優(yōu)化的SQL查詢算法焰望,有效地提高查詢速度
      • 提供多語(yǔ)言支持,常見(jiàn)的編碼如GB2312已亥、BIG5熊赖、UTF8
      • 提供TCP/IP、ODBC和JDBC等多種數(shù)據(jù)庫(kù)連接途徑
      • 提供用于管理虑椎、檢查震鹉、優(yōu)化數(shù)據(jù)庫(kù)操作的管理工具
      • 大型的數(shù)據(jù)庫(kù)±可以處理?yè)碛猩锨f(wàn)條記錄的大型數(shù)據(jù)庫(kù)
      • 支持多種存儲(chǔ)引擎
      • MySQL 軟件采用了雙授權(quán)政策传趾,它分為社區(qū)版和商業(yè)版,由于其體積小泥技、速度快浆兰、總體擁有成本低,尤其是開(kāi)放源碼這一特點(diǎn)珊豹,一般中小型網(wǎng)站的開(kāi)發(fā)都選擇MySQL作為網(wǎng)站數(shù)據(jù)庫(kù)
      • MySQL使用標(biāo)準(zhǔn)的SQL數(shù)據(jù)語(yǔ)言形式
      • Mysql是可以定制的簸呈,采用了GPL協(xié)議,你可以修改源碼來(lái)開(kāi)發(fā)自己的Mysql系統(tǒng)
      • 在線DDL更改功能
      • 復(fù)制全局事務(wù)標(biāo)識(shí)
      • 復(fù)制無(wú)崩潰從機(jī)
      • 復(fù)制多線程從機(jī)

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

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

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

      mysql

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


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

      # 從命令行訪問(wèn)常用程序(如 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)行以下操作的話鸯檬,每打開(kāi)一個(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有沒(méi)有配置栖茉,如果沒(méi)有配置的話,配置下:my.cnf 配置文件
      如果/etc/目錄下沒(méi)有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)格模式尘应,該模式禁止通過(guò)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)限給一用戶瘾晃,可以這樣來(lái)寫

      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客戶端安裝以及使用,客戶端為開(kāi)發(fā)人員與dba使用肉津,通過(guò)socket方式與服務(wù)端通信强胰,常用的有navicat、命令行 mysql

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

      圖形化界面客戶端 `navicat`

    • 問(wèn)題一:中文亂碼
      解決辦法:打開(kāi)start_navicat文件

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

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

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


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

      • step1:
        1偶洋、修改user表:MySQL>update user set host = '%' where user = 'root';
        2、授權(quán)主機(jī)訪問(wèn):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īng)狀態(tài),netstat -an|grep 3306肾筐,如果顯示不是如下圖所示哆料,則需要修改配置文件。找到my.cnf,一般在/etc/mysql/下面吗铐,具體情況根據(jù)實(shí)際而定东亦。注釋掉其中的bind-address屬性。如下


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

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


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

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


        連接后的效果

八镊逝、通過(guò)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ù)類型

    • 可以通過(guò)查看幫助文檔查閱所有支持的數(shù)據(jù)類型
    • 使用數(shù)據(jù)類型的原則是:夠用就行,盡量使用取值范圍小的额嘿,而不用大的瘸恼,這樣可以更多的節(jié)省存儲(chǔ)空間
    • 常用數(shù)據(jù)類型如下:
      • 整數(shù):int,bit(更小的類型)
      • 小數(shù):decimal
      • 字符串:varchar,char
      • 日期時(shí)間: date, time, datetime
      • 枚舉類型(enum)
    • 特別說(shuō)明的類型如下:
      • 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)入的其他表的主鍵是外鍵
    • 說(shuō)明:雖然外鍵約束可以保證數(shù)據(jù)的有效性,但是在進(jìn)行數(shù)據(jù)的crud(增加唯袄、修改鼓拧、刪除、查詢)時(shí)越妈,都會(huì)降低數(shù)據(jù)庫(kù)的性能季俩,所以不推薦使用,那么數(shù)據(jù)的有效性怎么保證呢梅掠?答:可以在邏輯層進(jìn)行控制酌住;
  • 9.4店归、類型表

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

      類型 字節(jié)大小 有符號(hào)范圍(Signed) 無(wú)符號(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與密碼之間沒(méi)有間隔)

        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 表示無(wú)符號(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)建語(yǔ)句

      show create table 表名;
      

      例如:

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

      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塞关、null抬探、default 來(lái)占位,枚舉可以用 1,2小压,3线梗,4來(lái)代替,如下面的例子中 "男" 可以用 1 來(lái)代替,看上圖的枚舉怠益,男是第一位仪搔,枚舉有幾個(gè)最大是幾,上面的gender是四個(gè)性別蜻牢,最大是4烤咧,超過(guò)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è)字段來(lái)表示 這條信息是否已經(jīng)不能再使用了煮嫌,給studentTable表添加一個(gè)is_delete字段 bit 類型, bit里面存儲(chǔ)的是 0 與 1。
      例如:給表studentTable增加bit字段镀娶,默認(rèn)為 0 ,代表沒(méi)有刪除

      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è)在前面就先顯示誰(shuí))

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

十二好啰、數(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)初把它備份出來(lái)的地方椰弊,名字是你新起的名字

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末许溅,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子秉版,更是在濱河造成了極大的恐慌贤重,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件清焕,死亡現(xiàn)場(chǎng)離奇詭異并蝗,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)秸妥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門滚停,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人粥惧,你說(shuō)我怎么就攤上這事键畴。” “怎么了突雪?”我有些...
    開(kāi)封第一講書人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵镰吵,是天一觀的道長(zhǎng)檩禾。 經(jīng)常有香客問(wèn)我,道長(zhǎng)疤祭,這世上最難降的妖魔是什么盼产? 我笑而不...
    開(kāi)封第一講書人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮勺馆,結(jié)果婚禮上戏售,老公的妹妹穿的比我還像新娘。我一直安慰自己草穆,他們只是感情好灌灾,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著悲柱,像睡著了一般锋喜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上豌鸡,一...
    開(kāi)封第一講書人閱讀 51,146評(píng)論 1 297
  • 那天嘿般,我揣著相機(jī)與錄音,去河邊找鬼涯冠。 笑死炉奴,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蛇更。 我是一名探鬼主播瞻赶,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼派任!你這毒婦竟也來(lái)了砸逊?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤掌逛,失蹤者是張志新(化名)和其女友劉穎痹兜,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體颤诀,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡字旭,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了崖叫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片遗淳。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖心傀,靈堂內(nèi)的尸體忽然破棺而出屈暗,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布养叛,位于F島的核電站种呐,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏弃甥。R本人自食惡果不足惜爽室,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望淆攻。 院中可真熱鬧阔墩,春花似錦、人聲如沸瓶珊。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)伞芹。三九已至忘苛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間唱较,已是汗流浹背扎唾。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留绊汹,地道東北人稽屏。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓扮宠,卻偏偏與公主長(zhǎng)得像西乖,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子坛增,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容