一呻粹、數(shù)據(jù)庫和SQL介紹
數(shù)據(jù)庫(Database)是按照數(shù)據(jù)結(jié)構(gòu)來組織轧飞、存儲和管理數(shù)據(jù)的倉庫掸绞。
數(shù)據(jù)庫用于記錄數(shù)據(jù),使用數(shù)據(jù)庫記錄數(shù)據(jù)可以表現(xiàn)出各種數(shù)據(jù)間的聯(lián)系埃疫,也可以很方便地對所記錄的數(shù)據(jù)進(jìn)行增、刪仅炊、改、查等操作澎蛛。數(shù)據(jù)庫保存起來數(shù)據(jù)抚垄,然后在別的地方去使用,因此:數(shù)據(jù)庫技術(shù)的根本目標(biāo)是為了解決數(shù)據(jù)共享的問題谋逻。
結(jié)構(gòu)化查詢語言(Structured Query Language)簡稱SQL呆馁,是上世紀(jì)70年代由IBM公司開發(fā),用于對數(shù)據(jù)庫進(jìn)行操作的語言毁兆。更詳細(xì)地說浙滤,SQL是一種數(shù)據(jù)庫查詢和程序設(shè)計(jì)語言,用于存取數(shù)據(jù)以及查詢气堕、更新和管理關(guān)系數(shù)據(jù)庫系統(tǒng)瓷叫;同時(shí)也是數(shù)據(jù)庫腳本文件的擴(kuò)展名。
二送巡、MySQL背景介紹
MySQL是一個(gè)關(guān)系型數(shù)據(jù)庫管理系統(tǒng)摹菠,目前屬于 Oracle 旗下產(chǎn)品。雖然單機(jī)性能比不上oracle骗爆,但免費(fèi)開源次氨,單機(jī)成本低且借助于分布式集群所以受到互聯(lián)網(wǎng)公司的青睞,是互聯(lián)網(wǎng)公司的主流數(shù)據(jù)庫摘投。
三煮寡、MySQL關(guān)鍵術(shù)語
- 數(shù)據(jù)庫(database):保存有組織數(shù)據(jù)的容器
- 表(table):某種特定類型數(shù)據(jù)的結(jié)構(gòu)化清單
- 模式(schema):關(guān)于數(shù)據(jù)庫和表的布局和特性的信息。
- 列(column):表中的一個(gè)字段犀呼,所有表都是由一個(gè)或者多個(gè)列組成的幸撕。
- 行(row):表中的一個(gè)記錄。
- 主鍵(primary key):能夠唯一地區(qū)分表中的每個(gè)行
任意兩行都不具有相同的主鍵值
每個(gè)行都必須具有一個(gè)主鍵值(不允許NULL值) - 外鍵(foreign key):外鍵為某個(gè)表中的一列外臂,它包含另一個(gè)表的主鍵值坐儿,定義了兩個(gè)表之間的關(guān)系。
- 觸發(fā)器:MySQL響應(yīng)以下任何語句自動執(zhí)行的一條SQL語句(或位于BEGIN和END之間的一條語句)。
DELETE
INSERT
UPDATE - 游標(biāo)(cursor):是一個(gè)存儲在MYSQL數(shù)據(jù)庫上的數(shù)據(jù)庫查詢貌矿,它不是一個(gè)SELECT語句炭菌,而是被該語句檢索出來的結(jié)果集。
- 視圖(View):視圖為虛擬的表逛漫,它們包含的不是數(shù)據(jù)而是根據(jù)需要檢索出來的查詢黑低,視圖提供了一種MYSQL語句層次的封裝,可以用來簡化數(shù)據(jù)處理酌毡,重新定義格式和保護(hù)基礎(chǔ)數(shù)據(jù)克握。
- 索引(index):如果沒有索引,執(zhí)行查詢時(shí) mysql 必須從第一個(gè)記錄開始掃描整個(gè)表的所有記錄枷踏,直至找到符合要求的記錄菩暗。表里面的記錄數(shù)量越多,這個(gè)操作的代價(jià)就越高呕寝。如果作為搜索條件的列上已經(jīng)創(chuàng)建了索引勋眯,mysql 可以直接從索引集中的數(shù)據(jù)開始查找。也就是說索引可以大大減少DBMS查找數(shù)據(jù)的時(shí)間下梢。
- 范式:關(guān)系模型R(U,F),U為屬性客蹋,F(xiàn)為屬性U上的一組數(shù)據(jù)依賴。
關(guān)系數(shù)據(jù)庫的關(guān)系是要滿足一定要求的孽江,滿足不同程度要求的為不同范式讶坯。
四、MySQL的安裝
下面介紹使用Docker 安裝mysql的方式岗屏。
docker pull mysql:5.7.27
docker run --name mymysql -e MYSQL_ROOT_PASSWORD =admin -d -p 3306:3306 mysql:5.7.27
- 其中辆琅,
MYSQL_ROOT_PASSWORD =admin
用于設(shè)置root用戶的初始密碼
# 查看mymysql 的tag
docker ps -s
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES SIZE
abd50bd79a59 mysql:5.7.27 "docker-entrypoint.s…" 5 seconds ago Up 3 seconds 0.0.0.0:3306->3306/tcp, 33060/tcp mymysql 0B (virtual 373MB)
0a3b89c25329 zookeeper "/docker-entrypoint.…" 8 minutes ago Up 8 minutes 0.0.0.0:2181->2181/tcp, 0.0.0.0:2888->2888/tcp, 0.0.0.0:3888->3888/tcp, 0.0.0.0:8080->8080/tcp myzk 38.1kB (virtual 252MB)
4be98db9c9e4 redis "docker-entrypoint.s…" 2 hours ago Up 2 hours 0.0.0.0:6379->6379/tcp myredis 14B (virtual 104MB)
# 進(jìn)入容器:
docker exec -it 62349aa31687 /bin/bash
#進(jìn)入mysql:
mysql -uroot -p
#授權(quán):
mysql> GRANT ALL ON *.* TO 'root'@'%';
#刷新權(quán)限:
mysql> flush privileges;
# 更新加密規(guī)則:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'admin' PASSWORD EXPIRE NEVER;
#更新root用戶密碼:
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'admin';
#刷新權(quán)限:
mysql> flush privileges;
使用navicat連接: