国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

mysql 菜鳥入門

2024-07-24 12:59:28
字體:
供稿:網(wǎng)友

學(xué)習(xí)文檔:http://www.runoob.com/MySQL/mysql-tutorial.html

RDBMS 術(shù)語

在我們開始學(xué)習(xí)MySQL 數(shù)據(jù)庫前,讓我們先了解下RDBMS的一些術(shù)語:

數(shù)據(jù)庫: 數(shù)據(jù)庫是一些關(guān)聯(lián)表的集合。.數(shù)據(jù)表: 表是數(shù)據(jù)的矩陣。在一個數(shù)據(jù)庫中的表看起來像一個簡單的電子表格。列: 一列(數(shù)據(jù)元素) 包含了相同的數(shù)據(jù), 例如郵政編碼的數(shù)據(jù)。行:一行(=元組,或記錄)是一組相關(guān)的數(shù)據(jù),例如一條用戶訂閱的數(shù)據(jù)。冗余:存儲兩倍數(shù)據(jù),冗余可以使系統(tǒng)速度更快。主鍵:主鍵是唯一的。一個數(shù)據(jù)表中只能包含一個主鍵。你可以使用主鍵來查詢數(shù)據(jù)。外鍵:外鍵用于關(guān)聯(lián)兩個表。復(fù)合鍵:復(fù)合鍵(組合鍵)將多個列作為一個索引鍵,一般用于復(fù)合索引。索引:使用索引可快速訪問數(shù)據(jù)庫表中的特定信息。索引是對數(shù)據(jù)庫表中一列或多列的值進(jìn)行排序的一種結(jié)構(gòu)。類似于書籍的目錄。參照完整性: 參照的完整性要求關(guān)系中不允許引用不存在的實(shí)體。與實(shí)體完整性是關(guān)系模型必須滿足的完整性約束條件,目的是保證數(shù)據(jù)的一致性。

Mysql數(shù)據(jù)庫

MySQL是一個關(guān)系型數(shù)據(jù)庫管理系統(tǒng),由瑞典MySQL AB公司開發(fā),目前屬于Oracle公司。MySQL是一種關(guān)聯(lián)數(shù)據(jù)庫管理系統(tǒng),關(guān)聯(lián)數(shù)據(jù)庫將數(shù)據(jù)保存在不同的表中,而不是將所有數(shù)據(jù)放在一個大倉庫內(nèi),這樣就增加了速度并提高了靈活性。

Mysql是開源的,所以你不需要支付額外的費(fèi)用。Mysql支持大型的數(shù)據(jù)庫。可以處理擁有上千萬條記錄的大型數(shù)據(jù)庫。MySQL使用標(biāo)準(zhǔn)的SQL數(shù)據(jù)語言形式。Mysql可以允許于多個系統(tǒng)上,并且支持多種語言。這些編程語言包括C、C++、Python、java、Perl、php、Eiffel、Ruby和Tcl等。Mysql對PHP有很好的支持,PHP是目前最流行的Web開發(fā)語言。MySQL支持大型數(shù)據(jù)庫,支持5000萬條記錄的數(shù)據(jù)倉庫,32位系統(tǒng)表文件最大可支持4GB,64位系統(tǒng)支持最大的表文件為8TB。Mysql是可以定制的,采用了GPL協(xié)議,你可以修改源碼來開發(fā)自己的Mysql系統(tǒng)。

MySQL 安裝

所有平臺的Mysql下載地址為: MySQL 下載. 挑選你需要的 MySQL Community Server 版本及對應(yīng)的平臺。


linux/UNIX上安裝Mysql

Linux平臺上推薦使用RPM包來安裝Mysql,MySQL AB提供了以下RPM包的下載地址:

MySQL - MySQL服務(wù)器。你需要該選項(xiàng),除非你只想連接運(yùn)行在另一臺機(jī)器上的MySQL服務(wù)器。MySQL-client - MySQL 客戶端程序,用于連接并操作Mysql服務(wù)器。MySQL-devel - 庫和包含文件,如果你想要編譯其它MySQL客戶端,例如Perl模塊,則需要安裝該RPM包。MySQL-shared - 該軟件包包含某些語言和應(yīng)用程序需要動態(tài)裝載的共享庫(libmysqlclient.so*),使用MySQL。MySQL-bench - MySQL數(shù)據(jù)庫服務(wù)器的基準(zhǔn)和性能測試工具。

以下安裝Mysql RMP的實(shí)例是在SuSE Linux系統(tǒng)上進(jìn)行,當(dāng)然該安裝步驟也適合應(yīng)用于其他支持RPM的Linux系統(tǒng),如:Centos。

安裝步驟如下:

使用root用戶登陸你的Linux系統(tǒng)。

下載Mysql RPM包,下載地址為:MySQL 下載。

通過以下命令執(zhí)行Mysql安裝,rpm包為你下載的rpm包:

[root@host]# rpm -i MySQL-5.0.9-0.i386.rpm

以上安裝mysql服務(wù)器的過程會創(chuàng)建mysql用戶,并創(chuàng)建一個mysql配置文件my.cnf。

你可以在/usr/bin和/usr/sbin中找到所有與MySQL相關(guān)的二進(jìn)制文件。所有數(shù)據(jù)表和數(shù)據(jù)庫將在/var/lib/mysql目錄中創(chuàng)建。

以下是一些mysql可選包的安裝過程,你可以根據(jù)自己的需要來安裝:

[root@host]# rpm -i MySQL-client-5.0.9-0.i386.rpm[root@host]# rpm -i MySQL-devel-5.0.9-0.i386.rpm[root@host]# rpm -i MySQL-shared-5.0.9-0.i386.rpm[root@host]# rpm -i MySQL-bench-5.0.9-0.i386.rpm

啟動及關(guān)閉 MySQL 服務(wù)器

首先,我們需要通過以下命令來檢查MySQL服務(wù)器是否啟動:

ps -ef | grep mysqld

如果MySql已經(jīng)啟動,以上命令將輸出mysql進(jìn)程列表, 如果mysql未啟動,你可以使用以下命令來啟動mysql服務(wù)器:

root@host# cd /usr/bin./mysqld_safe &

如果你想關(guān)閉目前運(yùn)行的 MySQL 服務(wù)器, 你可以執(zhí)行以下命令:

root@host# cd /usr/bin./mysqladmin -u root -p shutdownEnter passWord: ******

/etc/my.cnf 文件配置

一般情況下,你不需要修改該配置文件,該文件默認(rèn)配置如下:

[mysqld]datadir=/var/lib/mysqlsocket=/var/lib/mysql/mysql.sock[mysql.server]user=mysqlbasedir=/var/lib[safe_mysqld]err-log=/var/log/mysqld.logpid-file=/var/run/mysqld/mysqld.pid

在配置文件中,你可以指定不同的錯誤日志文件存放的目錄,一般你不需要改動這些配置。

實(shí)例

你可以嘗試以下實(shí)例來連接到你的 MySQL 服務(wù)器:

<html><head><meta charset="utf-8"> <title>Connecting MySQL Server</title></head><body><?php   $dbhost = 'localhost:3306';  //mysql服務(wù)器主機(jī)地址   $dbuser = 'guest';      //mysql用戶名   $dbpass = 'guest123';//mysql用戶名密碼   $conn = mysql_connect($dbhost, $dbuser, $dbpass);   if(! $conn )   {     die('Could not connect: ' . mysql_error());   }   echo 'Connected successfully';   mysql_close($conn);?></body></html>

MySQL NULL 值處理

我們已經(jīng)知道MySQL使用 SQL SELECT 命令及 WHERE 子句來讀取數(shù)據(jù)表中的數(shù)據(jù),但是當(dāng)提供的查詢條件字段為 NULL 時,該命令可能就無法正常工作。

為了處理這種情況,MySQL提供了三大運(yùn)算符:

