程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL中insert語句的應用與優化教程

MySQL中insert語句的應用與優化教程

編輯:MySQL綜合教程

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只會在全部操作體系 掛了時才能夠丟數據。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved