本文目錄一覽:
- 1、怎麼把excel一列導入mysql 數據庫
- 2、如何在命令行創建一個MySQL數據庫
- 3、如何將excel表格的數據導入到mysql數據中去
- 4、MySQL數據庫必會技能,虛擬列的用法
- 5、用java連接mysql實現對表中的數據查找,插入,修改等功能,
怎麼把excel一列導入mysql 數據庫
首先我們肯定有一個excel的文件,文件中有大量的數據,每一列代表着不同的字段。
我們首先建立一個數據庫,然後在庫中建立表,表的每個字段對應excel中的每一列。
?
一、假如excel中有四列數據,希望導入到數據庫中
mytable
中,對應的字段分別為field1,field2,field3,field4.
二、在excel表格中增加一列(?excel應該是e列),利用excel的公式自動生成sql語句(這個很重要,別寫錯了),具體方法
如下?:
1、增加一列(excel應該是e列,因為我們原有4列數據,分別為a\b\c\d列)
2、在第一行(這一行必須為有效數據行否則出錯)的e列,就是e1中輸入公式=concatenate(“insert
into
table
(field1,field2,field3,field4)
values
(‘”,a1,”‘,'”,b1,”‘,'”,c1,”‘,'”,d1,”‘);”)
3、此時e1已經生成如下的sql語句:
insert
into
mytable
(field1,field2,field3、field4)
values
(‘a1中
的數據’,’b1′,’c1′,’d1′);
4、將e1的公式複製到所有行的e列,(就是用鼠標點住e1單元格的右下角,一直拖拽下去,到最後一行數據)
5、此時e列已經生成了所有的sql語句
6、選中e列把e列數據複製到一個純文本文件中,命名為
例如:excel.txt
三、把excel.txt
放到數據庫中運行即可,可通過命令行導入
source
f:\excel.txt
如何在命令行創建一個MySQL數據庫
第一步:安裝MySQL客戶端
當然你得確保MySQL客戶端已經安裝完畢。如果沒有的話,可以按照下面的方法。
在Debian,Ubuntu 或者 Linux Mint上:
$ sudo apt-get install mysql-client
$ sudo apt-get install mysql
第二步:登陸到MySQL服務器
首先,你需要使用root用戶登陸進你的MySQL數據庫,如下:
$ mysql -u root -h -p
請注意:為了能登進遠程的MySQL服務器,你需要開啟服務器上的遠程訪問,如果你想調用同一主機上的MySQL服務器,你可以省略 “-h ” 參數
$ mysql -u root -p
你將需要輸入MySQL服務器的密碼,如果認證成功,MySQL提示將會出現。
第三步:創建一個MySQL數據庫
在MySQL提示中輸入命令之前,請記住所有的命令都是以分號結束的(否則將不會執行)。另外,考慮輸入命令的時候使用大些字母,輸入數據庫對象使用小寫字母。但那不是必須的,只是方便的閱讀。
現在,創建一個叫做xmodulo_DB的數據庫:
mysql CREATE DATABASE IF NOT EXISTS xmodulo_DB;
第四步:創建一個數據庫表
為了達到演示的目的,創建一個叫做posts_tbl的表,表裡會存儲關於文章的如下信息:
文章的標題
作者的名字
作者的姓
文章可用或者不可用
文章創建的日期
這個過程分兩步執行:
首先,選擇需要使用的數據庫:
mysql USE xmodulo_DB;
然後,在數據庫中創建新表:
mysql CREATE TABLE ‘posts_tbl’ (
‘post_id’ INT UNSIGNED NOT NULL AUTO_INCREMENT,
‘content’ TEXT,
‘author_FirstName’ VARCHAR(100) NOT NULL,
‘author_LastName’ VARCHAR(50) DEFAULT NULL ,
‘isEnabled’ TINYINT(1) NOT NULL DEFAULT 1,
‘date’ TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
PRIMARY KEY ( ‘post_id’ )
TYPE = MYISAM;
第五步:創建一個用戶,並授予權限
當涉及到訪問新創的數據庫和表的時候,創建一個新用戶是一個很好的主意。這樣做就可以讓用戶在沒有整個MySQL服務器權限的情況下,去訪問那個數據庫(而且只能是那個數據庫)
你可以創建新用戶,授予權限,並且使改變生效:
mysql GRANT ALL PRIVILEGES ON xmodulo_DB.* TO ‘new_user’@’%’ IDENTIFIED
BY ‘new_password’;
mysql FLUSH PRIVILEGES;
‘newuser’和’newpassword’分別指的是新的用戶名和他的密碼。這條信息將會被保存在mysql.user表中,而且密碼會被加密。
第六步:測試
先插入一個虛擬的記錄到posts_tbl表:
mysql USE xmodulo_DB;
mysql INSERT INTO posts_tbl (content, author_FirstName, author_Las
tName)
VALUES (‘Hi! This is some dummy text.’, ‘Gabriel’, ‘Canepa’);
然後查看posts_tbl表中的所有記錄:
mysql SELECT * FROM posts_tbl;
注意:MySQL會在先前定義的地方自動插入適當的默認值(比如,’isEnabled’和’date’)。
如何將excel表格的數據導入到mysql數據中去
下面這個經驗可以參考,具體還要看你想怎麼樣操作:
1、首先我們需要在mysql管理工具上面新建一個表,也可以用mysql命令創建,表建立完成之後,你需要將表中的字段名字告訴給填寫excel表的人員.
2、打開excel表,按照程序提供的字段填寫相應的數據.此時注意下面幾點:名字(我用紅色標示出來了)需要跟程序提供的一樣,其他的描述,表頭可以不寫都行.
3、我使用的mysql管理工具是Navicat for MySQL,打開工具,選擇表所在的數據庫,然後點擊數據庫名字,右鍵數據,出來下拉菜單選擇import wizard ,有漢化版本的更明確.彈出一個選擇界面,我們選擇excel file文件
4、點擊next(下一步),我們選擇我們對應的excel文件就行,然後再下面選在我們的文件內容在哪一個sheet中,也就是你的內容寫在excel什麼地方,這點需要注意,也是關鍵的地方,我的內容在sheet3中,所以我選擇sheet3
5、點擊next (此步驟也是關鍵步驟),需要注意2點: 1:filed name row 就是你的字段所在excel中的位置,也就是第幾行(簡單辦法,一般就是英文對應的那一列).2:first data row(從哪一行開始執行),數據從哪一行開始呢,我這裡選擇的是3,4.
7、點擊next 我們選擇 target table 目標對應的數據庫,選擇你要導入到哪個數據庫中表中.
8、如果到上面一步沒有問題的話,我們默認next到最後 就行了.然後打開表就能看到數據跟excel表中的一樣.
實在不行的話,就需要自己寫程序來實現這個導入的過程了,就是先從excel中逐條讀數據,再寫到mysql對應的表裡。
MySQL數據庫必會技能,虛擬列的用法
對於想要將自動生成的數據添加到表中的任何人來說, MySQL 虛擬列 是一個強大、易於使用和高級的功能。
INSERT 生成的列允許您在不使用and UPDATE 子句的情況下將自動生成的數據存儲在表中。 這個有用的特性自 5.7 版 起就已成為 MySQL 的一部分,它代表了在生成數據時觸發器的另一種方法。此外,生成的列可以幫助您更輕鬆、更高效地查詢。
虛擬列 列類似於普通列,但您不能手動更改其值。這是因為表達式定義了如何根據從同一行的其他列中讀取的其他值來生成生成列的值。因此,生成的列在表的域內工作,其定義不能涉及 JOIN 語句。
換句話說,您可以將生成的列視為一種視圖,但僅限於列。請注意,生成的列與 SQL 觸發器 不同,您只能在使用 CREATE TABLE or語句時定義它們,語法如下: ALTER TABLE
該 AS (generated_column_expression) 子句指定要添加或更新到表中的列是生成的列。定義 MySQL 將用於計算列值的 generation_expression 表達式,它不能引用另一個生成的列或除當前表的列之外的任何內容。另外,請注意生成表達式只能涉及不可變函數。例如,您不能在生成的列表達式定義中使用返回當前日期的函數,因為它是一個可變函數。
您還可以在關鍵字前面 AS 加上 GENERATED ALWAYS 關鍵字以使生成的列的性質更加明確,但這是可選的。然後,您可以指示生成列的類型是 VIRTUAL 還是 STORED 。您將在下面的章節中了解這兩種類型之間的區別。默認情況下,如果沒有在查詢中明確指定,MySQL 會將生成的列標記為 VIRTUAL .
現在讓我們看看生成的列語法在 CREATE TABLE 查詢中的作用:
在此示例中,該 full_name 列將自動存儲 first_name 和 last_name 列的連接。
如前所述,您可以將生成的列定義為 VIRTUAL 或 STORED。現在讓我們仔細看看這兩種類型。
MySQL 不存儲標記為 VIRTUAL 的 虛擬列 。這意味着 MySQL 在需要時動態評估其值。 BEFORE 這通常在觸發任何查詢後立即發生。換句話說,虛擬生成的列不佔用存儲空間。
MySQL 存儲任何生成的標記為 STORED 的列。這意味着每次插入或更新行時,MySQL 都會評估其值並將其存儲在磁盤上。換句話說,存儲列需要存儲空間,就好像它是普通列一樣。
現在讓我們進一步了解虛擬列和存儲生成列的優缺點。
優點
缺點
優點
缺點
採用生成的列有幾個原因,但以下三個是最重要的。
如您所見,您可以通過將四列與以下生成的列聚合來輕鬆生成此數據字段:
這將產生:
在這種情況下,生成的列使您能夠直接在數據庫級別標準化數據字段格式。此外,存儲生成的列避免了每次需要時都構造此字段的不可避免的開銷。
通常,您使用網站 URL 中的資源 ID 或REST API來檢索您需要的數據。但是公開暴露您的 ID 可能會帶來安全問題。當您發現自己使用自動增量 ID 時尤其如此,這很容易預測並使抓取或機器人攻擊更容易。
為避免這種情況,您可以考慮通過使用自動生成的、隨機的、更安全的公共 ID 來隱藏您的原始 ID。您可以通過對您的 ID 進行散列處理,使用虛擬生成的列來實現這一點,如下所示:
請注意,為避免生成已知的哈希值,您可以將您的 ID 與特殊關鍵字連接起來。 在此處了解有關 MySQL 加密和壓縮功能的更多信息。
過濾數據時,有些列比其他列更有用。此外,您通常必須更改存儲在列中的值的表示形式,以使過濾更簡單或更直觀。您可以定義一個有用的生成列來存儲以所需格式執行過濾所需的信息,而不是在每個過濾器查詢中執行此操作。
例如,您可以定義一個生成的列,以便更輕鬆地找到籃球隊中的球員,如下所示:
這樣的列將產生:
如前所述,您只能在表中使用生成的列。此外,它們只能涉及不可變函數,並且MySQL 生成它們的值以響應 INSERT or UPDATE 查詢。另一方面,觸發器是 MySQL 自動執行的存儲程序,每當與特定表關聯的 或 事件發生 INSERT 時 UPDATE 。 DELETE 換句話說,觸發器可以涉及多個表和所有 MySQL 函數。與生成的列相比,這使它們成為更完整的解決方案。同時,MySQL 觸發器本質上使用和定義更複雜,也比生成的列慢。
用java連接mysql實現對表中的數據查找,插入,修改等功能,
JDBC操作MySQL數據庫的步驟
1、準備MySQL數據庫驅動包:mysql-connector-java-5.0.8-bin.jar,一個項目中只能存在一個版本的驅動包
a、複製該驅動包,粘貼到項目中
b、選中項目里的驅動包,右鍵-Build Path-Add to Build Path
2、在類里寫代碼加載驅:決定連接哪種數據庫
a、Class.forName(“com.mysql.jdbc.Driver”);
b、必須進行異常處理:ClassNotFoundException
3、連接數據庫
a、Connection con=DriverManager.getConnection(“連接字符串”, “用戶名”, “密碼”);
b、連接字符串格式固定,不同數據庫,格式不同:jdbc:mysql://要連接的計算機名稱:端口號/要連接的數據庫名稱
c、必須進行異常處理:SQLException
4、拼寫要執行的sql語句,必須是可以在數據庫中執行的
5、創建執行sql語句的對象
a、Statement stmt=con.createStatement();
b、注意:Statement必須來自於java.sql包中
6、執行sql語句
a、執行insert、update和delete語句:int row=stmt.executeUpdate(sql);返回影響行數
b、執行查詢語句:ResultSet rs=stmt.executeQuery(sql);返回查詢結果
c、執行任意sql語句(DDL、DCL、DML和DQL等)
7、對執行結果進行處理
a、執行更新語句:判斷影響行數是否為0,0表示失敗,非0表示成功
b、對查詢結果進行處理:
1) 結果集需要先移動、後取值 :rs.next();int id=rs.getInt(1);
String name=rs.getString(“loginName”);
2) 結果集有多條時,需要循環操作:
while(rs.next()){ System.out.println(rs.getInt(1)+”\t”+rs.getString(2)+”\t”+rs.getString(3)+”\t”+rs.getString(4)+”\t”+rs.getInt(5));
}
3) 不確定是否有查詢結果時:if(rs.next()){說明有查詢結果}else{沒有查詢結果}
4) 使用了聚合函數,一定有查詢結果,查詢結果是一行一列:
rs.next();
int result=rs.getInt(1);
注意:結果集取值時取出的時查詢語句中包含的字段,與表中字段無關
9、關閉相關對象(先關閉結果集對象、在關閉執行語句對象,最後關閉連接對象)
例如:執行查詢語句
Scanner input=new Scanner(System.in);
System.out.print(“請輸入登錄名: “);
String name=input.next();
System.out.print(“請輸入密碼: “);
String pass=input.next();
try {
Class.forName(“com.mysql.jdbc.Driver”);
Connection con=DriverManager.getConnection(“jdbc:mysql://localhost:3306/userdb”, “root”, “root”);
String sql=”select COUNT(*) from UserInfo where loginName='”+name+”‘ and loginPass='”+pass+”‘”;
Statement stmt=con.createStatement();
ResultSet rs=stmt.executeQuery(sql);
rs.next();
int result=rs.getInt(1);
if(result!=0){
System.out.println(“登錄成功!”);
}else{
System.out.println(“用戶名或密碼錯誤,請重新登錄!”);
}
rs.close();
stmt.close();
con.close();
} catch (ClassNotFoundException e) {
System.out.println(“加載驅動錯誤:”+e.getMessage());
} catch (SQLException e) {
System.out.println(“數據庫操作錯誤:”+e.getMessage());
}
執行添加、修改和刪除語句
try {
//加載驅動
Class.forName(“com.mysql.jdbc.Driver”);
//連接數據庫
Connection con=DriverManager.getConnection(“jdbc:mysql://localhost:3306/userdb”, “root”, “root”);
//拼寫要執行的sql語句
String sql=”update UserInfo set loginPass=’111′ where loginName=’a'”;
//String sql=”insert UserInfo values(default,’test’,’test’)”;
//String sql=”delete from UserInfo where loginName=’a'”;
//創建執行語句對象
Statement stmt=con.createStatement();
//執行
int row=stmt.executeUpdate(sql);
//處理結果
if(row==0){
System.out.println(“修改失敗!”);
}else{
System.out.println(“修改成功!”);
}
//關閉
stmt.close();
con.close();
} catch (ClassNotFoundException e) {
System.out.println(“驅動加載錯誤:”+e.getMessage());
} catch (SQLException e) {
System.out.println(“數據庫操作錯誤:”+e.getMessage());
}
原創文章,作者:SZNW,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/143280.html