一、MySQL数据库基础
1.1、數據庫模型
? 數據庫由一批數據構成有序集合,這些數據被存在結構化的數據表中。數據表之間互相關聯,反應客觀事物間的本質聯系。數據庫系統提供對數據的安全控制和完整性控制。數據庫的發展大致劃分為幾個階段:人工管理階段、文件系統階段、數據庫系統階段、高級數據庫階段。其種類大概有3種:層次式數據庫、網絡式數據庫和關系式數據庫。
? 文本數據庫缺陷:數據冗余和不一致,數據訪問困難,數據孤立,完整性問題,原子性問題并發訪問問題,安全性問題。
? 數據庫系統的特性:數據管理獨立性;有效地完成數據存取;數據完整性和安全性;數據集中管理;并發存儲與故障恢復;減少應用程序開發時間。
? 數據庫系統由硬件部分和軟件部分共同構成,硬件主要用于存儲數據庫中的數據,包括計算機、存儲設備等。軟件部分則主要包括DBMS、支持DBMS運行的操作系統,以及支持多種語言進行應用開發的訪問技術等。
?通用關系型數據庫架構:
1.2、數據類型與約束
? 數據類型決定了數據在計算機中的存儲格式,代表不同的信息類型。常用的數據類型有:
| 字符:CHAR(n) ?VARCHAR(n) ?BINARY(n) ?VARBINARY(n) ?TEXT(n) ?BLOB(n) 數值: ? 整型:TINYINT ?SMALLINT ?MEDIUMINT ?INT ?BIGINT ? 修飾符:UNSIGNED ?NOT NULL ? 浮點型:FLOAT ?DOUBLE 日期時間:DATE ?TIME ?DATETIME STAMP 布爾 NULL 內置:ENUM, SET 字段修飾符: NOT NULL ? ?非空 NULL ? ? ? ?空 UNSIGNED ? ?無符號 DEFAULT ? ? 不適用于TEXT類型 PRIMARY KEY 主鍵 UNIQUE KEY ?唯一鍵 AUTO_INCREMENT:自動增長類型的字段必須為主鍵或惟一鍵 |
域約束:數據類型約束
外鍵約束:引用完整性約束
主鍵約束:某字段能惟一標識此字段所屬的實體,并且不允許為空,一張表中只能有一個主鍵。
惟一性約束:每一行的某字段都不允許出現相同值,可以為空一張表中可以有多個
檢查性約束:用戶自定義有效取值范圍。
1.3、MySQL介紹
??MySQL是一個小型關系數據庫管理系統,與其他大型數據庫管理系統(Oracle、DB2)相比,MySQL規模小、功能有限,但是它體積小、速度快、成本低,且它提供的功能對稍微復雜的應用來說已經夠用。
? MySQL的主要運行流程如下所示:
? MySQL數據庫管理系統提供了許多命令行工具,這些工具可以用要管理MySQL服務器、對數據庫進行訪問控制、管理MySQL用戶以及數據庫備份和恢復工具等。
? 服務器端工具程序:
| mysqld:SQL后臺程序。該程序運行后,客戶端才能連接服務器來訪問數據庫。 mysqld_safe:服務器啟動腳本。 mysqld_multi:服務器啟動腳本,可以啟動或停止系統上安裝的多個服務器。 myisamchk:用來描述、檢查、優化和維護MyISAM表的實用工具。 mysqlbug:MySQL缺陷報告腳本。它可以用來向MySQL郵件系統發送缺陷報告。 mysql_install_db:該腳本用默認權限創建MySQL授權表。通常只是在系統首次安裝MySQL時執行一次。? ? ? ? ? ? ? ?? |
? 客戶端工具程序:
| myisampack:壓縮MyISAM表以產生更小的只讀表的工具 mysql:交互式輸入SQL語句或從文件以批處理模式執行它們的命令行工具 mysqlaccess:檢查訪問主機名、用戶名和數據庫組合的權限的腳本 mysqladmin:執行管理操作的客戶端程序,如創建或刪除數據庫,重載授權表,重新打開日志文件等,還可以用來檢查版本、進程、以及服務器的狀態信息 mysqlbinlog:從二進制日志讀取語句的工具,二進制日志文件中包含執行過的語句,可以用來幫助系統從崩潰中恢復 mysqlcheck:檢查、修復、分析以及優化表? ?? mysqldump:將mysql數據庫轉儲到一個文件 ? ? ? ? ? ? ? ? ?? mysqlhotcopy:當服務器運行時,快速備份MyISAM表的工具 mysqlimport:使用LOAD DATA INFILE將文本文件導入相關表的庫戶程序? mysqlshow:顯示數據庫、表、列以及索引相關信息的客戶程序 perror:顯示系統或MySQL錯誤代碼含義的工具 mysqladmin [options] command [arg] [command [arg]] ... [options]:所有通行選項都可使用 command: ? create DB_NAME ?創建數據庫drop DB_NAME刪除數據庫 ? debug: 打開調試日志并記錄于error log中; ? status:顯示簡要狀態信息??(--sleep #: 間隔時長--count #: 顯示的批次) ? extended-status: 輸出mysqld的各狀態變量及其值,相當于執行mysql> SHOW GLOBAL STATUS ? variables: 輸出mysqld的各服務器變量 ? flush-hosts: 清空主機相關的緩存:DNS解析緩存,此前因為連接錯誤次數過多而被拒絕訪問mysqld的主機列表 ? flush-logs: 日志滾動,二進制日志和中繼日志 ? refresh: 相當于同時使用flush-logs和flush-hosts ? flush-privileges、reload:刷新授權表 ? flush-status: 重置狀態變量的值 ? flush-tables: 關閉當前打開的表文件句柄 ? flush-threads:清空線程緩存 ? password: 修改當前用戶的密碼; ? ping: 測試服務器是否在線 ? processlist:顯示mysql線程列表 ? shutdown: 關閉mysqld進程; ? start-slave/stop-slave: 啟動/關閉從服務器線程 ? kill: 殺死指定的線程,可以一次殺死多個,以逗號分隔,不能有多余空格 ? ? ? ??? ? ? ? ? ? ? ??? ? ? ? ? ? ? ?? ? ? ? ? ? ? ?? |
1.4、源碼安裝MySQL5.5
安裝cmake軟件與依賴包:
[root@mylinux?home]#?yum?install?-y?cmake?ncurses-devel創建用戶和組
[root@mylinux?home]#?groupadd?mysql [root@mylinux?home]#?useradd?mysql?-s?/sbin/nologin?-M?-g?mysql解壓編譯MySQL
[root@mylinux?home]#wget? [root@mylinux?home]#tar?xf?mysql-5.5.56.tar.gz [root@mylinux?home]#cd?mysql-5.5.56 [root@mylinux?home]#cmake?.?-DCMAKE_INSTALL_PREFIX=/application/mysql-5.5.56?\ -DMYSQL_DATADIR=/application/mysql-5.5.56/data?\ -DMYSQL_UNIX_ADDR=/application/mysql-5.5.56/tmp/mysql.sock?\ -DDEFAULT_CHARSET=utf8?\ -DDEFAULT_COLLATION=utf8_general_ci?\ -DEXTRA_CHARSETS=gbk,gb2312,utf8,ascii?\ -DENABLED_LOCAL_INFILE=ON?\ -DWITH_INNOBASE_STORAGE_ENGINE=1?\ -DWITH_FEDERATED_STORAGE_ENGINE=1?\ -DWITH_BLACKHOLE_STORAGE_ENGINE=1?\ -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1?\ -DWITHOUT_PARTITION_STORAGE_ENGINE=1?\ -DWITH_FAST_MUTEXES=1?\ -DWITH_ZLIB=bundled?\ -DENABLED_LOCAL_INFILE=1?\ -DWITH_READLINE=1?\ -DWITH_EMBEDDED_SERVER=1?\ -DWITH_DEBUG=0 [root@mylinux?home]#make? [root@mylinux?home]#make?install [root@mylinux?application]#?cd?/application/ [root@mylinux?application]#?ln?-s?/application/mysql-5.5.56/?/application/mysql [root@mylinux?application]#?mkdir?/application/mysql/data?-p [root@mylinux?application]#?cd?mysql [root@mylinux?mysql]#chown??-R?root:mysql??/application/mysql [root@mylinux?mysql]#mdkir?-p?/application/mysql-5.5.56/tmp??? [root@mylinux?mysql]#chmod?-R?777?/application/mysql-5.5.56/tmp選擇配置文件與環境變量
[root@mylinux?mysql]#cp?support-files/my-large.cnf??/etc/my.cnf????????????? [root@mylinux?mysql]#vim?/etc/profile.d/mysql.shexport?PATH=/application/mysql/bin:$PATH初始化數據庫
[root@mylinux?mysql]#?./scripts/mysql_install_db??--user=mysql?--data=/application/mysql/data/ Installing?MySQL?system?tables... 170711?22:09:40?[Warning]?'THREAD_CONCURRENCY'?is?deprecated?and?will?be?removed?in?a?future?release. 170711?22:09:40?[Note]?Ignoring?--secure-file-priv?value?as?server?is?running?with?--bootstrap. 170711?22:09:40?[Note]?./bin/mysqld?(mysqld?5.5.56-log)?starting?as?process?28738?... OK Filling?help?tables... 170711?22:09:41?[Warning]?'THREAD_CONCURRENCY'?is?deprecated?and?will?be?removed?in?a?future?release. 170711?22:09:41?[Note]?Ignoring?--secure-file-priv?value?as?server?is?running?with?--bootstrap. 170711?22:09:41?[Note]?./bin/mysqld?(mysqld?5.5.56-log)?starting?as?process?28745?... OKTo?start?mysqld?at?boot?time?you?have?to?copy support-files/mysql.server?to?the?right?place?for?your?systemPLEASE?REMEMBER?TO?SET?A?PASSWORD?FOR?THE?MySQL?root?USER?! To?do?so,?start?the?server,?then?issue?the?following?commands:./bin/mysqladmin?-u?root?password?'new-password' ./bin/mysqladmin?-u?root?-h?mylinux?password?'new-password'Alternatively?you?can?run: ./bin/mysql_secure_installationwhich?will?also?give?you?the?option?of?removing?the?test databases?and?anonymous?user?created?by?default.??This?is strongly?recommended?for?production?servers.See?the?manual?for?more?instructions.You?can?start?the?MySQL?daemon?with: cd?.?;?./bin/mysqld_safe?&You?can?test?the?MySQL?daemon?with?mysql-test-run.pl cd?./mysql-test?;?perl?mysql-test-run.plPlease?report?any?problems?at?http://bugs.mysql.com/添加啟動腳本與設置開機啟動
[root@mylinux?mysql]#?cp?support-files/mysql.server?/etc/init.d/mysqld [root@mylinux?mysql]#?chmod?+x?/etc/init.d/mysqld? [root@mylinux?mysql]#?chkconfig?--add?mysqld [root@mylinux?mysql]#?chkconfig?--level?2345?mysqld?on [root@mylinux?mysql]#?service?mysqld?start? Starting?MySQL..?SUCCESS!mysql的配置文件:
?/etc/my.cnf或/etc/mysql/my.cnf-->$MYSQL_BASE/my.cnf -->--defaults-extra-file=my.cnf
-->~/ .my.cnf
使用配置文件的方式
? 1、它依次查找每個需要查找的文件,結果是所有文件并集;
? 2、如果某參數在多個文件中出現多次,后讀取的最終生效;
1.5、MySQL變量與作用域
服務器變量:@@變量名
? 顯示:SELECT @@變量名
? 設定:SET GLOBAL|SESSION 變量名='value'
設定服務器變量的值:(僅用于支持動態的變量)
? 支持修改的服務器變量:
? ? 動態變量:可以MySQL運行時修改,可即時修改
? ? 靜態變量:于配置文件中修改其值,并重啟后方能生效;
? 動態調整參數的生效方式:
? ? 全局變量:服務器級別,修改之后僅對新建立的會話有效;
? ? 會話變量:會話級別,僅對當前會話有效;會話建立時,從全局繼承各變量;
查看服務器變量:
mysql>?SHOW?[{GLOBAL|SESSION}]?VARIABLES?[LIKE?'']; mysql>?SELECT?@@{GLOBAL|SESSION}.VARILABLE_NAME; mysql>?SELECT?*?FROM?INFORMATION_SCHEMA.GLOBAL_VARIABLES?WHERE?VARIABLE_NAME='NAME'; mysql>?SELECT?*?FROM?INFORMATION_SCHEMA.SESSION_VARIABLES?WHERE?VARIABLE_NAME='NAME';修改變量:默認僅管理員有權限修改全局變量
mysql>?SET?{GLOBAL|SESSION}?VARIABLE_NAME='VALUE';注意:無論是全局還是會話級別的動態變量修改,在重啟mysqld后都會失效;想永久有效,可定義在配置文件中的相應段中[mysqld]。
1.6、MySQL中文數據亂碼解決辦法
1)、向表中插入數據之前先設置客戶端的字符集與表保持一致
??SELECT?CREATE?TABLE?tb_name?\G???查看表的字符集set?names?字符集;2)、在SQL文件中指定字符集然后登陸MYSQL導入數據
??source?tb_namq.sql;3)、在SQL文件中指定字符集,通過mysql命令導入數據
??mysql??-uroot??-p’password’??tb_name<tb_name.sql4)、指定mysql命令設置字符集
?mysql??-uroot?-p’password’?--default-character-set=字符集?tb_name<tb_name.sql5)、配置文件my.cnf中設置客戶端與服務器端字符集
6)、進入MySQL,可以查看各配置字符集是否一致
SHOW?VARIABLES?LIKE?‘character_set%’;總結
以上是生活随笔為你收集整理的一、MySQL数据库基础的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 请MM吃饭之工厂模式实现
- 下一篇: SQL Server误区30日谈-Day