1. 程式人生 > >一、MySQL數據庫基礎

一、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軟件與依賴包:

[[email protected] home]# yum install -y cmake ncurses-devel

創建用戶和組

[[email protected] home]# groupadd mysql
[[email protected] home]# useradd mysql -s /sbin/nologin -M -g mysql

解壓編譯MySQL

[[email protected] home]#wget 
[[email protected] home]#tar xf mysql-5.5.56.tar.gz
[[email protected] home]#cd mysql-5.5.56
[[email protected] 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
[[email protected] home]#make 
[[email protected] home]#make install
[[email protected] application]# cd /application/
[[email protected] application]# ln -s /application/mysql-5.5.56/ /application/mysql
[[email protected] application]# mkdir /application/mysql/data -p
[[email protected] application]# cd mysql
[[email protected] mysql]#chown  -R root:mysql  /application/mysql
[[email protected] mysql]#mdkir -p /application/mysql-5.5.56/tmp   
[[email protected] mysql]#chmod -R 777 /application/mysql-5.5.56/tmp

選擇配置文件與環境變量

[[email protected] mysql]#cp support-files/my-large.cnf  /etc/my.cnf             
[[email protected] mysql]#vim /etc/profile.d/mysql.sh
   export PATH=/application/mysql/bin:$PATH

初始化數據庫

[[email protected] 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 ...
OK

To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

PLEASE 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_installation

which 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.pl

Please report any problems at http://bugs.mysql.com/

添加啟動腳本與設置開機啟動

[[email protected] mysql]# cp support-files/mysql.server /etc/init.d/mysqld
[[email protected] mysql]# chmod +x /etc/init.d/mysqld 
[[email protected] mysql]# chkconfig --add mysqld
[[email protected] mysql]# chkconfig --level 2345 mysqld on
[[email protected] 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.sql

4)、指定mysql命令設置字符集

 mysql  -uroot -p’password’ --default-character-set=字符集 tb_name<tb_name.sql

5)、配置文件my.cnf中設置客戶端與服務器端字符集

6)、進入MySQL,可以查看各配置字符集是否一致

SHOW VARIABLES LIKE ‘character_set%’;



本文出自 “隨風而飄” 博客,請務必保留此出處http://yinsuifeng.blog.51cto.com/10173491/1946762

一、MySQL數據庫基礎