IS NULL: 當(dāng)列的值是NULL,此運(yùn)算符返回true。IS NOT NULL: 當(dāng)列的值不為NULL, 運(yùn)算符返回true。<=>: 比較操作符(不同于=運(yùn)算符),當(dāng)比較的的兩個值為NULL時返回true。

關(guān)于 NULL 的條件比較運(yùn)算是比較特殊的。你不能使用 = NULL 或 != NULL 在列中查找 NULL 值 。

在MySQL中,NULL值與任何其它值的比較(即使是NULL)永遠(yuǎn)返回false,即 NULL = NULL 返回false 。

MySQL中處理NULL使用IS NULL和IS NOT NULL運(yùn)算符。

MySQL 臨時表

MySQL 臨時表在我們需要保存一些臨時數(shù)據(jù)時是非常有用的。臨時表只在當(dāng)前連接可見,當(dāng)關(guān)閉連接時,Mysql會自動刪除表并釋放所有空間。

臨時表在MySQL 3.23版本中添加,如果你的MySQL版本低于 3.23版本就無法使用MySQL的臨時表。不過現(xiàn)在一般很少有再使用這么低版本的MySQL數(shù)據(jù)庫服務(wù)了。

MySQL臨時表只在當(dāng)前連接可見,如果你使用PHP腳本來創(chuàng)建MySQL臨時表,那沒當(dāng)PHP腳本執(zhí)行完成后,該臨時表也會自動銷毀。

如果你使用了其他MySQL客戶端程序連接MySQL數(shù)據(jù)庫服務(wù)器來創(chuàng)建臨時表,那么只有在關(guān)閉客戶端程序時才會銷毀臨時表,當(dāng)然你也可以手動銷毀。

實(shí)例

以下展示了使用MySQL 臨時表的簡單實(shí)例,以下的SQL代碼可以適用于PHP腳本的mysql_query()函數(shù)。

mysql> CREATE TEMPORARY TABLE SalesSummary (    -> PRoduct_name VARCHAR(50) NOT NULL    -> , total_sales DECIMAL(12,2) NOT NULL DEFAULT 0.00    -> , avg_unit_price DECIMAL(7,2) NOT NULL DEFAULT 0.00    -> , total_units_sold INT UNSIGNED NOT NULL DEFAULT 0);Query OK, 0 rows affected (0.00 sec)

MySQL 序列使用

MySQL序列是一組整數(shù):1, 2, 3, ...,由于一張數(shù)據(jù)表只能有一個字段自增主鍵, 如果你想實(shí)現(xiàn)其他字段也實(shí)現(xiàn)自動增加,就可以使用MySQL序列來實(shí)現(xiàn)。

本章我們將介紹如何使用MySQL的序列。

重置序列

如果你刪除了數(shù)據(jù)表中的多條記錄,并希望對剩下數(shù)據(jù)的AUTO_INCREMENT列進(jìn)行重新排列,那么你可以通過刪除自增的列,然后重新添加來實(shí)現(xiàn)。 不過該操作要非常小心,如果在刪除的同時又有新記錄添加,有可能會出現(xiàn)數(shù)據(jù)混亂。操作如下所示:

mysql> ALTER TABLE insect DROP id;mysql> ALTER TABLE insect    -> ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST,    -> ADD PRIMARY KEY (id);

設(shè)置序列的開始值

一般情況下序列的開始值為1,但如果你需要指定一個開始值100,那我們可以通過以下語句來實(shí)現(xiàn):

mysql> CREATE TABLE insect    -> (    -> id INT UNSIGNED NOT NULL AUTO_INCREMENT = 100,    -> PRIMARY KEY (id),    -> name VARCHAR(30) NOT NULL, # type of insect    -> date DATE NOT NULL, # date collected    -> origin VARCHAR(30) NOT NULL # where collected);

或者你也可以在表創(chuàng)建成功后,通過以下語句來實(shí)現(xiàn):

mysql> ALTER TABLE t AUTO_INCREMENT = 100;

MySQL 導(dǎo)出數(shù)據(jù)

MySQL中你可以使用SELECT...INTO OUTFILE語句來簡單的導(dǎo)出數(shù)據(jù)到文本文件上。


使用 SELECT ... INTO OUTFILE 語句導(dǎo)出數(shù)據(jù)

以下實(shí)例中我們將數(shù)據(jù)表 runoob_tbl 數(shù)據(jù)導(dǎo)出到 /tmp/tutorials.txt 文件中:

mysql> SELECT * FROM runoob_tbl     -> INTO OUTFILE '/tmp/tutorials.txt';

你可以通過命令選項(xiàng)來設(shè)置數(shù)據(jù)輸出的指定格式,以下實(shí)例為導(dǎo)出 CSV 格式:

mysql> SELECT * FROM passwd INTO OUTFILE '/tmp/tutorials.txt'    -> FIELDS TERMINATED BY ',' ENCLOSED BY '"'    -> LINES TERMINATED BY '/r/n';

在下面的例子中,生成一個文件,各值用逗號隔開。這種格式可以被許多程序使用。

SELECT a,b,a+b INTO OUTFILE '/tmp/result.text'FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'LINES TERMINATED BY '/n'FROM test_table;

SELECT ... INTO OUTFILE 語句有以下屬性:

LOAD DATA INFILE是SELECT ... INTO OUTFILE的逆操作,SELECT句法。為了將一個數(shù)據(jù)庫的數(shù)據(jù)寫入一個文件,使用SELECT ... INTO OUTFILE,為了將文件讀回數(shù)據(jù)庫,使用LOAD DATA INFILE。SELECT...INTO OUTFILE 'file_name'形式的SELECT可以把被選擇的行寫入一個文件中。該文件被創(chuàng)建到服務(wù)器主機(jī)上,因此您必須擁有FILE權(quán)限,才能使用此語法。輸出不能是一個已存在的文件。防止文件數(shù)據(jù)被篡改。你需要有一個登陸服務(wù)器的賬號來檢索文件。否則 SELECT ... INTO OUTFILE 不會起任何作用。在UNIX中,該文件被創(chuàng)建后是可讀的,權(quán)限由MySQL服務(wù)器所擁有。這意味著,雖然你就可以讀取該文件,但可能無法將其刪除。

導(dǎo)出表作為原始數(shù)據(jù)

mysqldump是mysql用于轉(zhuǎn)存儲數(shù)據(jù)庫的實(shí)用程序。它主要產(chǎn)生一個SQL腳本,其中包含從頭重新創(chuàng)建數(shù)據(jù)庫所必需的命令CREATE TABLE INSERT等。

使用mysqldump導(dǎo)出數(shù)據(jù)需要使用 --tab 選項(xiàng)來指定導(dǎo)出文件指定的目錄,該目標(biāo)必須是可寫的。

以下實(shí)例將數(shù)據(jù)表 runoob_tbl 導(dǎo)出到 /tmp 目錄中:

$ mysqldump -u root -p --no-create-info /            --tab=/tmp RUNOOB runoob_tblpassword ******

導(dǎo)出SQL格式的數(shù)據(jù)

導(dǎo)出SQL格式的數(shù)據(jù)到指定文件,如下所示:

$ mysqldump -u root -p RUNOOB runoob_tbl > dump.txtpassword ******

以上命令創(chuàng)建的文件內(nèi)容如下:

-- MySQL dump 8.23---- Host: localhost    Database: RUNOOB----------------------------------------------------------- Server version       3.23.58---- Table structure for table `runoob_tbl`--CREATE TABLE runoob_tbl (  runoob_id int(11) NOT NULL auto_increment,  runoob_title varchar(100) NOT NULL default '',  runoob_author varchar(40) NOT NULL default '',  submission_date date default NULL,  PRIMARY KEY  (runoob_id),  UNIQUE KEY AUTHOR_INDEX (runoob_author)) TYPE=MyISAM;---- Dumping data for table `runoob_tbl`--INSERT INTO runoob_tbl        VALUES (1,'Learn PHP','John Poul','2007-05-24');INSERT INTO runoob_tbl        VALUES (2,'Learn MySQL','Abdul S','2007-05-24');INSERT INTO runoob_tbl        VALUES (3,'JAVA Tutorial','Sanjay','2007-05-06');

如果你需要導(dǎo)出整個數(shù)據(jù)庫的數(shù)據(jù),可以使用以下命令:

$ mysqldump -u root -p RUNOOB > database_dump.txtpassword ******

如果需要備份所有數(shù)據(jù)庫,可以使用以下命令:

$ mysqldump -u root -p --all-databases > database_dump.txtpassword ******

--all-databases 選項(xiàng)在 MySQL 3.23.12 及以后版本加入。

該方法可用于實(shí)現(xiàn)數(shù)據(jù)庫的備份策略。


將數(shù)據(jù)表及數(shù)據(jù)庫拷貝至其他主機(jī)

如果你需要將數(shù)據(jù)拷貝至其他的 MySQL 服務(wù)器上, 你可以在 mysqldump 命令中指定數(shù)據(jù)庫名及數(shù)據(jù)表。

在源主機(jī)上執(zhí)行以下命令,將數(shù)據(jù)備份至 dump.txt 文件中:

$ mysqldump -u root -p database_name table_name > dump.txtpassword *****

如果完整備份數(shù)據(jù)庫,則無需使用特定的表名稱。

如果你需要將備份的數(shù)據(jù)庫導(dǎo)入到MySQL服務(wù)器中,可以使用以下命令,使用以下命令你需要確認(rèn)數(shù)據(jù)庫已經(jīng)創(chuàng)建:

$ mysql -u root -p database_name < dump.txtpassword *****
你也可以使用以下命令將導(dǎo)出的數(shù)據(jù)直接導(dǎo)入到遠(yuǎn)程的服務(wù)器上,但請確保兩臺服務(wù)器是相通的,是可以相互訪問的:</p>$ mysqldump -u root -p database_name /       | mysql -h other-host.com database_name

以上命令中使用了管道來將導(dǎo)出的數(shù)據(jù)導(dǎo)入到指定的遠(yuǎn)程主機(jī)上。

MySQL 導(dǎo)入數(shù)據(jù)

MySQL中可以使用兩種簡單的方式來導(dǎo)入MySQL導(dǎo)出的數(shù)據(jù)。


使用 LOAD DATA 導(dǎo)入數(shù)據(jù)

MySQL 中提供了LOAD DATA INFILE語句來插入數(shù)據(jù)。 以下實(shí)例中將從當(dāng)前目錄中讀取文件 dump.txt ,將該文件中的數(shù)據(jù)插入到當(dāng)前數(shù)據(jù)庫的 mytbl 表中。

mysql> LOAD DATA LOCAL INFILE 'dump.txt' INTO TABLE mytbl;

 如果指定LOCAL關(guān)鍵詞,則表明從客戶主機(jī)上按路徑讀取文件。如果沒有指定,則文件在服務(wù)器上按路徑讀取文件。

你能明確地在LOAD DATA語句中指出列值的分隔符和行尾標(biāo)記,但是默認(rèn)標(biāo)記是定位符和換行符。

兩個命令的 FIELDS 和 LINES 子句的語法是一樣的。兩個子句都是可選的,但是如果兩個同時被指定,F(xiàn)IELDS 子句必須出現(xiàn)在 LINES 子句之前。

如果用戶指定一個 FIELDS 子句,它的子句 (TERMINATED BY、[OPTIONALLY] ENCLOSED BY 和 ESCAPED BY) 也是可選的,不過,用戶必須至少指定它們中的一個。

mysql> LOAD DATA LOCAL INFILE 'dump.txt' INTO TABLE mytbl  -> FIELDS TERMINATED BY ':'  -> LINES TERMINATED BY '/r/n';

LOAD DATA 默認(rèn)情況下是按照數(shù)據(jù)文件中列的順序插入數(shù)據(jù)的,如果數(shù)據(jù)文件中的列與插入表中的列不一致,則需要指定列的順序。

如,在數(shù)據(jù)文件中的列順序是 a,b,c,但在插入表的列順序?yàn)閎,c,a,則數(shù)據(jù)導(dǎo)入語法如下:

