導(dǎo)出正式服務(wù)器的數(shù)據(jù)庫(kù)和測(cè)試服務(wù)器數(shù)據(jù)庫(kù),并按照指定格式命名。
成都創(chuàng)新互聯(lián)是一家專(zhuān)業(yè)提供玉溪企業(yè)網(wǎng)站建設(shè),專(zhuān)注與成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、HTML5建站、小程序制作等業(yè)務(wù)。10年已為玉溪眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專(zhuān)業(yè)網(wǎng)站制作公司優(yōu)惠進(jìn)行中。
打開(kāi)Beyond
Compare軟件,如圖,選擇文本比較,進(jìn)入到文本比較主界面之后
,如圖選擇要比較的sql文件,然后,軟件會(huì)呈現(xiàn)出如圖數(shù)據(jù)庫(kù)結(jié)構(gòu)的不同之處。
即使在比較出兩個(gè)數(shù)據(jù)庫(kù)的結(jié)構(gòu)不同之后,對(duì)于sql語(yǔ)句的小白來(lái)說(shuō),很難寫(xiě)出升級(jí)數(shù)據(jù)庫(kù)的升級(jí)腳本,下面我們將講解如何利用mysql
workbench來(lái)幫你寫(xiě)sql。
首先,在本地?cái)?shù)據(jù)庫(kù)創(chuàng)建test和release數(shù)據(jù)庫(kù),創(chuàng)建步驟如圖所示。然后,將第二步導(dǎo)出的數(shù)據(jù)庫(kù)分別導(dǎo)入到新建的數(shù)據(jù)庫(kù),接下來(lái)就可以對(duì)release數(shù)據(jù)庫(kù)動(dòng)手了。
下面以增加數(shù)據(jù)庫(kù)表的一個(gè)字段為例,講解sql語(yǔ)句的生成。由圖中的7個(gè)步驟,便可以得到對(duì)一個(gè)表增加一個(gè)字段的sql語(yǔ)句,對(duì)表字段的增刪改,對(duì)表內(nèi)容的增刪改操作,刪除表操作類(lèi)似可得。下面講如何得到新建一個(gè)表的sql語(yǔ)句。
如圖,便可得到創(chuàng)建表的語(yǔ)句。
上述的sql語(yǔ)句的集合便是數(shù)據(jù)庫(kù)生成腳本,腳本通常是在workbench里面編輯查看和執(zhí)行的,幾個(gè)基本按鈕的使用如圖。
執(zhí)行完上述sql腳本之后,正式服務(wù)器的數(shù)據(jù)庫(kù)和測(cè)試服務(wù)器的數(shù)據(jù)庫(kù)結(jié)構(gòu)除了主鍵自增值,host差異之外,其余內(nèi)容應(yīng)全部相同,如果不是,則調(diào)整腳本內(nèi)容,直至兩個(gè)數(shù)據(jù)庫(kù)的結(jié)構(gòu)相同為止。
此時(shí)的數(shù)據(jù)庫(kù)升級(jí)腳本仍為數(shù)據(jù)庫(kù)升級(jí)暫時(shí)腳本,臨時(shí)腳本需交由項(xiàng)目負(fù)責(zé)人審核檢查之后,按照:工程名+版本+時(shí)間+正式+數(shù)據(jù)庫(kù)升級(jí)腳本.sql保存,并上傳svn,用于新版本發(fā)布。
import java.sql.*;
import java.io.*;
public class Query
{
public static void main(String args[])
{
//定義數(shù)據(jù)庫(kù)參數(shù)
String driver="org.gjt.mm.mysql.Driver";
String URL="jdbc:mysql://localhost:3306/Data";
String user="root";
String pwd="weiweibuick";
//從命令行讀入的字符串
String rl;
//從命令行讀入姓名
String quer2;
String qpwd=null;
//初始化密碼
String tpwd1,tpwd2=null;
//從命令行讀入ID
int quer1;
//從命令行讀入選擇
int a;
//創(chuàng)建從鍵盤(pán)讀入和緩沖區(qū)
InputStreamReader isr=new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(isr);
try
{
1:使用SHOW語(yǔ)句找出在服務(wù)器上當(dāng)前存在什么數(shù)據(jù)庫(kù):
mysql SHOW DATABASES;
2:2、創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)MYSQLDATA
mysql CREATE DATABASE MYSQLDATA;
3:選擇你所創(chuàng)建的數(shù)據(jù)庫(kù)
mysql USE MYSQLDATA; (按回車(chē)鍵出現(xiàn)Database changed 時(shí)說(shuō)明操作成功!)
4:查看現(xiàn)在的數(shù)據(jù)庫(kù)中存在什么表
mysql SHOW TABLES;
5:創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)表
mysql CREATE TABLE MYTABLE (name VARCHAR(20), sex CHAR(1));
6:顯示表的結(jié)構(gòu):
mysql DESCRIBE MYTABLE;
7:往表中加入記錄
mysql insert into MYTABLE values (”hyq”,”M”);
8:用文本方式將數(shù)據(jù)裝入數(shù)據(jù)庫(kù)表中(例如D:/mysql.txt)
mysql LOAD DATA LOCAL INFILE “D:/mysql.txt” INTO TABLE MYTABLE;
9:導(dǎo)入.sql文件命令(例如D:/mysql.sql)
mysqluse database;
mysqlsource d:/mysql.sql;
10:刪除表
mysqldrop TABLE MYTABLE;
11:清空表
mysqldelete from MYTABLE;
12:更新表中數(shù)據(jù)
mysqlupdate MYTABLE set sex=”f” where name=’hyq’;
以下是無(wú)意中在網(wǎng)絡(luò)看到的使用MySql的管理心得,
在windows中MySql以服務(wù)形式存在,在使用前應(yīng)確保此服務(wù)已經(jīng)啟動(dòng),未啟動(dòng)可用net start mysql命令啟動(dòng)。而Linux中啟動(dòng)時(shí)可用“/etc/rc.d/init.d/mysqld start”命令,注意啟動(dòng)者應(yīng)具有管理員權(quán)限。
剛安裝好的MySql包含一個(gè)含空密碼的root帳戶(hù)和一個(gè)匿名帳戶(hù),這是很大的安全隱患,對(duì)于一些重要的應(yīng)用我們應(yīng)將安全性盡可能提高,在這里應(yīng)把匿名帳戶(hù)刪除、 root帳戶(hù)設(shè)置密碼,可用如下命令進(jìn)行:
use mysql;
delete from User where User=”";
update User set Password=PASSWORD(’newpassword’) where User=’root’;
如果要對(duì)用戶(hù)所用的登錄終端進(jìn)行限制,可以更新User表中相應(yīng)用戶(hù)的Host字段,在進(jìn)行了以上更改后應(yīng)重新啟動(dòng)數(shù)據(jù)庫(kù)服務(wù),此時(shí)登錄時(shí)可用如下類(lèi)似命令:
mysql -uroot -p;
mysql -uroot -pnewpassword;
mysql mydb -uroot -p;
mysql mydb -uroot -pnewpassword;
上面命令參數(shù)是常用參數(shù)的一部分,詳細(xì)情況可參考文檔。此處的mydb是要登錄的數(shù)據(jù)庫(kù)的名稱(chēng)。
在 進(jìn)行開(kāi)發(fā)和實(shí)際應(yīng)用中,用戶(hù)不應(yīng)該只用root用戶(hù)進(jìn)行連接數(shù)據(jù)庫(kù),雖然使用root用戶(hù)進(jìn)行測(cè)試時(shí)很方便,但會(huì)給系統(tǒng)帶來(lái)重大安全隱患,也不利于管理技 術(shù)的提高。我們給一個(gè)應(yīng)用中使用的用戶(hù)賦予最恰當(dāng)?shù)臄?shù)據(jù)庫(kù)權(quán)限。如一個(gè)只進(jìn)行數(shù)據(jù)插入的用戶(hù)不應(yīng)賦予其刪除數(shù)據(jù)的權(quán)限。MySql的用戶(hù)管理是通過(guò) User表來(lái)實(shí)現(xiàn)的,添加新用戶(hù)常用的方法有兩個(gè),一是在User表插入相應(yīng)的數(shù)據(jù)行,同時(shí)設(shè)置相應(yīng)的權(quán)限;二是通過(guò)GRANT命令創(chuàng)建具有某種權(quán)限的用戶(hù)。其中GRANT的常用用法如下:
grant all on mydb.* to NewUserName@HostName identified by “password” ;
grant usage on *.* to NewUserName@HostName identified by “password”;
grant select,insert,update on mydb.* to NewUserName@HostName identified by “password”;
grant update,delete on mydb.TestTable to NewUserName@HostName identified by “password”;
若 要給此用戶(hù)賦予他在相應(yīng)對(duì)象上的權(quán)限的管理能力,可在GRANT后面添加WITH GRANT OPTION選項(xiàng)。而對(duì)于用插入U(xiǎn)ser表添加的用戶(hù),Password字段應(yīng)用PASSWORD 函數(shù)進(jìn)行更新加密,以防不軌之人竊看密碼。對(duì)于那些已經(jīng)不用的用戶(hù)應(yīng)給予清除,權(quán)限過(guò)界的用戶(hù)應(yīng)及時(shí)回收權(quán)限,回收權(quán)限可以通過(guò)更新User表相應(yīng)字段, 也可以使用REVOKE操作。
下面給出本人從其它資料()獲得的對(duì)常用權(quán)限的解釋?zhuān)?/p>
全局管理權(quán)限:
FILE: 在MySQL服務(wù)器上讀寫(xiě)文件。
PROCESS: 顯示或殺死屬于其它用戶(hù)的服務(wù)線程。
RELOAD: 重載訪問(wèn)控制表,刷新日志等。
SHUTDOWN: 關(guān)閉MySQL服務(wù)。
數(shù)據(jù)庫(kù)/數(shù)據(jù)表/數(shù)據(jù)列權(quán)限:
ALTER: 修改已存在的數(shù)據(jù)表(例如增加/刪除列)和索引。
CREATE: 建立新的數(shù)據(jù)庫(kù)或數(shù)據(jù)表。
DELETE: 刪除表的記錄。
DROP: 刪除數(shù)據(jù)表或數(shù)據(jù)庫(kù)。
INDEX: 建立或刪除索引。
INSERT: 增加表的記錄。
SELECT: 顯示/搜索表的記錄。
UPDATE: 修改表中已存在的記錄。
特別的權(quán)限:
ALL: 允許做任何事(和root一樣)。
USAGE: 只允許登錄–其它什么也不允許做。
一、 簡(jiǎn)單查詢(xún)
簡(jiǎn)單的Transact-SQL查詢(xún)只包括選擇列表、FROM子句和WHERE子句。它們分別說(shuō)明所查詢(xún)列、查詢(xún)的
表或視圖、以及搜索條件等。
例如,下面的語(yǔ)句查詢(xún)testtable表中姓名為“張三”的nickname字段和email字段。
復(fù)制內(nèi)容到剪貼板
代碼:SELECT `nickname`,`email`FROM `testtable`WHERE `name`='張三'
(一) 選擇列表
選擇列表(select_list)指出所查詢(xún)列,它可以是一組列名列表、星號(hào)、表達(dá)式、變量(包括局部變量和全局變量)等構(gòu)成。
1、選擇所有列
例如,下面語(yǔ)句顯示testtable表中所有列的數(shù)據(jù):
復(fù)制內(nèi)容到剪貼板
代碼:SELECT * FROM testtable
2、選擇部分列并指定它們的顯示次序
查詢(xún)結(jié)果集合中數(shù)據(jù)的排列順序與選擇列表中所指定的列名排列順序相同。
例如:
復(fù)制內(nèi)容到剪貼板
代碼:SELECT nickname,email FROM testtable
3、更改列標(biāo)題
在選擇列表中,可重新指定列標(biāo)題。定義格式為:
列標(biāo)題=列名
列名 列標(biāo)題
如果指定的列標(biāo)題不是標(biāo)準(zhǔn)的標(biāo)識(shí)符格式時(shí),應(yīng)使用引號(hào)定界符,例如,下列語(yǔ)句使用漢字顯示列
標(biāo)題:
復(fù)制內(nèi)容到剪貼板
代碼:SELECT 昵稱(chēng)=nickname,電子郵件=email FROM testtable
4、刪除重復(fù)行
SELECT語(yǔ)句中使用ALL或DISTINCT選項(xiàng)來(lái)顯示表中符合條件的所有行或刪除其中重復(fù)的數(shù)據(jù)行,默認(rèn)
為ALL。使用DISTINCT選項(xiàng)時(shí),對(duì)于所有重復(fù)的數(shù)據(jù)行在SELECT返回的結(jié)果集合中只保留一行。
5、限制返回的行數(shù)
使用TOP n [PERCENT]選項(xiàng)限制返回的數(shù)據(jù)行數(shù),TOP n說(shuō)明返回n行,而TOP n PERCENT時(shí),說(shuō)明n是
表示一百分?jǐn)?shù),指定返回的行數(shù)等于總行數(shù)的百分之幾。
例如:
復(fù)制內(nèi)容到剪貼板
代碼:SELECT TOP 2 * FROM `testtable`
復(fù)制內(nèi)容到剪貼板
代碼:SELECT TOP 20 PERCENT * FROM `testtable`
(二) FROM子句
FROM子句指定SELECT語(yǔ)句查詢(xún)及與查詢(xún)相關(guān)的表或視圖。在FROM子句中最多可指定256個(gè)表或視圖,
它們之間用逗號(hào)分隔。
在FROM子句同時(shí)指定多個(gè)表或視圖時(shí),如果選擇列表中存在同名列,這時(shí)應(yīng)使用對(duì)象名限定這些列
所屬的表或視圖。例如在usertable和citytable表中同時(shí)存在cityid列,在查詢(xún)兩個(gè)表中的cityid時(shí)應(yīng)
使用下面語(yǔ)句格式加以限定:
復(fù)制內(nèi)容到剪貼板
代碼:SELECT `username`,citytable.cityid
FROM `usertable`,`citytable`
WHERE usertable.cityid=citytable.cityid在FROM子句中可用以下兩種格式為表或視圖指定別名:
復(fù)制內(nèi)容到剪貼板
代碼:表名 as 別名
表名 別名例如上面語(yǔ)句可用表的別名格式表示為:
復(fù)制內(nèi)容到剪貼板
代碼:SELECT `username`,b.cityid
FROM usertable a,citytable b
WHERE a.cityid=b.cityidSELECT不僅能從表或視圖中檢索數(shù)據(jù),它還能夠從其它查詢(xún)語(yǔ)句所返回的結(jié)果集合中查詢(xún)數(shù)據(jù)。
例如:
復(fù)制內(nèi)容到剪貼板
代碼:SELECT a.au_fname+a.au_lname
FROM authors a,titleauthor ta
(SELECT `title_id`,`title`
FROM `titles`
WHERE ` ytd_sales`10000
) AS t
WHERE a.au_id=ta.au_id
AND ta.title_id=t.title_id此例中,將SELECT返回的結(jié)果集合給予一別名t,然后再?gòu)闹袡z索數(shù)據(jù)。
(三) 使用WHERE子句設(shè)置查詢(xún)條件
WHERE子句設(shè)置查詢(xún)條件,過(guò)濾掉不需要的數(shù)據(jù)行。例如下面語(yǔ)句查詢(xún)年齡大于20的數(shù)據(jù):
復(fù)制內(nèi)容到剪貼板
代碼:SELECT * FROM usertable WHERE age20 WHERE子句可包括各種條件運(yùn)算符:
比較運(yùn)算符(大小比較):、=、=、、!、!=10 AND age復(fù)制內(nèi)容到剪貼板
代碼:SELECT * FROM `usertable` ORDER BY `age` DESC,`userid` ASC另外,可以根據(jù)表達(dá)式進(jìn)行排序。
二、 聯(lián)合查詢(xún)
UNION運(yùn)算符可以將兩個(gè)或兩個(gè)以上上SELECT語(yǔ)句的查詢(xún)結(jié)果集合合并成一個(gè)結(jié)果集合顯示,即執(zhí)行聯(lián)
合查詢(xún)。
UNION的語(yǔ)法格式為:
復(fù)制內(nèi)容到剪貼板
代碼:select_statement
UNION [ALL] selectstatement
[UNION [ALL] selectstatement][…n]其中selectstatement為待聯(lián)合的SELECT查詢(xún)語(yǔ)句。
ALL選項(xiàng)表示將所有行合并到結(jié)果集合中。不指定該項(xiàng)時(shí),被聯(lián)合查詢(xún)結(jié)果集合中的重復(fù)行將只保留一行。
聯(lián)合查詢(xún)時(shí),查詢(xún)結(jié)果的列標(biāo)題為第一個(gè)查詢(xún)語(yǔ)句的列標(biāo)題。因此,要定義列標(biāo)題必須在第一個(gè)查詢(xún)語(yǔ)
句中定義。要對(duì)聯(lián)合查詢(xún)結(jié)果排序時(shí),也必須使用第一查詢(xún)語(yǔ)句中的列名、列標(biāo)題或者列序號(hào)。
在使用UNION 運(yùn)算符時(shí),應(yīng)保證每個(gè)聯(lián)合查詢(xún)語(yǔ)句的選擇列表中有相同數(shù)量的表達(dá)式,并且每個(gè)查詢(xún)選
擇表達(dá)式應(yīng)具有相同的數(shù)據(jù)類(lèi)型,或是可以自動(dòng)將它們轉(zhuǎn)換為相同的數(shù)據(jù)類(lèi)型。在自動(dòng)轉(zhuǎn)換時(shí),對(duì)于數(shù)值類(lèi)
型,系統(tǒng)將低精度的數(shù)據(jù)類(lèi)型轉(zhuǎn)換為高精度的數(shù)據(jù)類(lèi)型。
在包括多個(gè)查詢(xún)的UNION語(yǔ)句中,其執(zhí)行順序是自左至右,使用括號(hào)可以改變這一執(zhí)行順序。例如:
查詢(xún)1 UNION (查詢(xún)2 UNION 查詢(xún)3)
三、連接查詢(xún)
通過(guò)連接運(yùn)算符可以實(shí)現(xiàn)多個(gè)表查詢(xún)。連接是關(guān)系數(shù)據(jù)庫(kù)模型的主要特點(diǎn),也是它區(qū)別于其它類(lèi)型數(shù)據(jù)庫(kù)管理系統(tǒng)的一個(gè)標(biāo)志。
在關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)中,表建立時(shí)各數(shù)據(jù)之間的關(guān)系不必確定,常把一個(gè)實(shí)體的所有信息存放在
一個(gè)表中。當(dāng)檢索數(shù)據(jù)時(shí),通過(guò)連接操作查詢(xún)出存放在多個(gè)表中的不同實(shí)體的信息。連接操作給用戶(hù)帶
來(lái)很大的靈活性,他們可以在任何時(shí)候增加新的數(shù)據(jù)類(lèi)型。為不同實(shí)體創(chuàng)建新的表,爾后通過(guò)連接進(jìn)行
查詢(xún)。
連接可以在SELECT 語(yǔ)句的FROM子句或WHERE子句中建立,似是而非在FROM子句中指出連接時(shí)有助于
將連接操作與WHERE子句中的搜索條件區(qū)分開(kāi)來(lái)。所以,在Transact-SQL中推薦使用這種方法。
SQL-92標(biāo)準(zhǔn)所定義的FROM子句的連接語(yǔ)法格式為:
代碼:FROM join_table join_type join_table [ON (join_condition)]其中join_table指出參與連接操作的表名,連接可以對(duì)同一個(gè)表操作,也可以對(duì)多表操作,對(duì)同一個(gè)表操作的連接又稱(chēng)做自連接。
join_type 指出連接類(lèi)型,可分為三種:內(nèi)連接、外連接和交叉連接。
內(nèi)連接(INNER JOIN)使用比較運(yùn)算符進(jìn)行表間某(些)列數(shù)據(jù)的比較操作,并列出這些表中與連接條件相匹配的數(shù)據(jù)行。根據(jù)所使用的比較方式不同,內(nèi)連接又分為等值連接、自然連接和不等連接三種。
外連接分為左外連接(LEFT OUTER JOIN或LEFT JOIN)、右外連接(RIGHT OUTER JOIN或RIGHT JOIN)
和全外連接(FULL OUTER JOIN或FULL JOIN)三種。與內(nèi)連接不同的是,外連接不只列出與連接條件相匹配的行,而是列出左表(左外連接時(shí))、右表(右外連接時(shí))或兩個(gè)表(全外連接時(shí))中所有符合搜索條件的數(shù)據(jù)行。
交叉連接(CROSS JOIN)沒(méi)有WHERE 子句,它返回連接表中所有數(shù)據(jù)行的笛卡爾積,其結(jié)果集合中的數(shù)據(jù)行數(shù)等于第一個(gè)表中符合查詢(xún)條件的數(shù)據(jù)行數(shù)乘以第二個(gè)表中符合查詢(xún)條件的數(shù)據(jù)行數(shù)。
連接操作中的ON (join_condition) 子句指出連接條件,它由被連接表中的列和比較運(yùn)算符、邏輯運(yùn)算符等構(gòu)成。
無(wú)論哪種連接都不能對(duì)text、ntext和image數(shù)據(jù)類(lèi)型列進(jìn)行直接連接,但可以對(duì)這三種列進(jìn)行間接連接。例如:
代碼:SELECT p1.pub_id,p2.pub_id,p1.pr_info
FROM pub_info AS p1 INNER JOIN pub_info AS p2
ON DATALENGTH(p1.pr_info)=DATALENGTH(p2.pr_info)(一)內(nèi)連接
內(nèi)連接查詢(xún)操作列出與連接條件匹配的數(shù)據(jù)行,它使用比較運(yùn)算符比較被連接列的列值。
內(nèi)連接分三種:
1、等值連接:在連接條件中使用等于號(hào)(=)運(yùn)算符比較被連接列的列值,其查詢(xún)結(jié)果中列出被連接表中的所有列,包括其中的重復(fù)列。
2、不等連接: 在連接條件使用除等于運(yùn)算符以外的其它比較運(yùn)算符比較被連接的列的列值。這些運(yùn)算符包括、=、、!。
3、自然連接:在連接條件中使用等于(=)運(yùn)算符比較被連接列的列值,但它使用選擇列表指出查詢(xún)結(jié)果集合中所包括的列,并刪除連接表中的重復(fù)列。
例,下面使用等值連接列出authors和publishers表中位于同一城市的作者和出版社:
代碼:SELECT *
FROM authors AS a INNER JOIN publishers AS p
ON a.city=p.city又如使用自然連接,在選擇列表中刪除authors 和publishers 表中重復(fù)列(city和state):
復(fù)制內(nèi)容到剪貼板
代碼:SELECT a.*,p.pub_id,p.pub_name,p.country
FROM authors AS a INNER JOIN publishers AS p
ON a.city=p.city
(二)外連接內(nèi)連接時(shí),返回查詢(xún)結(jié)果集合中的僅是符合查詢(xún)條件( WHERE 搜索條件或 HAVING 條件)和連接條件
的行。而采用外連接時(shí),它返回到查詢(xún)結(jié)果集合中的不僅包含符合連接條件的行,而且還包括左表(左外連接時(shí))、右表(右外連接時(shí))或兩個(gè)邊接表(全外連接)中的所有數(shù)據(jù)行。
如下面使用左外連接將論壇內(nèi)容和作者信息連接起來(lái):
代碼:SELECT a.*,b.* FROM `luntan` LEFT JOIN usertable as b
ON a.username=b.username下面使用全外連接將city表中的所有作者以及user表中的所有作者,以及他們所在的城市:
代碼:SELECT a.*,b.*
FROM city as a FULL OUTER JOIN user as b
ON a.username=b.username
(三)交叉連接
交叉連接不帶WHERE 子句,它返回被連接的兩個(gè)表所有數(shù)據(jù)行的笛卡爾積,返回到結(jié)果集合中的數(shù)
據(jù)行數(shù)等于第一個(gè)表中符合查詢(xún)條件的數(shù)據(jù)行數(shù)乘以第二個(gè)表中符合查詢(xún)條件的數(shù)據(jù)行數(shù)。
例,titles表中有6類(lèi)圖書(shū),而publishers表中有8家出版社,則下列交叉連接檢索到的記錄數(shù)將等
于6*8=48行。
代碼:SELECT `type`,`pub_name`
FROM `titles` CROSS JOIN `publishers`
ORDER BY `type`