平時使用的比較多的數據庫管理系統就是Oracle
和MySQL
,我在這裏記錄下使用過程當中的遇到的問題以及解決方案,以備不時之需java
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
.dmp
文件命令語句爲 imp 用戶名/密碼@實例名 file=d:\data\x.dmp log=d:\data\x.log full=y ignore=y; 其中:file 表示待導入的dmp文件位置; log 指定導入過程log的記錄文件位置,注意,即便指定了將記錄保存到log文件裏,屏幕打印也不會關閉; full 表示將dmp所有內容導入; ignore 表示忽略表建立過程當中的錯誤,好比表名已存在時將直接覆蓋原來表的內容;
.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 就能夠了
@文件名
CREATE OR REPLACE DIRECTORY BM as 'D:\bm' --D:\bm 手動建立 grant read,write on directory 目錄名 to 用戶名 --revoke read,write on directory BM from als7zx04 --收回目錄的讀寫權限
impdp 用戶名/密碼@數據庫實例 directory=目錄名 dumpfile='數據泵文件名'full=y ignore=y; --數據泵文件名不要寫全路徑
這裏的查詢不是說如何查詢表,而是查詢一些與系統有關的信息session
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';
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';
這裏是一些特殊的SELECT
app
--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 格式化
select to_char(add_months(sysdate,-1),'yyyymm') from dual;
--語法 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
中我使用最多的是sql
文件的方式導入與導出操作系統
mysql ‐uroot ‐proot
user db1;
source
命令導出source C:\bak.sql
導入也須要先登陸系統,並選中數據庫(這個數據庫須要提早建好,一個空數據庫)code
使用SOURCE
命令
mysql ‐uroot ‐proot create database db1; user db1; SOURCE 導入文件的路徑;
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
忘記密碼cmd
---> net stop mysql
中止mysql
服務mysql
服務:mysqld --skip-grant-tables
cmd
窗口,直接輸入mysql
,回車登陸成功user mysql;
set password for '用戶名'@'主機名' = password('新密碼');
或者 update user set password = password('新密碼') where user = '用戶名';
mysqld.exe
進程mysql
服務 ---> net start mysql