溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

一、MySQL數(shù)據(jù)庫基礎(chǔ)

發(fā)布時間:2020-07-31 11:19:36 來源:網(wǎng)絡(luò) 閱讀:510 作者:少年不在了 欄目:MySQL數(shù)據(jù)庫

1.1、數(shù)據(jù)庫模型

  數(shù)據(jù)庫由一批數(shù)據(jù)構(gòu)成有序集合,這些數(shù)據(jù)被存在結(jié)構(gòu)化的數(shù)據(jù)表中。數(shù)據(jù)表之間互相關(guān)聯(lián),反應(yīng)客觀事物間的本質(zhì)聯(lián)系。數(shù)據(jù)庫系統(tǒng)提供對數(shù)據(jù)的安全控制和完整性控制。數(shù)據(jù)庫的發(fā)展大致劃分為幾個階段:人工管理階段、文件系統(tǒng)階段、數(shù)據(jù)庫系統(tǒng)階段、高級數(shù)據(jù)庫階段。其種類大概有3種:層次式數(shù)據(jù)庫、網(wǎng)絡(luò)式數(shù)據(jù)庫和關(guān)系式數(shù)據(jù)庫。

  文本數(shù)據(jù)庫缺陷:數(shù)據(jù)冗余和不一致,數(shù)據(jù)訪問困難,數(shù)據(jù)孤立,完整性問題,原子性問題并發(fā)訪問問題,安全性問題。

  數(shù)據(jù)庫系統(tǒng)的特性:數(shù)據(jù)管理獨立性;有效地完成數(shù)據(jù)存??;數(shù)據(jù)完整性和安全性;數(shù)據(jù)集中管理;并發(fā)存儲與故障恢復(fù);減少應(yīng)用程序開發(fā)時間。

  數(shù)據(jù)庫系統(tǒng)由硬件部分和軟件部分共同構(gòu)成,硬件主要用于存儲數(shù)據(jù)庫中的數(shù)據(jù),包括計算機、存儲設(shè)備等。軟件部分則主要包括DBMS、支持DBMS運行的操作系統(tǒng),以及支持多種語言進行應(yīng)用開發(fā)的訪問技術(shù)等。

 通用關(guān)系型數(shù)據(jù)庫架構(gòu):

一、MySQL數(shù)據(jù)庫基礎(chǔ)

1.2、數(shù)據(jù)類型與約束

  數(shù)據(jù)類型決定了數(shù)據(jù)在計算機中的存儲格式,代表不同的信息類型。常用的數(shù)據(jù)類型有:

字符:CHAR(n)  VARCHAR(n)  BINARY(n)  VARBINARY(n)  TEXT(n)  BLOB(n)

數(shù)值:

  整型:TINYINT  SMALLINT  MEDIUMINT  INT  BIGINT

  修飾符:UNSIGNED  NOT NULL

  浮點型:FLOAT  DOUBLE

日期時間:DATE  TIME  DATETIME STAMP

布爾

NULL

內(nèi)置:ENUM, SET


字段修飾符:

NOT NULL    非空

NULL        空

UNSIGNED    無符號

DEFAULT     不適用于TEXT類型

PRIMARY KEY 主鍵

UNIQUE KEY  唯一鍵

AUTO_INCREMENT:自動增長類型的字段必須為主鍵或惟一鍵


域約束:數(shù)據(jù)類型約束

外鍵約束:引用完整性約束

主鍵約束:某字段能惟一標識此字段所屬的實體,并且不允許為空,一張表中只能有一個主鍵。

惟一性約束:每一行的某字段都不允許出現(xiàn)相同值,可以為空一張表中可以有多個

檢查性約束:用戶自定義有效取值范圍。

1.3、MySQL介紹

  MySQL是一個小型關(guān)系數(shù)據(jù)庫管理系統(tǒng),與其他大型數(shù)據(jù)庫管理系統(tǒng)(Oracle、DB2)相比,MySQL規(guī)模小、功能有限,但是它體積小、速度快、成本低,且它提供的功能對稍微復(fù)雜的應(yīng)用來說已經(jīng)夠用。

  MySQL的主要運行流程如下所示:

一、MySQL數(shù)據(jù)庫基礎(chǔ)

  MySQL數(shù)據(jù)庫管理系統(tǒng)提供了許多命令行工具,這些工具可以用要管理MySQL服務(wù)器、對數(shù)據(jù)庫進行訪問控制、管理MySQL用戶以及數(shù)據(jù)庫備份和恢復(fù)工具等。

  服務(wù)器端工具程序:

mysqld:SQL后臺程序。該程序運行后,客戶端才能連接服務(wù)器來訪問數(shù)據(jù)庫。

mysqld_safe:服務(wù)器啟動腳本。

mysqld_multi:服務(wù)器啟動腳本,可以啟動或停止系統(tǒng)上安裝的多個服務(wù)器。

myisamchk:用來描述、檢查、優(yōu)化和維護MyISAM表的實用工具。

mysqlbug:MySQL缺陷報告腳本。它可以用來向MySQL郵件系統(tǒng)發(fā)送缺陷報告。

mysql_install_db:該腳本用默認權(quán)限創(chuàng)建MySQL授權(quán)表。通常只是在系統(tǒng)首次安裝MySQL時執(zhí)行一次。                

  客戶端工具程序:

