mysql資料庫插入數據
『壹』 Mysql 怎樣將一個資料庫中表 數據 插入到 另一個資料庫 表中
以mysql資料庫為例分情況一一說明:兩張表:insertTest和insertTest2,前者中有測試數據
create table insertTest(id int(4),name varchar(12));
insert into insertTest values(100,'liudehua');
insert into insertTest values(101,'zhourunfa');
insert into insertTest values(102,'zhouhuajian');
1.如果2張表的欄位一致,並且希望插入全部數據,可以用這種方法:
INSERT INTO 目標表 SELECT * FROM 來源表;
insert into insertTest select * from insertTest2;
2.如果只希望導入指定欄位,可以用這種方法:
INSERT INTO 目標表 (欄位1, 欄位2, ...) SELECT 欄位1, 欄位2, ... FROM 來源表;
注意欄位的順序必須一致。
insert into insertTest2(id) select id from insertTest2;
3.如果您需要只導入目標表中不存在的記錄,可以使用這種方法:
INSERT INTO 目標表
(欄位1, 欄位2, ...)
SELECT 欄位1, 欄位2, ...
FROM 來源表
WHERE not exists (select * from 目標表
where 目標表.比較欄位 = 來源表.比較欄位);
1>.插入多條記錄:
insert into insertTest2
(id,name)
select id,name
from insertTest
where not exists (select * from insertTest2
where insertTest2.id=insertTest.id);
2>.插入一條記錄:
insert into insertTest
(id, name)
SELECT 100, 'liudehua'
FROM al
WHERE not exists (select * from insertTest
where insertTest.id = 100);
使用 al 作表名,select 語句後面直接跟上要插入的欄位的值。
4.將查詢出來的數據並同其他變數一起插入新的數據表中
insert into t_supp_PurchPlan_s(PurPlanCode,itemcode,Speccode) select 'hello'as PurPlanCode,itemcode,speccode from b_item where id=8
直接將變數放到相應的位置即可(如上將固定的變數或動態變數放入即可)
『貳』 MySQL C API怎麼實現資料庫表的插入數據
MYSQL_OPT_READ_TIMEOUT 是 MySQL c api 客戶端中用來設置讀取超時時間的參數。在 MySQL 的官方文檔中,該參數的描述是這樣的:
MYSQL_OPT_READ_TIMEOUT (argument type: unsigned int *)The timeout in seconds for each attempt to read from the server. There are retries if necessary, so the total effective timeout value is three times the option value. You can set the value so that a lost connection can be detected earlier than the TCP/IPClose_Wait_Timeout value of 10 minutes.
也就是說在需要的時候,實際的超時時間會是設定值的 3 倍。但是實際測試後發現實際的超時時間和設置的超時時間一致。
而具體什麼時候發生三倍超時,在文檔中沒有找到。所以對 MySQL 5.7.20 的源碼進行了一些分析。
使用 GDB 調試代碼找了實際與 mysql server 通信的代碼,如下:
其中 vio_read() 函數中,使用 recv 和 poll 來讀取報文和做讀取超時。net_should_retry() 函數只有在發生 EINTR 時才會返回 true。從這段代碼來看是符合測試結果的,並沒有對讀取進行三次重試。只有在讀取操作被系統中斷打斷時才會重試,但是這個重試並沒有次數限制。
從上面代碼的分析可以看出,代碼的邏輯和文檔的描述不符。於是在一頓搜索後,找到了一個 MySQL 的 BUG(Bug #31163)。該 BUG 報告了在MySQL5.0 中,MySQL c api 讀取的實際超時時間是設置的三倍,與現有文檔描述相符。於是對 MySQL 5.0.96 的代碼又進行分析。
同樣使用 GDB 找到了通信部分的代碼。這次找到了重試三次的代碼,如下:
這個版本的 MySQL api 的讀寫超時是直接使用的 setsockopt 設置的。第一次循環,在 A 點發生了第一次超時(雖然注釋寫的非阻塞,但是客戶端的連接始終是阻塞模式的)。然後在 B 點將該 socket 設置為阻塞模式,C 點這里重置 retry 次數。由於設置了 alarm 第二次以後的循環會直接進入 D 點的這個分支,並且判斷循環次數。作為客戶端時net->retry_count 始終是 1,所以重試了兩次,共計進行了 3 次 vioread 後從 E 點退出函數。
由上面的分析可知,MySQL 文檔對於該參數的描述已經過時,現在的 MYSQL_OPT_READ_TIMEOUT 並不會出現三倍超時的問題。而 Bug #31163 中的處理結果也是將文檔中該參數的描述更新為實際讀取超時時間是設定時間的三倍。也許是 MySQL 的維護者們在後續版本更新時忘記更新文檔吧。
『叄』 向mysql資料庫的表中插入數據問題
可能是你的資料庫配置文件有問題,遇到這種問題的,檢測問題所在的地方通常可以這樣做:把資料庫的表改成一個簡單的資料庫表
寫個包,直接傳入正確合適的參數,如果沒有問題就證明不是你的資料庫連接問題!
『肆』 MySQL資料庫創建表結構和插入數據求助
use studyDBExam;
create table Student_info(
User_ID int primary key auto_increment,
Username varchar(50) ,
Password varchar(20),
Class_name varchar(50),
Student_name varchar(50),
Student_sex varchar(50),
Student_sex varchar(50),
Student_sex varchar(50),
Student_sex varchar(50)
)
『伍』 mysql資料庫怎麼創建數據表並添加數據
1、創建一個資料庫test2
代碼:mysql>createdatabasetest2;
截圖:
『陸』 怎樣用c語言給mysql資料庫插數據
無論什麼語言給什麼資料庫插入數據,用的都是
SQL語言
的insert
into語句。具體格式:
insert
into
表名(列名1,列名2,...,列名n)values('值1','值2',...,'值n');
『柒』 怎麼往mysql中寫入數據
1、首先打開MYSQL的管理工具,新建一個test表,並且在表中插入兩個欄位。
『捌』 想在mysql資料庫中的表中插入一列,怎麼做
傳統情況
我們先回顧一下,在沒有 "立刻加列" 功能時,加列操作是怎麼完成的。我們也藉此來熟悉一下本期的圖例:
擴展思考題:是否能設計其他的數據格式,取代instant標志位和"列數"欄位,使得 加列/刪列 操作都能 "立刻完成" ?(提示:考慮 加列- 刪列- 再加列 的情況)
使用限制
在了解原理之後,我們來看看"立刻加列"的使用限制,就很容易能理解其中的前兩項:
"立刻加列"的加列位置只能在表的最後,而不能加在其他列之間
在元數據中,只記錄了 數據行 應有多少列,而沒有記錄 這些列 應出現的位置。所以無法實現指定列的位置
"立刻加列"不能添加主鍵列
加列 不能涉及聚簇索引的變更,否則就變成了 "重建" 操作,不是 "立刻" 完成了
"立刻加列"不支持壓縮的表格式
按照 WL 的說法:"COMPRESSED is no need to supported"(沒必要支持不怎麼用的格式)
總結回顧
我們總結一下上面的討論:
"立刻加列" 之所以高效的原因是:
在執行 "立刻加列" 時,不變更數據行的結構
讀取 "舊" 數據時,"偽造"新增的列,使結果正確
寫入 "新" 數據時,使用了新的數據格式(增加了instant 標志位和 "列數" 欄位),以區分新舊數據
讀取 "新" 數據時,可以如實讀取數據
"立刻加列"的 "偽造" 手法,不能一直維持下去。當發生與 "立刻加列" 操作不兼容的 DDL時,表數據就會發生重建
回到之前遺留的兩個問題:
"立刻加列" 是如何工作的 ?
我們已經解答了這個問題
所謂 "立刻加列" 是否完全不影響業務,是否是真正的 "立刻" 完成 ?
可以看到:就算是 "立刻加列",也需要變更 數據字典,那麼 該上的鎖還是逃不掉的。也就是說 這里的 "立刻" 指的是 "不變更數據行的結構",而並非指 "零成本地完成任務"
『玖』 如何向Mysql資料庫的表中錄入數據
insert into tablename values(value1,value2,...) insert into tablename(fieldname1,fieldname2,...) values(value1,value2,...) insert into tablename(fieldname1,fieldname2) select fieldname1,fieldname2 from tablename1 以上基本上羅列了用insert插入數據的方法,當然你也可以用insert語句將幾行同時插入到一個表中.如下所示: 2.在mysql運行環境下,我們還可以用LOAD DATA 語句把文件裡面的數據讀取錄入到表裡面.一般來講,因為此文件是由伺服器在主機上直接讀取的.所以你必須具有file許可權且文件必須是完全可讀.當你版本夠新的話,你可以給出local,這樣由於你是從客戶機上讀取該文件並將內容傳送到伺服器,你就不需要file許可權. 如果你沒有給出local,則伺服器按如下方法對其進行定位: 1)如果你的filename為絕對路徑,則伺服器從根目錄開始查找該文件. 2)如果你的filename為相對路徑,則伺服器從資料庫的數據目錄中開始查找該文件. 如果你給出了local,則文件將按以下方式進行定位: 1)如果你的filename為絕對路徑,則客戶機從根目錄開始查找該文件. 2)如果你的filename為相對路徑,則客戶機從當前目錄開始查找該文件. 說了半天,也許你還不明白這具體的格式,看下面先: LOAD DATA [LOCAL] INFILE 'filename' into table tablename import_options [(fieldname_list)] import options的語法為:fieldsterminated by 'char' enclosed by 'char' escaped by 'char'linesterminated by 'string' 下面我們對其進行一些說明: 1)fields terminated by char 指定分隔列的字元.預設時假定列值由製表符分隔. 2)fields enclosed by char 指明列值應包括在指定的字元中.通常用引號.預設時,假定列值不包括在任何字元中. 3)fields escaped by char 表示用於轉義特殊字元的轉義符.預設時表示無轉義符 4)lindes escaped by string 指定結束輸入行的串(可以是多字元的).預設時假定由換行符終止行 需要注意的是轉義字元的使用. 如:\' 表示單引號,\" 表示雙引號 等等.另外還有一些選項這里沒有具體談到,如 ignore n lines 她可以控制文件的前n行不被讀入資料庫.詳細請看mysql中文參考. 說了上面這么多,給一行命令大傢具體體會一下: load data [local] infile "sample.txt" into table sample fields terminated by "," enclosed by "\"" 3.在系統命令行下你可以用mysqlimport實用程序,她將文本文件的內容讀取到已有表中(其實mysqlimport起的作用就是實現load data命令行的介面),調用完mysqlimport後她生成一個load data 語句.語法基本上和load data差不多: mysqlimport [options] sample_db filename 同樣,給條命令看一下吧:
『拾』 mysql資料庫中怎麼批量插入數據
常見的insert語句,向資料庫中,一條語句只能插入一條數據:
insert into persons
(id_p, lastname , firstName, city )
values(204,'haha' , 'deng' , 'shenzhen');
(如上,僅插入了一條記錄)
怎樣一次insert插入多條記錄呢?
使用示例:
insert into persons
(id_p, lastname , firstName, city )
values
(200,'haha' , 'deng' , 'shenzhen'),
(201,'haha2' , 'deng' , 'GD'),
(202,'haha3' , 'deng' , 'Beijing');
這樣就批量插入數據了, 遵循這樣的語法,就可以批量插入數據了。
執行成功,截圖:
據說,在程序開發中,一次插入多條數據,比逐次一條一條的插入數據,效率高很多
所以在程序開發的時候,使用此批量插入,也是比較不錯的。
此語句在MySQL 5, postgreSQL 9.3執行通過。