一、總體內(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)系

六、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ù) 輸入
exit或quit或\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
提示:上面的步驟都是我在本地搞的,這個(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.cnfsql-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();
- 查看有所有的庫(kù):
-
-
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) TINYINT1 -128 ~ 127 0 ~ 255 SMALLINT2 -32768 ~ 32767 0 ~ 65535 MEDIUMINT3 -8388608 ~ 8388607 0 ~ 16777215 INT/INTEGER4 -2147483648 ~2147483647 0 ~ 4294967295 BIGINT8 -9223372036854775808 ~ 9223372036854775807 0 ~ 18446744073709551615 -
字符串
類型 字節(jié)大小 示例 CHAR0-255類型: char(3)輸入'ab', 實(shí)際存儲(chǔ)為'ab ', 輸入'abcd'實(shí)際存儲(chǔ)為'abc'VARCHAR0-255類型: varchar(3)輸'ab',實(shí)際存儲(chǔ)為'ab', 輸入'abcd',實(shí)際存儲(chǔ)為'abc'TEXT0-65535大文本 -
日期時(shí)間類型
類型 字節(jié)大小 示例 DATE4 '2020-01-01'TIME3 '12:29:59'DATETIME8 '2020-01-01 12:29:59'YEAR1 '2017'TIMESTAMP4 '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ù):
ClassDataBasecreate 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來占位,枚舉可以用 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)初把它備份出來的地方,名字是你新起的名字












