myisampack:壓縮MyISAM表以產(chǎn)生更小的只讀表的工具

mysql:交互式輸入SQL語句或從文件以批處理模式執(zhí)行它們的命令行工具

mysqlaccess:檢查訪問主機名、用戶名和數(shù)據(jù)庫組合的權(quán)限的腳本

mysqladmin:執(zhí)行管理操作的客戶端程序,如創(chuàng)建或刪除數(shù)據(jù)庫,重載授權(quán)表,重新打開日志文件等,還可以用來檢查版本、進程、以及服務(wù)器的狀態(tài)信息

mysqlbinlog:從二進制日志讀取語句的工具,二進制日志文件中包含執(zhí)行過的語句,可以用來幫助系統(tǒng)從崩潰中恢復(fù)

mysqlcheck:檢查、修復(fù)、分析以及優(yōu)化表    

mysqldump:將mysql數(shù)據(jù)庫轉(zhuǎn)儲到一個文件                   

mysqlhotcopy:當服務(wù)器運行時,快速備份MyISAM表的工具

mysqlimport:使用LOAD DATA INFILE將文本文件導(dǎo)入相關(guān)表的庫戶程序 

mysqlshow:顯示數(shù)據(jù)庫、表、列以及索引相關(guān)信息的客戶程序

perror:顯示系統(tǒng)或MySQL錯誤代碼含義的工具


mysqladmin [options] command [arg] [command [arg]] ...

[options]:所有通行選項都可使用

command:

  create DB_NAME  創(chuàng)建數(shù)據(jù)庫drop DB_NAME刪除數(shù)據(jù)庫

  debug: 打開調(diào)試日志并記錄于error log中;

  status:顯示簡要狀態(tài)信息  (--sleep #: 間隔時長--count #: 顯示的批次)

  extended-status: 輸出mysqld的各狀態(tài)變量及其值,相當于執(zhí)行mysql> SHOW GLOBAL STATUS

  variables: 輸出mysqld的各服務(wù)器變量

  flush-hosts: 清空主機相關(guān)的緩存:DNS解析緩存,此前因為連接錯誤次數(shù)過多而被拒絕訪問mysqld的主機列表

  flush-logs: 日志滾動,二進制日志和中繼日志

  refresh: 相當于同時使用flush-logs和flush-hosts

  flush-privileges、reload:刷新授權(quán)表

  flush-status: 重置狀態(tài)變量的值

  flush-tables: 關(guān)閉當前打開的表文件句柄

  flush-threads:清空線程緩存

  password: 修改當前用戶的密碼;

  ping: 測試服務(wù)器是否在線

  processlist:顯示mysql線程列表

  shutdown: 關(guān)閉mysqld進程;

  start-slave/stop-slave: 啟動/關(guān)閉從服務(wù)器線程

  kill: 殺死指定的線程,可以一次殺死多個,以逗號分隔,不能有多余空格

                                                       

1.4、源碼安裝MySQL5.5

安裝cmake軟件與依賴包:

[root@mylinux home]# yum install -y cmake ncurses-devel

創(chuàng)建用戶和組

[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

選擇配置文件與環(huán)境變量

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

初始化數(shù)據(jù)庫

[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 ...
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/

添加啟動腳本與設(shè)置開機啟動

[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、它依次查找每個需要查找的文件,結(jié)果是所有文件并集;

  2、如果某參數(shù)在多個文件中出現(xiàn)多次,后讀取的最終生效;

1.5、MySQL變量與作用域


服務(wù)器變量:@@變量名

  顯示:SELECT @@變量名

  設(shè)定:SET GLOBAL|SESSION 變量名='value'

設(shè)定服務(wù)器變量的值:(僅用于支持動態(tài)的變量)

  支持修改的服務(wù)器變量:

    動態(tài)變量:可以MySQL運行時修改,可即時修改

    靜態(tài)變量:于配置文件中修改其值,并重啟后方能生效;

  動態(tài)調(diào)整參數(shù)的生效方式:

    全局變量:服務(wù)器級別,修改之后僅對新建立的會話有效;

    會話變量:會話級別,僅對當前會話有效;會話建立時,從全局繼承各變量;

查看服務(wù)器變量:

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';

修改變量:默認僅管理員有權(quán)限修改全局變量

mysql> SET {GLOBAL|SESSION} VARIABLE_NAME='VALUE';

注意:無論是全局還是會話級別的動態(tài)變量修改,在重啟mysqld后都會失效;想永久有效,可定義在配置文件中的相應(yīng)段中[mysqld]。

1.6、MySQL中文數(shù)據(jù)亂碼解決辦法

1)、向表中插入數(shù)據(jù)之前先設(shè)置客戶端的字符集與表保持一致

  SELECT CREATE TABLE tb_name \G   查看表的字符集
  set names 字符集;

2)、在SQL文件中指定字符集然后登陸MYSQL導(dǎo)入數(shù)據(jù)

  source tb_namq.sql;

3)、在SQL文件中指定字符集,通過mysql命令導(dǎo)入數(shù)據(jù)

  mysql  -uroot  -p’password’  tb_name<tb_name.sql

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

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

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

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

SHOW VARIABLES LIKE ‘character_set%’;



向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI