MySQL中insert語句的應用與優化教程。本站提示廣大學習愛好者:(MySQL中insert語句的應用與優化教程)文章只能為提供參考,不一定能成為您想要的結果。以下是MySQL中insert語句的應用與優化教程正文
MySQL 表中應用 INSERT INTO SQL語句來拔出數據。
你可以經由過程 mysql> 敕令提醒窗口中向數據表中拔出數據,或許經由過程PHP劇本來拔出數據。
語法
以下為向MySQL數據表拔出數據通用的 INSERT INTO SQL語法:
INSERT INTO table_name ( field1, field2,...fieldN ) VALUES ( value1, value2,...valueN );
假如數據是字符型,必需應用單引號或許雙引號,如:"value"。
經由過程敕令提醒窗口拔出數據
以下我們將應用 SQL INSERT INTO 語句向 MySQL 數據表 runoob_tbl 拔出數據
實例
以下實例中我們將想 runoob_tbl 表拔出三條數據:
root@host# mysql -u root -p password; Enter password:******* mysql> use RUNOOB; Database changed mysql> INSERT INTO runoob_tbl ->(runoob_title, runoob_author, submission_date) ->VALUES ->("Learn PHP", "John Poul", NOW()); Query OK, 1 row affected (0.01 sec) mysql> INSERT INTO runoob_tbl ->(runoob_title, runoob_author, submission_date) ->VALUES ->("Learn MySQL", "Abdul S", NOW()); Query OK, 1 row affected (0.01 sec) mysql> INSERT INTO runoob_tbl ->(runoob_title, runoob_author, submission_date) ->VALUES ->("JAVA Tutorial", "Sanjay", '2007-05-06'); Query OK, 1 row affected (0.01 sec) mysql>
留意: 應用箭頭標志(->)不是SQL語句的一部門,它僅僅表現一個新行,假如一條SQL語句太長,我們可以經由過程回車鍵來創立一個新行來編寫SQL語句,SQL語句的敕令停止符為分號(;)。
在以上實例中,我們並沒有供給 runoob_id 的數據,由於該字段我們在創立表的時刻曾經設置它為 AUTO_INCREMENT(主動增長) 屬性。 所以,該字段會主動遞增而不須要我們去設置。實例中 NOW() 是一個 MySQL 函數,該函數前往日期和時光。
應用PHP劇本拔出數據
你可使用PHP 的 mysql_query() 函數來履行 SQL INSERT INTO敕令來拔出數據。
該函數有兩個參數,在履行勝利時前往 TRUE,不然前往 FALSE。
語法
bool mysql_query( sql, connection );
參數:
sql:必須,劃定要發送的 SQL 查詢,留意、查詢字符串不該以分號停止。
connection:可選,劃定 SQL 銜接標識符,假如未劃定,則應用上一個翻開的銜接。
實例
以下實例中法式吸收用戶輸出的三個字段數據,並拔出數據表中:
<html> <head> <title>向 MySQL 數據庫添加數據</title> </head> <body> <?php if(isset($_POST['add'])) { $dbhost = 'localhost:3036'; $dbuser = 'root'; $dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) { die('Could not connect: ' . mysql_error()); } if(! get_magic_quotes_gpc() ) { $runoob_title = addslashes ($_POST['runoob_title']); $runoob_author = addslashes ($_POST['runoob_author']); } else { $runoob_title = $_POST['runoob_title']; $runoob_author = $_POST['runoob_author']; } $submission_date = $_POST['submission_date']; $sql = "INSERT INTO runoob_tbl ". "(runoob_title,runoob_author, submission_date) ". "VALUES ". "('$runoob_title','$runoob_author','$submission_date')"; mysql_select_db('RUNOOB'); $retval = mysql_query( $sql, $conn ); if(! $retval ) { die('Could not enter data: ' . mysql_error()); } echo "Entered data successfully\n"; mysql_close($conn); } else { ?> <form method="post" action="<?php $_PHP_SELF ?>"> <table width="600" border="0" cellspacing="1" cellpadding="2"> <tr> <td width="250">Tutorial Title</td> <td> <input name="runoob_title" type="text" id="runoob_title"> </td> </tr> <tr> <td width="250">Tutorial Author</td> <td> <input name="runoob_author" type="text" id="runoob_author"> </td> </tr> <tr> <td width="250">Submission Date [ yyyy-mm-dd ]</td> <td> <input name="submission_date" type="text" id="submission_date"> </td> </tr> <tr> <td width="250"> </td> <td> </td> </tr> <tr> <td width="250"> </td> <td> <input name="add" type="submit" id="add" value="Add Tutorial"> </td> </tr> </table> </form> <?php } ?> </body> </html>
在我們吸收用戶提交的數據時,為了數據的平安性我們須要應用 get_magic_quotes_gpc() 函數來斷定特別字符的本義能否曾經開啟。假如這個選項為off(未開啟),前往0,那末我們就必需挪用addslashes 這個函數來為字符串增長本義。
義。
你也能夠添加其他檢討數據的辦法,好比郵箱格局驗證,德律風號碼驗證,能否為整數驗證等。
優化 insert 機能
mysql 的 insert 語句語法
insert into `table`(`field1`,`field2`) values('value1','value2');
進步insert 機能的辦法
1.一條sql語句拔出多條數據
INSERT INTO `insert_table` (`uid`, `content`, `type`) VALUES ('userid_0', 'content_0', 0); INSERT INTO `insert_table` (`uid`, `content`, `type`) VALUES ('userid_1', 'content_1', 1);
可以寫成
INSERT INTO `insert_table` (`uid`, `content`, `type`) VALUES ('userid_0', 'content_0', 0), ('userid_1', 'content_1', 1);
2.應用事務
START TRANSACTION; INSERT INTO `insert_table` (`uid`, `content`, `type`) VALUES ('userid_0', 'content_0', 0); INSERT INTO `insert_table` (`uid`, `content`, `type`) VALUES ('userid_1', 'content_1', 1); ... COMMIT;
留意
1.sql語句長度無限制,歸並sql語句時要留意。長度限制可以經由過程max_allowed_packet設置裝備擺設項修正,默許為1M。
2.事務太年夜會影響履行效力,mysql有innodb_log_buffer_size設置裝備擺設項,跨越這個值會應用磁盤數據,影響履行效力。
關於事務的設置裝備擺設項解釋:
1.innodb_buffer_pool_size
如 果用Innodb,那末這是一個主要變量。絕對於MyISAM來講,Innodb關於buffer size更敏感。MySIAM能夠關於年夜數據量應用默許的key_buffer_size也還好,但Innodb在年夜數據量時用默許值就感到在爬了。 Innodb的緩沖池會緩存數據和索引,所以不須要給體系的緩存留空間,假如只用Innodb,可以把這個值設為內存的70%-80%。和 key_buffer雷同,假如數據量比擬小也不怎樣增長,那末不要把這個值設太高也能夠進步內存的應用率。
2.innodb_additional_pool_size
這個的後果不是很顯著,至多是當操作體系能公道分派內存時。但你能夠仍須要設成20M或更多一點以看Innodb會分派若干內存做其他用處。
3.innodb_log_file_size
關於寫許多特別是年夜數據量時異常主要。要留意,年夜的文件供給更高的機能,但數據庫恢復時會用更多的時光。我普通用64M-512M,詳細取決於辦事器的空間。
4.innodb_log_buffer_size
默許值關於多半中等寫操作和事務短的應用都是可以的。如 果常常做更新或許應用了許多blob數據,應當增年夜這個值。但太年夜了也是糟蹋內存,由於1秒鐘總會 flush(這個詞的中文怎樣說呢?)一次,所以不須要設到跨越1秒的需求。8M-16M普通應當夠了。小的應用可以設更小一點。
5.innodb_flush_log_at_trx_commit
埋怨Innodb比MyISAM慢 100倍?那末你年夜概是忘了調劑這個值。默許值1的意思是每次事務提交或事務外的指令都須要把日記寫入(flush)硬盤,這是很費時的。特殊是應用電 池供電緩存(Battery backed up cache)時。設成2關於許多應用,特殊是從MyISAM表轉過去的是可以的,它的意思是不寫入硬盤而是寫入體系緩存。日記依然會每秒flush到硬 盤,所以你普通不會喪失跨越1-2秒的更新。設成0會更快一點,但平安方面比擬差,即便MySQL掛了也能夠會喪失事務的數據。而值2只會在全部操作體系 掛了時才能夠丟數據。