關於Oracle與MySQL的使用總結

平時使用的比較多的數據庫管理系統就是OracleMySQL,我在這裏記錄下使用過程當中的遇到的問題以及解決方案,以備不時之需java

Oracle

關於表空間

Oracle建立數據的代價仍是比較大的,因此使用表空間的概念,每一個表空間相互獨立。這裏記錄的操做包括從建立表空間、建立用戶並分配表空間、受權用戶這一系列操做mysql

建立表空間

create tablespace db_test  
datafile 'D:\app\Administrator\oradata\orcl\db_test.dbf'  --表空間文件位置
size 50m  --初始大小
autoextend on  --自動增加

建立用戶並分配表空間

CREATE USER utest  --用戶名
IDENTIFIED BY utestpwd  --密碼
DEFAULT TABLESPACE db_test --分配表空間

授予一些權限給用戶

grant create session to utest  --或者是CONNECT
grant RESOURCE to utest
--grant dba to utes

導入與導出

Oracle可使用dmp文件、sql文件、數據泵方式進行導入與導出sql

Oracle導入.dmp文件

命令語句爲 imp 用戶名/密碼@實例名 file=d:\data\x.dmp log=d:\data\x.log full=y ignore=y;

其中:file 表示待導入的dmp文件位置;
log 指定導入過程log的記錄文件位置,注意,即便指定了將記錄保存到log文件裏,屏幕打印也不會關閉;

full 表示將dmp所有內容導入;

ignore 表示忽略表建立過程當中的錯誤,好比表名已存在時將直接覆蓋原來表的內容;

Oracle導出.dmp文件

exp有三種主要的方式(徹底、用戶、表)數據庫

1. 將數據庫TEST徹底導出,用戶名system 密碼manager 導出到D:\daochu.dmp中 (徹底) DBA權限
  exp system/manager@TEST file=d:\test.dmp full=y
2. 將數據庫中system用戶與sys用戶下的對象導出 (用戶)
  exp system/manager@TEST file=d:\test.dmp owner=(system,sys)
3. 將數據庫中的表table1 、table2導出 (表),只導出表
  exp system/manager@TEST file=d:\test.dmp tables=(table1,table2)
4. 將數據庫中的表table1中的字段filed1以」00」打頭的數據導出 
  exp system/manager@TEST file=d:\test.dmp tables=(table1) query=\」 where filed1 like ‘00%’\」
5. 只導出表table1結構,不導出數據
   exp userid=uname/pwd  tables=table1  file=d:\test.dmp rows=n;
上面是經常使用的導出,對於壓縮我不太在乎,用winzip把dmp文件能夠很好的壓縮。
不過在上面命令後面加上 compress=y 就能夠了

Oracle導入.sql文件

@文件名

oracle 導入數據泵

  1. 建立與數據泵文件(也是個.dmp文件)相同的表空間
  2. 建立數據泵文件相同的用戶並分配表空間
  3. 授予一些權限給用戶(有時候仍是須要dba權限)
  4. 建立一個目錄,並分配讀寫權限
CREATE OR REPLACE DIRECTORY  BM as 'D:\bm'  --D:\bm 手動建立

grant read,write on directory 目錄名 to 用戶名
--revoke read,write on directory BM from als7zx04  --收回目錄的讀寫權限
  1. 將數據泵文件放在目錄下,這裏是D:\bm 下
  2. 使用impdp導入
impdp 用戶名/密碼@數據庫實例 directory=目錄名 dumpfile='數據泵文件名'full=y ignore=y;  --數據泵文件名不要寫全路徑

系統查詢

這裏的查詢不是說如何查詢表,而是查詢一些與系統有關的信息session

oracle怎麼查看用戶屬於哪一個表空間

select username,default_tablespace from dba_users  where username='用戶名'; --用戶名大寫

查詢當前數據庫實例名

select instance_name from v$instance;

數據庫實例名(instance_name)用於對外部鏈接。在操做系統中要取得與數據庫的聯繫,必須使用數據庫實例名。好比咱們做開發,要鏈接數據庫,就得鏈接數據庫實例名:oracle

jdbc:oracle:thin:@localhost:1521:orcl(orcl就爲數據庫實例名)

查詢表個數

select table_name from user_tables; --當前用戶擁有的表
--select count(1) from tabs;
--select count(1) from user_tables;

select table_name from all_tables; --全部用戶的表
select table_name from dba_tables; --包括系統表
select table_name from dba_tables where owner='用戶名'

--相似的,除了表,還有視圖、存儲過程、同義詞等等對象,使用[DBA|USER|ALL]_TABLES能夠查看到你想要的對象

查看數據庫對象,能夠發現同名數據庫對象被佔用的問題