mysql> LOAD DATA LOCAL INFILE 'dump.txt'     -> INTO TABLE mytbl (b, c, a);

使用 mysqlimport 導(dǎo)入數(shù)據(jù)

mysqlimport客戶端提供了LOAD DATA INFILEQL語句的一個命令行接口。mysqlimport的大多數(shù)選項(xiàng)直接對應(yīng)LOAD DATA INFILE子句。

從文件 dump.txt 中將數(shù)據(jù)導(dǎo)入到 mytbl 數(shù)據(jù)表中, 可以使用以下命令:

$ mysqlimport -u root -p --local database_name dump.txtpassword *****

mysqlimport命令可以指定選項(xiàng)來設(shè)置指定格式,命令語句格式如下:

$ mysqlimport -u root -p --local --fields-terminated-by=":" /   --lines-terminated-by="/r/n"  database_name dump.txtpassword *****

mysqlimport 語句中使用 --columns 選項(xiàng)來設(shè)置列的順序:

$ mysqlimport -u root -p --local --columns=b,c,a /    database_name dump.txtpassword *****

mysqlimport的常用選項(xiàng)介紹

選項(xiàng)功能
-d or --delete新數(shù)據(jù)導(dǎo)入數(shù)據(jù)表中之前刪除數(shù)據(jù)數(shù)據(jù)表中的所有信息
-f or --force不管是否遇到錯誤,mysqlimport將強(qiáng)制繼續(xù)插入數(shù)據(jù)
-i or --ignoremysqlimport跳過或者忽略那些有相同唯一 關(guān)鍵字的行, 導(dǎo)入文件中的數(shù)據(jù)將被忽略。
-l or -lock-tables數(shù)據(jù)被插入之前鎖住表,這樣就防止了, 你在更新數(shù)據(jù)庫時,用戶的查詢和更新受到影響。
-r or -replace這個選項(xiàng)與-i選項(xiàng)的作用相反;此選項(xiàng)將替代 表中有相同唯一關(guān)鍵字的記錄。
--fields-enclosed- by= char指定文本文件中數(shù)據(jù)的記錄時以什么括起的, 很多情況下 數(shù)據(jù)以雙引號括起。 默認(rèn)的情況下數(shù)據(jù)是沒有被字符括起的。
--fields-terminated- by=char指定各個數(shù)據(jù)的值之間的分隔符,在句號分隔的文件中, 分隔符是句號。您可以用此選項(xiàng)指定數(shù)據(jù)之間的分隔符。 默認(rèn)的分隔符是跳格符(Tab)
--lines-terminated- by=str此選項(xiàng)指定文本文件中行與行之間數(shù)據(jù)的分隔字符串 或者字符。 默認(rèn)的情況下mysqlimport以newline為行分隔符。 您可以選擇用一個字符串來替代一個單個的字符: 一個新行或者一個回車。

mysqlimport命令常用的選項(xiàng)還有-v 顯示版本(version), -p 提示輸入密碼(password)等。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 长寿区| 黑河市| 和平县| 阳原县| 黎平县| 江永县| 屯留县| 昌江| 洞口县| 吉林市| 宁南县| 长岭县| 凤翔县| 张家川| 嘉定区| 来凤县| 北票市| 武夷山市| 图木舒克市| 沽源县| 乳源| 咸阳市| 南平市| 大庆市| 大连市| 宁城县| 涿鹿县| 青神县| 丰县| 新蔡县| 嘉义市| 大埔县| 廊坊市| 芦山县| 锦屏县| 西宁市| 金阳县| 诸暨市| 龙井市| 鸡东县| 甘洛县|