仍是這個好用java
Oracle | mysql | |
對比版本 | Personal Oracle7 Release 7.3.4.0.0 | mysql 3.23.58-nt |
啓動畫面 (點擊放大) |
![]() |
![]() |
默認安裝目錄 | C:ORAWIN95 | F:MySQL |
各類實用程序所在目錄 | C:ORAWIN95BIN | F:MySQLBIN |
控制檯工具 | SVRMGR.EXE SVRMGR23.EXE |
mysqladmin.exe |
數據庫啓動程序 | 0start73.exe screen | mysqld-shareware.exe |
關閉數據庫命令 | ostop73.exe | mysqladmin.exe -u root shutdown |
客戶程序 | SQL*Plus | mysql |
啓動命令 | c:orawin95binsqlplus.exe | F:MySQLbinmysql.exe |
帶用戶啓動方式 (直接連庫方式) |
c:orawin95binsqlplus.exe system/manager@TNS | F:MySQLbinmysql.exe test F:MySQLbinmysql.exe -u root test |
安裝後系統默認用戶(庫) | sys system scott |
mysql test |
顯示全部用戶(庫) | SQL >select * from all_users; | F:MySQLbin>mysqlshow F:MySQLbin>mysqlshow --status mysql> show databases; |
退出命令 | SQL> exit SQL> quit |
mysql> exit mysql> quit |
改變鏈接用戶(庫) | SQL> conn 用戶名/密碼@主機字符串 | mysql> use 庫名 |
查詢當前全部的表 | SQL> select * from tab; SQL> select * from cat; |
mysql> show tables; F:MySQLbin>mysqlshow 庫名 |
顯示當前鏈接用戶(庫) | SQL> show user | mysql> connect |
查看幫助 | SQL> ? | mysql> help |
顯示錶結構 | SQL> desc 表名 SQL> describe 表名 |
mysql> desc 表名; mysql> describe 表名; mysql> show columns from 表名; F:MySQLbin>mysqlshow 庫名 表名 |
日期函數 | SQL> select sysdate from dual; | mysql> select now(); mysql> select sysdate(); mysql> select curdate(); mysql> select current_date; mysql> select curtime(); mysql> select current_time; |
日期格式化 | SQL> select to_char(sysdate,'yyyy-mm-dd') from dual; SQL> select to_char(sysdate,'hh24-mi-ss') from dual; |
mysql> select date_format(now(),'%Y-%m-%d'); mysql> select time_format(now(),'%H-%i-%S'); |
日期函數 (增長一個月) |
SQL> select to_char(add_months(to_date('20000101','yyyymmdd'),1),'yyyy-mm-dd') from dual; 結果:2000-02-01 SQL> select to_char(add_months(to_date('20000101','yyyymmdd'),5),'yyyy-mm-dd') from dual; 結果:2000-06-01 |
mysql> select date_add('2000-01-01',interval 1 month); 結果:2000-02-01 mysql> select date_add('2000-01-01',interval 5 month); 結果:2000-06-01 |
別名 | SQL> select 1 a from dual; | mysql> select 1 as a; |
字符串截取函數 | SQL> select substr('abcdefg',1,5) from dual; SQL> select substrb('abcdefg',1,5) from dual; 結果:abcde |
mysql> select substring('abcdefg',2,3); 結果:bcd mysql> select mid('abcdefg',2,3); 結果:bcd mysql> select substring('abcdefg',2); 結果:bcdefg mysql> select substring('abcdefg' from 2); 結果:bcdefg 另有SUBSTRING_INDEX(str,delim,count)函數 返回從字符串str的第count個出現的分隔符delim以後的子串。 若是count是正數,返回最後的分隔符到左邊(從左邊數) 的全部字符。 若是count是負數,返回最後的分隔符到右邊的全部字符(從右邊數)。 |
執行外部腳本命令 | SQL >@a.sql | 1:mysql> source a.sql 2:F:MySQLbin>mysql 3:F:MySQLbin>mysql 庫名 |
導入、導出工具 | exp.exe exp73.exe imp.exe imp73.exe |
mysqldump.exe mysqlimport.exe |
改表名 | SQL> rename a to b; | mysql> alter table a rename b; |
執行命令 | ;<回車> / r run |
;<回車> go ego |
distinct用法 | SQL> select distinct 列1 from 表1; SQL> select distinct 列1,列2 from 表1; |
mysql> select distinct 列1 from 表1; mysql> select distinct 列1,列2 from 表1; |
註釋 | -- /*與*/ |
# -- /*與*/ |
看成計算器 | SQL> select 1+1 from dual; | mysql> select 1+1; |
限制返回記錄條數 | SQL> select * from 表名 where rownum<5; | mysql> select * from 表名 limit 5; |
新建用戶(庫) | SQL> create user 用戶名 identified by 密碼; | mysql> create database 庫名; |
刪用戶(庫) | SQL> drop user 用戶名; | mysql> drop database 庫名; |
外鏈接 | 使用(+) | 使用left join |
查詢索引 | SQL> select index_name,table_name from user_indexes; | mysql> show index from 表名 [FROM 庫名]; |
通配符 | 「%」 | 「%」和「_」 |
SQL語法 | SELECT selection_list 選擇哪些列 FROM table_list 從何處選擇行 WHERE primary_constraint 行必須知足什麼條件 GROUP BY grouping_columns 怎樣對結果分組 HAVING secondary_constraint 行必須知足的第二條件 ORDER BY sorting_columns 怎樣對結果排序 |
SELECT selection_list 選擇哪些列 FROM table_list 從何處選擇行 WHERE primary_constraint 行必須知足什麼條件 GROUP BY grouping_columns 怎樣對結果分組 HAVING secondary_constraint 行必須知足的第二條件 ORDER BY sorting_columns 怎樣對結果排序 LIMIT count 結果限定 |
——————————————————————————————————————————————————mysql
詳細版本sql
1、ORACLE的啓動和關閉數據庫
————————————————————————————————————————————————————————————————————————————————服務器
咱們常常會遇到須要表複製的狀況,如將一個table1的數據的部分字段複製到table2中,或者將整個table1複製到table2中,這時候咱們就要使用SELECT INTO 和 INSERT INTO SELECT 表複製語句了。session
1.INSERT INTO SELECT語句oracle
語句形式爲:Insert into Table2(field1,field2,...) select value1,value2,... from Table1編輯器
注意:(1)要求目標表Table2必須存在,而且字段field,field2...也必須存在ide
(2)注意Table2的主鍵約束,若是Table2有主鍵並且不爲空,則 field1, field2...中必須包括主鍵函數
(3)注意語法,不要加values,和插入一條數據的sql混了,不要寫成:
Insert into Table2(field1,field2,...) values (select value1,value2,... from Table1)
因爲目標表Table2已經存在,因此咱們除了插入源表Table1的字段外,還能夠插入常量。示例以下:
+ expand sourceview plaincopy to clipboardprint
--1.建立測試表
create TABLE Table1
(
a varchar(10),
b varchar(10),
c varchar(10)
)
create TABLE Table2
(
a varchar(10),
c varchar(10),
d int
)
--2.建立測試數據
Insert into Table1 values('趙','asds','90')
Insert into Table1 values('錢','asds','100')
Insert into Table1 values('孫','asds','80')
Insert into Table1 values('李','asds',null)
select * from Table2
--3.INSERT INTO SELECT語句複製表數據
Insert into Table2(a, c, d) select a,c,5 from Table1
--4.顯示更新後的結果
select * from Table2
--5.刪除測試表
drop TABLE Table1
drop TABLE Table2
2.SELECT INTO FROM語句
語句形式爲:SELECT vale1, value2 into Table2 from Table1
要求目標表Table2不存在,由於在插入時會自動建立表Table2,並將Table1中指定字段數據複製到Table2中。示例以下:
view plaincopy to clipboardprint?
--1.建立測試表
create TABLE Table1
(
a varchar(10),
b varchar(10),
c varchar(10)
)
--2.建立測試數據
Insert into Table1 values('趙','asds','90')
Insert into Table1 values('錢','asds','100')
Insert into Table1 values('孫','asds','80')
Insert into Table1 values('李','asds',null)
--3.SELECT INTO FROM語句建立表Table2並複製數據
select a,c INTO Table2 from Table1
--4.顯示更新後的結果
select * from Table2
--5.刪除測試表
drop TABLE Table1
drop TABLE Table2
注意:若是在sql/plus或者PL/SQL執行這條語句,會報"ORA-00905:缺失關鍵字"錯誤,緣由是PL/Sql與T-SQL的區別。
T-SQL中該句正常,但PL/SQL中解釋是:
select..into is part of PL/SQL language which means you have to use it inside a PL/SQL block. You can not use it in a SQL statement outside of PL/SQL.
即不能單獨做爲一條sql語句執行,通常在PL/SQL程序塊(block)中使用。
若是想在PL/SQL中實現該功能,可以使用Create table newTable as select * from ...:
如: create table NewTable as select * from ATable;
NewTable 除了沒有鍵,其餘的和ATable同樣
---------SQL SELECT INTO語法介紹
SQL SELECT INTO 語句可用於建立表的備份復件。
SELECT INTO 語句
SELECT INTO 語句從一個表中選取數據,而後把數據插入另外一個表中。
SELECT INTO 語句經常使用於建立表的備份復件或者用於對記錄進行存檔。
SQL SELECT INTO 語法
您能夠把全部的列插入新表:
SELECT * INTO new_table_name [IN externaldatabase] FROM old_tablename
或者只把但願的列插入新表:
SELECT column_name(s) INTO new_table_name [IN externaldatabase] FROM old_tablename
SQL SELECT INTO 實例 - 製做備份復件
下面的例子會製做 "Persons" 表的備份復件:
SELECT * INTO Persons_backup FROM Persons
IN 子句可用於向另外一個數據庫中拷貝表:
SELECT * INTO Persons IN 'Backup.mdb' FROM Persons
若是咱們但願拷貝某些域,能夠在 SELECT 語句後列出這些域:
SELECT LastName,FirstName
INTO Persons_backup
FROM Persons
SQL SELECT INTO 實例 - 帶有 WHERE 子句
咱們也能夠添加 WHERE 子句。
下面的例子經過從 "Persons" 表中提取居住在 "Beijing" 的人的信息,建立了一個帶有兩個列的名爲 "Persons_backup" 的表:
SELECT LastName,Firstname INTO Persons_backup FROM Persons WHERE City='Beijing'
SQL SELECT INTO 實例 - 被鏈接的表
從一個以上的表中選取數據也是能夠作到的。
下面的例子會建立一個名爲 "Persons_Order_Backup" 的新表,其中包含了從 Persons 和 Orders 兩個表中取得的信息:
SELECT Persons.LastName,Orders.OrderNo
INTO Persons_Order_Backup
FROM Persons
INNER JOIN Orders
ON Persons.Id_P=Orders.Id_P
————————————————————————————————————————————————————————————————————
若是sql語句中有''(單引號或者雙引號)括的字符串,則須要同表中嚴格一致,否則會顯示「找不到行」這個錯誤。
alter語句的用法
alter語句的用法
須要修改結構的,就用到alter語句,方法以下:
ALTER TABLE語句用於修改已經存在的表的設計。
語法:ALTER TABLE table ADD COLUMN field type[(size)] [NOT NULL] [CONSTRAINT index]
ALTER TABLE table ADD CONSTRAINT multifieldindex
ALTER TABLE table DROP COLUMN field
ALTER TABLE table DROP CONSTRAINT indexname
說明:table參數用於指定要修改的表的名稱。
ADD COLUMN爲SQL的保留字,使用它將向表中添加字段。
ADD CONSTRAINT爲SQL的保留字,使用它將向表中添加索引。
DROP COLUMN爲SQL的保留字,使用它將向表中刪除字段。
DROP CONSTRAINT爲SQL的保留字,使用它將向表中刪除索引。
field指定要添加或刪除的字段的名稱。
type參數指定新建字段的數據類型。
size參數用於指定文本或二進制字段的長度。
indexname參數指定要刪除的多重字段索引的名稱。
用sql*plus或第三方能夠運行sql語句的程序登陸數據庫:
ALTER TABLE (表名) ADD (列名 數據類型);
ALTER TABLE (表名) MODIFY (列名 數據類型);
ALTER TABLE (表名) RENAME COLUMN (當前列名) TO (新列名); /////不須要括號
ALTER TABLE (表名) DROP COLUMN (列名);
ALTER TABLE (當前表名) RENAME TO (新表名);
如:
Alter Table Employ Add (weight Number(38,0)) ;
Alter Table Employ Modify (weight Number(13,2)) ;
Alter Table Emp Rename Cloumn weight To weight_new ;
ALTER TABLE emp DROP COLUMN weight_new ;
ALTER TABLE bouns RENAME TO bonus_new;
增長一個列:
ALTER TABLE 表名 ADD(列名 數據類型);
如:
ALTER TABLE emp ADD(weight NUMBER(38,0));
修改一個列的數據類型(通常限於修改長度,修改成一個不一樣類型時有諸多限制):
ALTER TABLE 表名 MODIFY(列名 數據類型);
如:
ALTER TABLE emp MODIFY(weight NUMBER(3,0) NOT NULL);
給列更名:
ALTER TABLE 表名 RENAME COLUMN 當前列名 TO 新列名;
如:
ALTER TABLE emp RENAME COLUMN weight TO weight_new;
刪除一個列:
ALTER TABLE 表名 DROP COLUMN 列名;
如:
ALTER TABLE emp DROP COLUMN weight_new;
將一個表更名:
ALTER TABLE 當前表名 RENAME TO 新表名;
如:
ALTER TABLE bouns RENAME TO bonus_new
====================================================================================
alter USER user IDENTIFIEDBY ’newpassword’REPLACE ’oldpassword’;
——————————————————————————————————————————————————————————————————————————
備份
Oracle數據導入導出imp/exp
功能:Oracle數據導入導出imp/exp就至關與oracle數據還原與備份。
大多狀況均可以用Oracle數據導入導出完成數據的備份和還原(不會形成數據的丟失)。
Oracle有個好處,雖然你的電腦不是服務器,可是你裝了oracle客戶端,並創建了鏈接
(經過Net Configuration Assistant添加正確的服務命名,其實你能夠想成是客戶端與服務器端 修了條路,而後數據就能夠被拉過來了)
這樣你能夠把數據導出到本地,雖然可能服務器離你很遠。
你一樣能夠把dmp文件從本地導入到遠處的數據庫服務器中。
利用這個功能你能夠構建倆個相同的數據庫,一個用來測試,一個用來正式使用。
執行環境:能夠在SQLPLUS.EXE或者DOS(命令行)中執行,
DOS中能夠執行時因爲 在oracle 8i 中 安裝目錄\$ora10g\BIN被設置爲全局路徑,
該目錄下有EXP.EXE與IMP.EXE文件被用來執行導入導出。
oracle用java編寫,我想SQLPLUS.EXE、EXP.EXE、IMP.EXE這倆個文件是被包裝後的類文件。
SQLPLUS.EXE調用EXP.EXE、IMP.EXE他們所包裹的類,完成導入導出功能。
下面介紹的是導入導出的實例,嚮導入導出看實例基本上就能夠完成,由於導入導出很簡單。
數據導出:
1 將數據庫TEST徹底導出,用戶名system 密碼manager 導出到D:\daochu.dmp中
exp system/manager@TEST file=d:\daochu.dmp full=y
2 將數據庫中system用戶與sys用戶的表導出
exp system/manager@TEST file=d:\daochu.dmp owner=(system,sys)
3 將數據庫中的表table1 、table2導出
exp system/manager@TEST file=d:\daochu.dmp tables=(table1,table2)
4 將數據庫中的表table1中的字段filed1以"00"打頭的數據導出
exp system/manager@TEST file=d:\daochu.dmp tables=(table1) query=\" where filed1 like '00%'\"
上面是經常使用的導出,對於壓縮我不太在乎,用winzip把dmp文件能夠很好的壓縮。
不過在上面命令後面 加上 compress=y 就能夠了
數據的導入
1 將D:\daochu.dmp 中的數據導入 TEST數據庫中。
imp system/manager@TEST file=d:\daochu.dmp
上面可能有點問題,由於有的表已經存在,而後它就報錯,對該表就不進行導入。
在後面加上 ignore=y 就能夠了。
2 將d:\daochu.dmp中的表table1 導入
imp system/manager@TEST file=d:\daochu.dmp tables=(table1)
基本上上面的導入導出夠用了。很多狀況我是將表完全刪除,而後導入。
注意:
你要有足夠的權限,權限不夠它會提示你。
數據庫時能夠連上的。能夠用tnsping TEST 來得到數據庫TEST可否連上。
數據導出:
exp hkb/hkb@boss_14 full=y file=c:\orabackup\hkbfull.dmp log=c:\orabackup\hkbfull.log;
導出注意事項:導出的是當前用戶的的數據,當前用戶若是有DBA的權限,則導出全部數據!
同名用戶之間的數據導入:
imp hkb/hkb@xe file=c:\orabackup\hkbfull.dmp log=c:\orabackup\hkbimp.log full=y
不一樣名之間的數據導入:
imp system/test@xe fromuser=hkb touser=hkb_new file=c:\orabackup\hkbfull.dmp
log=c:\orabackup\hkbimp.log;