--對象名爲GETORGNAME
SELECT OBJECT_NAME,OBJECT_TYPE FROM USER_OBJECTS WHERE OBJECT_NAME='GETORGNAME';

建立表空間

Oracle查看哪些表被鎖了

SELECT object_name, machine, s.sid, s.serial#, logon_time, locked_mode
FROM gv$locked_object l, dba_objects o, gv$session s 
WHERE l.object_id = o.object_id 
AND l.session_id = s.sid;

解除鎖定

--alter system kill session 'sid,serial#'; 
ALTER system kill session '23,1647';

查詢語句

這裏是一些特殊的SELECTapp

oracle中把1,2,3顯示成01,02

--oracle中把1,2,3顯示成01,02,03等的數值怎麼寫
SELECT to_char(2,'fm00') FROM dual;  --結果 02
SELECT to_char(2,'fm999.00') FROM dual; --結果 2.00

格式化時間

select
cc.IDEXPIRY,cc.CUSTOMERID,ci.CUSTOMERNAME
from 
CUSTOMER_CERT cc,CUSTOMER_INFO ci
where cc.CUSTOMERID=ci.CUSTOMERID and cc.IDEXPIRY<=to_char(sysdate,'yyyy/mm/dd')
-- Oracle 使用to_char 將當前時間sysdate 格式化

Oracle查詢上一月

select to_char(add_months(sysdate,-1),'yyyymm') from dual;

Oracle從一個日期中提取特定部分

--語法
extract (    

        { year | month | day | hour | minute | second }    

        | { timezone_hour | timezone_minute }    

        | { timezone_region | timezone_abbr }    

from { date_value | interval_value } )


--例子(從一個日期裏提取年,月,日)
select  extract (year from sysdate) year, extract (month from sysdate) month, extract (day from sysdate) day from  dual;
--EXTRACT(MONTH  FROM TO_DATE(MIN(A1.EARLIESTDUEBILLPUTOUTMON),'YYYY-MM-DD'))

數據字典

查詢表的表名,字段名,字段類型,註釋spa

--若是還須要查詢系統中的表 使用數據字典 dba_ 打頭的數據字典
select 
user_tab_columns.table_name,user_tab_comments.comments as tablename,
user_tab_columns.COLUMN_NAME,user_col_comments.comments,
user_tab_columns.data_type||'('||user_tab_columns.data_length||')',
user_tab_columns.COLUMN_ID
from user_tab_columns,user_col_comments,user_tab_comments
where user_tab_columns.TABLE_NAME=user_tab_comments.table_name
and user_tab_columns.TABLE_NAME=user_col_comments.table_name
and user_tab_columns.COLUMN_NAME=user_col_comments.column_name 
and user_tab_columns.table_name like '表名%' order by user_tab_columns.COLUMN_ID  
--表名大寫,或者使用upper('brc_21bank_custrisk'),以建立表的字段順序(column_id)排序

MySQL

導入與導出

MySQL中我使用最多的是sql文件的方式導入與導出操作系統

  1. 登陸MySQL
mysql ‐uroot ‐proot
  1. 選中須要操做的數據庫
user db1;
  1. 使用source命令導出
source C:\bak.sql

導入也須要先登陸系統,並選中數據庫(這個數據庫須要提早建好,一個空數據庫)code

使用SOURCE命令

mysql ‐uroot ‐proot

create database db1;

user db1;

SOURCE 導入文件的路徑;

查詢語句

若是是null設置默認值

ifnull(表達式1,表達式2)方法 : 若表達式1的值爲null,則返回表達式2的結果;若表達式1的值不爲null,則返回表達式1的值 ifnull(age, 0)

SELECT COUNT(IFNULL(english,0)) FROM student3;

設置小數位數

可使用cast(數值 as decimal(總位數,小數位))設置小數的位數

select cast(avg(price) as decimal(5,2)) from products;

數據字典

SELECT
    table_schema,
    table_name,
    column_name,
    column_type,
    column_comment
FROM
    information_schema.`COLUMNS`
WHERE
    table_schema = '數據庫名';

MYSQL忘記密碼

  1. 使用管理員運行cmd ---> net stop mysql中止mysql服務
  2. 使用無驗證方式啓動mysql服務:mysqld --skip-grant-tables
  3. 打開新的cmd窗口,直接輸入mysql,回車登陸成功
  4. user mysql;
  5. set password for '用戶名'@'主機名' = password('新密碼');或者 update user set password = password('新密碼') where user = '用戶名';
  6. 關閉兩個窗口
  7. 打開任務管理器,手動結束mysqld.exe進程
  8. 啓動mysql服務 ---> net start mysql
  9. 使用新密碼登陸便可
相關文章
相關標籤/搜索