標籤:多線程 select 字串 管理工具 客戶 千萬 string delete utf-8
資料庫資料庫就是一種特殊的檔案,其中儲存著需要的資料.
mysql資料庫檔案位置在 /var/lib/mysql
關係型資料庫核心元素
- 資料行(記錄)
- 資料列(欄位)
- 資料表(資料行的集合)
- 資料庫(資料表的集合)
類比excel表,一張Excel表檔案相當於一個資料庫,裡面的一個個sheet相當於一張表table.
RDBMS
Relational Database Management System
通過表來表示關係型
當前主要使用兩種類型的資料庫:關係型資料庫、非關係型資料庫,本部分主要討論關係型資料庫,對於非關係型資料庫會在後面學習
所謂的關係型資料庫RDBMS,是建立在關聯式模式基礎上的資料庫,藉助於集合代數等數學概念和方法來處理資料庫中的資料
查看資料庫排名:https://db-engines.com/en/ranking
關係型資料庫的主要產品:
- oracle:在以前的大型項目中使用,銀行,電信等項目
- mysql:web時代使用最廣泛的關係型資料庫
- ms sql server:在微軟的項目中使用
- sqlite:輕量級資料庫,主要應用在移動平台
SQL
Structured Query Language
SQL是結構化查詢語言 (SQL),是一種用來操作RDBMS的資料庫語言,當前關係型資料庫都支援使用SQL語言進行操作,也就是說可以通過 SQL 操作 oracle,sql server,mysql,sqlite 等等所有的關係型的資料庫
- SQL語句主要分為:
- DQL:資料查詢語言,用於對資料進行查詢,如select
- DML:資料操作語言,對資料進行增加、修改、刪除,如insert、udpate、delete
- TPL:交易處理語言,對事務進行處理,包括begin transaction、commit、rollback
- DCL:資料控制語言,進行授權與許可權回收,如grant、revoke
- DDL:資料定義語言 (Data Definition Language),進行資料庫、表的管理等,如create、drop
- CCL:指標控制語言,通過控制指標完成表的操作,如declare cursor
- 對於web程式員來講,重點是資料的crud(增刪改查),必須熟練編寫DQL、DML,能夠編寫DDL完成資料庫、表的操作,其它語言如TPL、DCL、CCL瞭解即可
- SQL 是一門特殊的語言,專門用來操作關聯式資料庫
- 不區分大小寫
例子:
# 建立Connection串連conn = connect(host=‘localhost‘, port=3306, user=‘root‘, password=‘mysql‘, database=‘python1‘, charset=‘utf8‘)# 得Cursor對象cs = conn.cursor()# 更新# sql = ‘update students set name="劉邦" where id=6‘# 刪除# sql = ‘delete from students where id=6‘# 執行select語句,並返回受影響的行數:查詢一條學生資料sql = ‘select id,name from students where id = 7‘# sql = ‘SELECT id,name FROM students WHERE id = 7‘count=cs.execute(sql)# 列印受影響的行數print(count)
MySQL 簡介
特點
使用C和C++編寫,並使用了多種編譯器進行測試,保證原始碼的可移植性
支援多種作業系統,如Linux、Windows、AIX、FreeBSD、HP-UX、MacOS、NovellNetware、OpenBSD、OS/2 Wrap、Solaris等
為多種程式設計語言提供了API,如C、C++、Python、Java、Perl、PHP、Eiffel、Ruby等
支援多線程,充分利用CPU資源
- 最佳化的SQL查詢演算法,有效地提高查詢速度
- 提供多語言支援,常見的編碼如GB2312、BIG5、UTF8
- 提供TCP/IP、ODBC和JDBC等多種資料庫連接途徑
- 提供用於管理、檢查、最佳化資料庫操作的管理工具
- 大型的資料庫。可以處理擁有上千萬條記錄的大型資料庫
- 支援多種儲存引擎
- MySQL 軟體採用了雙授權政策,它分為社區版和商業版,由於其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,一般中小型網站的開發都選擇MySQL作為網站資料庫
- MySQL使用標準的SQL資料語言形式
- Mysql是可以定製的,採用了GPL協議,你可以修改源碼來開發自己的Mysql系統
- 線上DDL更改功能
- 複製全域事務標識
- 複製無崩潰從機
- 複製多線程從機
伺服器端安裝
- 安裝伺服器端:在終端中輸入如下命令,斷行符號後,然後按照提示輸入
sudo apt-get install mysql-server
- 當前使用的ubuntu鏡像中已經安裝好了mysql伺服器端,無需再安裝,並且設定成了開機自啟動
- 伺服器用於接收用戶端的請求、執行sql語句、管理資料庫
- 伺服器端一般以服務方式管理,名稱為mysql
- 啟動服務
sudo service mysql start
- 查看進程中是否存在mysql服務
ps ajx|grep mysql
停止服務: sudo service mysql stop
重啟服務: sudo service mysql restart
配置:
- 設定檔目錄為/etc/mysql/mysql.cnf
- 進入conf.d目錄,開啟mysql.cnf,發現並沒有配置
- 進入mysql.conf.d目錄,開啟mysql.cnf,可以看到配置項
用戶端
- 用戶端為開發人員與dba使用,通過socket方式與服務端通訊,常用的有navicat、命令列mysql
圖形化介面用戶端navicat
- 可以到Navicat官網下載
- 將壓縮檔拷貝到ubuntu虛擬機器中,放到案頭上,解壓
tar zxvf navicat112_mysql_cs_x64.tar.gz
./start_navicat
- 按ctrl+d或輸入如下命令退出,quit或者exit也可退出
資料完整性
- 一個資料庫就是一個完整的業務單元,可以包含多張表,資料被儲存在表中
- 在表中為了更加準確的儲存資料,保證資料的正確有效,可以在建立表的時候,為表添加一些強制性的驗證,包括資料欄位的類型、約束
資料類型
- 可以通過查看協助文檔查閱所有支援的資料類型
- 使用資料類型的原則是:夠用就行,盡量使用取值範圍小的,而不用大的,這樣可以更多的節省儲存空間
- 常用資料類型如下:
- 整數:int,bit
- 小數:decimal
- 字串:varchar,char
- 日期時間: date, time, datetime
- 枚舉類型(enum)
- 特別說明的類型如下:
- decimal表示浮點數,如decimal(5,2)表示共存5位元,小數佔2位
- char表示固定長度的字串,如char(3),如果填充‘ab‘時會補一個空格為
‘ab ‘
- varchar表示可變長度的字串,如varchar(3),填充‘ab‘時就會儲存‘ab‘
- 字串text表示儲存大文本,當字元大於4000時推薦使用
- 對於圖片、音頻、視頻等檔案,不儲存在資料庫中,而是上傳到某個伺服器上,然後在表中儲存這個檔案的儲存路徑
- 更全的資料類型可以參考http://blog.csdn.net/anxpp/article/details/51284106
約束
- 主鍵primary key:物理上儲存的順序
- 非空not null:此欄位不允許填寫空值
- 惟一unique:此欄位的值不允許重複
- 預設default:當不填寫此值時會使用預設值,如果填寫時以填寫為準
- 外鍵foreign key:對關係欄位進行約束,當為關係欄位填寫值時,會到關聯的表中查詢此值是否存在,如果存在則填寫成功,如果不存在則填寫失敗並拋出異常
- 說明:雖然外鍵約束可以保證資料的有效性,但是在進行資料的crud(增加、修改、刪除、查詢)時,都會降低資料庫的效能,所以不推薦使用,那麼資料的有效性怎麼保證呢?答:可以在邏輯層進行控制
mysql資料庫(1)