MySQL-基礎總結
目錄
資料庫
理論:儲存資料的軟體,以表、庫的形式將資料永久儲存。
常見資料庫
關係型資料庫:表與表之間的資料存在某種關聯關係
- mysql:免費開源,只是中大型企業,已被oracle公司收購。創始人重寫了相同功能的mariaDB
- oracle:收費閉源,強大的分散式資料庫。目前市面效能最強大的昂貴軟體。
- SQLServer:僅支援windows系統的微軟軟體。
- DB2:IMB公司開發的收費閉源資料庫。常與IMB機器繫結銷售。
非關係型資料庫:通過key-value儲存資料,各個資料之間沒有關係,非通用性資料庫,具有侷限性。MongoDB,redis,memcache等
資料庫相關概念
- 資料:用來記錄事物的狀態資訊,例如:數字、字元、聲音、影象等
- 記錄:一條記錄用於儲存一個事物的典型特徵,相當於檔案中的一行
- DBMS:資料庫管理軟體,即一個套接字服務端軟體
- 資料庫伺服器:執行有資料庫管理軟體的計算機
- 資料庫: 資料庫是一些關聯表的集合。即,儲存表的資料夾
- 資料表: 表是資料的矩陣。看起來像一個簡單的表格。本質是一個檔案,建立表即建立一個檔案
- 列: 一列(資料元素) 包含了相同的資料, 例如郵政編碼的資料。
- 行:一行(=元組,或記錄)是一組相關的資料,例如一條使用者訂閱的資料。
- 冗餘:儲存兩倍資料,冗餘降低了效能,但提高了資料的安全性。
- 主鍵:主鍵是唯一的。一個數據表中只能包含一個主鍵。你可以使用主鍵來查詢資料。
- 外來鍵:外來鍵用於關聯兩個表。
- 複合鍵:複合鍵(組合鍵)將多個列作為一個索引鍵,一般用於複合索引。
- 索引:使用索引可快速訪問資料庫表中的特定資訊。索引是對資料庫表中一列或多列的值進行排序的一種結構。類似於書籍的目錄。
- 參照完整性: 參照的完整性要求關係中不允許引用不存在的實體。與實體完整性是關係模型必須滿足的完整性約束條件,目的是保證資料的一致性。
安裝MySQL
- 官網下載安裝包(不帶介面,對應系統,穩定版本)
- 目錄解析順序 bin - mysqld - mysql - data - 資料夾 - 庫 - my-default.ini
- 啟動mysql伺服器
- 新增環境變數:
cmd 內命令:
- 啟動伺服器:mysqld
- 啟動客戶端 :mysql -h -P -u -p
- 關閉伺服器 :
tasklist | findstr mysqld
taskkill /F /PID 8372注:windows系統下可以在執行 ->services.msc 檢視系統服務,找到mysql相應服務,輕鬆開啟服務端。
MySQL修改密碼
修改管理員密碼:
cmd >>> mysqladmin -uroot -p舊密碼 password'123'
注:如果存在警告報錯,可忽視
修改使用者密碼方式:
- mysql資料夾內刪除user使用者檔案
- 重灌mysql
- 開啟伺服器時跳過授權表,直接進入系統修改授權
- 停止原服務
- cmd命令啟動伺服器
mysqld --skip-grant-tables- 使用客戶端登入,執行修改命令:
update mysql.user set password = password('123123') where user= 'root' and host = 'localhost'- 重新整理許可權 flush privileges
- 重啟驗證密碼
MySQL 編碼設定
mysql隨著版本不同,預設編碼格式不統一,前期存在gbk等編碼格式。於是需要utf8來統一格式、
編碼設定步驟(windows):
- 檢視當前伺服器的設定:客戶端內 執行 \s
- 複製mysql安裝目錄下的my-default.ini檔案,重新命名一份副本為 my,ini,用來編寫配置檔案
- my.ini內配置檔案內容分為 分割槽和選項:
[mysqld]
character_set_server = utf8
collation_server = utf8_general_ci
[mysql]
default-character-set = utf8
[client]
default-character-set = utf8注:對於5.6版本的修改,服務端只認識下劃線設定,而不認識 ‘-’
編碼設定步驟(mac):
- mac預設無法修改mysql的安裝路徑:/usr/local (可使用 command + shift +g 前往)
- 配置檔名為 my.cnf
原理:mysql在啟動時,會自動在安裝目錄下查詢ini檔案,找到對應命了的標題載入裡面的設定項、
配置檔案內,mysql和client的區別:
mysql是客戶端的一種,客戶端還包括python客戶端,java客戶端等。client和mysql同時存在,則首先生效mysql,其他客戶端同理。注:修改了mysqld配置需要重啟伺服器。
MySQL基本語句
- 庫操作
增(建立資料庫):CREATE DATABASE 資料庫名 charset utf8;
命名規則:
- 可以由字母、數字、下劃線、@、#、$
- 取分大小寫
- 唯一性
- 不能使用關鍵詞,例:creat select
- 不能單獨使用數字
- 最長128位
create database mydb charset utf8;
刪:DROP DATABASE 資料庫名;
drop database mydb;
改
alter database mydb charset gbk
查
show databases;
show create databases mydb;
select database():
選擇資料庫:use 資料庫名
- 表相關
增(建立表):
#語法: create table 表名( 欄位名1 型別[(寬度) 約束條件], 欄位名2 型別[(寬度) 約束條件], 欄位名3 型別[(寬度) 約束條件] ); ''' #注意: 1. 在同一張表中,欄位名是不能相同 2. 寬度和約束條件可選 3. 欄位名和型別是必須的 '''
use mydb; create table t1 (id int,name char)
刪
drop table 表名
改
- 改表名:
ALTER TABLE 表名 RENAME 新表名;
rename table tname1 to tname2- 修改欄位名:
alter table 表名 add | modify | drop | change
add 跟 列名和型別 (新增欄位名)
modify 跟 列名 和 型別 (修改欄位的屬性)
drop 跟列名 (刪除欄位名)
change 跟 舊列名 新列名 型別 (重置欄位名)
修改字元編碼:
alter table 表名 default character set gbk查
show tables;
show create table t1; === 查看錶詳細結構,可新增 \G show creat table t1\G;
desc t1; == 簡寫:desc 表名
複製表
複製表結構+記錄 (key不會被複制: 主鍵、外來鍵和索引) mysql> create table new_service select * from service; 只複製表結構 mysql> select * from service where 1=2; //使用條件為假,查不到任何記錄。則只複製了表結構 Empty set (0.00 sec) mysql> create table new1_service select * from service where 1=2; Query OK, 0 rows affected (0.00 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> create table t4 like employees;
- 記錄相關
增
- 插入完整資料(順序插入):
-1)INSERT INTO 表名(欄位1,欄位2,欄位3…欄位n) VALUES(值1,值2,值3…值n);
-2)INSERT INTO 表名 VALUES (值1,值2,值3…值n);- 指定欄位插入資料
INSERT INTO 表名(欄位1,欄位2,欄位3…) VALUES (值1,值2,值3…);
- 插入多條資料
INSERT INTO 表名 VALUES (值1,值2,值3…值n), (值1,值2,值3…值n), (值1,值2,值3…值n);
- 插入查詢資料
INSERT INTO 表名(欄位1,欄位2,欄位3…欄位n) SELECT (欄位1,欄位2,欄位3…欄位n) FROM 表2 WHERE …
刪
delete from 表名 where 條件; (沒有條件則刪除所有; )
truncate table t1; (重建表,清空所有資料;)
改(更新資料)
- 修改單個欄位:update 表名 set 欄位 = 值 where 條件 ;
- 修改多個欄位:update 表名 set 欄位1=值1,欄位2=值2,where條件;
注:可同時修改多個欄位 ,⽤逗號隔開。例:列名=值,列名=值...(沒有條件則修改全部)
查(單表查詢和多表查詢)