本文目錄一覽:
- 1、怎麼把mysql文本導入資料庫中
- 2、要瘋了,怎樣用多線程向MYSQL資料庫中寫入數據
- 3、怎樣將數據存入mysql資料庫
- 4、誰能給寫一下怎麼在mysql資料庫中讀取和寫入數據
- 5、如何導入MySQL資料庫?
- 6、MySQL資料庫 寫入大量數據如何實現
怎麼把mysql文本導入資料庫中
首先我們需要在mysql管理工具上面新建一個表,也可以用mysql命令創建,表建立完成之後,你需要將表中的欄位名字告訴給填寫excel表的人員.
打開excel表,按照程序提供的欄位填寫相應的數據.此時注意下面幾點:名字(我用紅色標示出來了)需要跟程序提供的一樣,其他的描述,表頭可以不寫都行.
我使用的mysql管理工具是Navicat for MySQL,打開工具,選擇表所在的資料庫,然後點擊資料庫名字,右鍵數據,出來下拉菜單選擇import wizard ,有漢化版本的更明確.彈出一個選擇界面,我們選擇excel file文件
點擊next(下一步),我們選擇我們對應的excel文件就行,然後再下面選在我們的文件內容在哪一個sheet中,也就是你的內容寫在excel什麼地方,這點需要注意,也是關鍵的地方,我的內容在sheet3中,所以我選擇sheet3 ,如圖:
點擊next (此步驟也是關鍵步驟),需要注意2點: 1:filed name row 就是你的欄位所在excel中的位置,也就是第幾行(簡單辦法,一般就是英文對應的那一列).2:first data row(從哪一行開始執行),數據從哪一行開始呢,我這裡選擇的是3,4.
點擊next 我們選擇 target table 目標對應的資料庫,選擇你要導入到哪個資料庫中表中.
如果到上面一步沒有問題的話,我們默認next到最後 就行了.然後打開表就能看到數據跟excel表中的一樣.
要瘋了,怎樣用多線程向MYSQL資料庫中寫入數據
在MySQL 8.0 之前, 我們假設一下有一條爛SQL,
mysqlselect * from t1 order by rand() ;
以多個線程在跑,導致CPU被跑滿了,其他的請求只能被阻塞進不來。那這種情況怎麼辦?
大概有以下幾種解決辦法:
設置max_execution_time 來阻止太長的讀SQL。那可能存在的問題是會把所有長SQL都給KILL 掉。有些必須要執行很長時間的也會被誤殺。
自己寫個腳本檢測這類語句,比如order by rand(), 超過一定時間用Kill query thread_id 給殺掉。
那能不能不要殺掉而讓他正常運行,但是又不影響其他的請求呢?
那mysql 8.0 引入的資源組(resource group,後面簡寫微RG)可以基本上解決這類問題。
比如我可以用 RG 來在SQL層面給他限制在特定的一個CPU核上,這樣我就不管他,讓他繼續運行,如果有新的此類語句,讓他排隊好了。
為什麼說基本呢?目前只能綁定CPU資源,其他的暫時不行。
那我來演示下如何使用RG。
創建一個資源組user_ytt. 這裡解釋下各個參數的含義,
type = user 表示這是一個用戶態線程,也就是前台的請求線程。如果type=system,表示後台線程,用來限制mysql自己的線程,比如Innodb purge thread,innodb read thread等等。
vcpu 代表cpu的邏輯核數,這裡0-1代表前兩個核被綁定到這個RG。可以用lscpu,top等列出自己的CPU相關信息。
thread_priority 設置優先順序。user 級優先順序設置大於0。
mysqlmysql create resource group user_ytt type = user vcpu = 0-1 thread_priority=19 enable;Query OK, 0 rows affected (0.03 sec)
RG相關信息可以從 information_schema.resource_groups 系統表裡檢索。
mysqlmysql select * from information_schema.resource_groups;+———————+———————+————————+———-+—————–+| RESOURCE_GROUP_NAME | RESOURCE_GROUP_TYPE | RESOURCE_GROUP_ENABLED | VCPU_IDS | THREAD_PRIORITY |+———————+———————+————————+———-+—————–+| USR_default | USER | 1 | 0-3 | 0 || SYS_default | SYSTEM | 1 | 0-3 | 0 || user_ytt | USER | 1 | 0-1 | 19 |+———————+———————+————————+———-+—————–+3 rows in set (0.00 sec)
我們來給語句select guid from t1 group by left(guid,8) order by rand() 賦予RG user_ytt。
mysql show processlist;+—–+—————–+———–+——+———+——-+————————+———————————————————–+| Id | User | Host | db | Command | Time | State | Info |+—–+—————–+———–+——+———+——-+————————+———————————————————–+| 4 | event_scheduler | localhost | NULL | Daemon | 10179 | Waiting on empty queue | NULL || 240 | root | localhost | ytt | Query | 101 | Creating sort index | select guid from t1 group by left(guid,8) order by rand() || 245 | root | localhost | ytt | Query | 0 | starting | show processlist |+—–+—————–+———–+——+———+——-+————————+———————————————————–+3 rows in set (0.00 sec)
找到連接240對應的thread_id。
mysqlmysql select thread_id from performance_schema.threads where processlist_id = 240;+———–+| thread_id |+———–+| 278 |+———–+1 row in set (0.00 sec)
給這個線程278賦予RG user_ytt。沒報錯就算成功了。
mysqlmysql set resource group user_ytt for 278;Query OK, 0 rows affected (0.00 sec)
當然這個是在運維層面來做的,我們也可以在開發層面結合 MYSQL HINT 來單獨給這個語句賦予RG。比如:
mysqlmysql select /*+ resource_group(user_ytt) */guid from t1 group by left(guid,8) order by rand()….8388602 rows in set (4 min 46.09 sec)
RG的限制:
Linux 平台上需要開啟 CAPSYSNICE 特性。比如我機器上用systemd 給mysql 服務加上
systemctl edit mysql@80 [Service]AmbientCapabilities=CAP_SYS_NICE
mysql 線程池開啟後RG失效。
freebsd,solaris 平台thread_priority 失效。
目前只能綁定CPU,不能綁定其他資源。
怎樣將數據存入mysql資料庫
MySQL命令行導出資料庫:
1,進入MySQL目錄下的bin文件夾:cd
MySQL中到bin文件夾的目錄
如我輸入的命令行:cd
C:\Program
Files\MySQL\MySQL
Server
4.1\bin
(或者直接將windows的環境變數path中添加該目錄)
2,導出資料庫:mysqldump
-u
用戶名
-p
資料庫名
導出的文件名
如我輸入的命令行:mysqldump
-u
root
-p
news
news.sql
(輸入後會讓你輸入進入MySQL的密碼)
(如果導出單張表的話在資料庫名後面輸入表名即可)
3、會看到文件news.sql自動生成到bin文件下
命令行導入資料庫:
1,將要導入的.sql文件移至bin文件下,這樣的路徑比較方便
2,同上面導出的第1步
3,進入MySQL:mysql
-u
用戶名
-p
如我輸入的命令行:mysql
-u
root
-p
(輸入同樣後會讓你輸入MySQL的密碼)
4,在MySQL-Front中新建你要建的資料庫,這時是空資料庫,如新建一個名為news的目標資料庫
5,輸入:mysqluse
目標資料庫名
如我輸入的命令行:mysqluse
news;
6,導入文件:mysqlsource
導入的文件名;
如我輸入的命令行:mysqlsource
news.sql;
誰能給寫一下怎麼在mysql資料庫中讀取和寫入數據
$mysql_server_name=’localhost’; //改成自己的mysql資料庫伺服器
$mysql_username=’root’; //改成自己的mysql資料庫用戶名
$mysql_password=’123456′; //改成自己的mysql資料庫密碼
$mysql_database=’Mydb’; //改成自己的mysql資料庫名
$conn=mysql_connect($mysql_server_name,$mysql_username,$mysql_password) or die(“error connecting”) ; //連接資料庫
mysql_query(“set names ‘utf8′”); //資料庫輸出編碼 應該與你的資料庫編碼保持一致.南昌網站建設公司百恆網路PHP工程師建議用UTF-8 國際標準編碼.
mysql_select_db($mysql_database); //打開資料庫
$sql =”select * from news “; //SQL語句
$result = mysql_query($sql,$conn); //查詢
while($row = mysql_fetch_array($result)) //輸出到頁面html
{
echo “div style=\”height:24px; line-height:24px; font-weight:bold;\””; //排版代碼
echo $row[‘Topic’] . “br/”;
echo “/div”; //排版代碼
}
conn=mysql_connect($mysql_server_name,$mysql_username,$mysql_password); //連接資料庫
mysql_query(“set names ‘utf8′”); //資料庫輸出編碼
mysql_select_db($mysql_database); //打開資料庫
$sql = “insert into messageboard (Topic,Content,Enabled,Date) values (‘$Topic’,’$Content’,’1′,’2011-01-12′)”;
// 生成sql語句
mysql_query($sql); // 執行語句後插入表
mysql_close(); //關閉MySQL連接
如何導入MySQL資料庫?
1、打開電腦,在電腦桌面的開始界面中找到mysql,如圖所示。
2、雙擊打開mysql軟體,並輸入密碼,如圖所示。
3、如果sql文件的內容中有創建資料庫的語句,或者想將表存放在已有的資料庫,在這裡就不用創建資料庫。
4、輸入「show databases;」就能看到自己創建的資料庫,如圖所示。
5、輸入「use 資料庫名」,開始使用這個資料庫,如圖所示。
6、開始導入sql文件,輸入「source sql文件的路徑」(注意文件路徑要是複製來的,要將”\”全部換成「/」)。
7、最後輸入「show tables」,就會看到導入的數據了,如圖所示。
MySQL資料庫 寫入大量數據如何實現
//最快的方法 10000記錄 23MS
public static void insert() {
// 開時時間
Long begin = new Date().getTime();
// sql前綴
String prefix = “INSERT INTO tb_big_data (count, create_time, random) VALUES “;
try {
// 保存sql後綴
StringBuffer suffix = new StringBuffer();
// 設置事務為非自動提交
conn.setAutoCommit(false);
// Statement st = conn.createStatement();
// 比起st,pst會更好些
PreparedStatement pst = conn.prepareStatement(“”);
// 外層循環,總提交事務次數
for (int i = 1; i = 100; i++) {
// 第次提交步長
for (int j = 1; j = 10000; j++) {
// 構建sql後綴
suffix.append(“(” + j * i + “, SYSDATE(), ” + i * j
* Math.random() + “),”);
}
// 構建完整sql
String sql = prefix + suffix.substring(0, suffix.length() – 1);
// 添加執行sql
pst.addBatch(sql);
// 執行操作
pst.executeBatch();
// 提交事務
conn.commit();
// 清空上一次添加的數據
suffix = new StringBuffer();
}
// 頭等連接
pst.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
// 結束時間
Long end = new Date().getTime();
// 耗時
System.out.println(“cast : ” + (end – begin) / 1000 + ” ms”);
}
原創文章,作者:ZKGSC,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/329410.html