oracle 、mysql、 sql server使用記錄
mysql常用命令:
mysqld --啟動mysql數據庫 show databases; -- 查看數據庫 use database; -- 選擇數據庫 show tables; -- 查看表 desc tableName; -- 查看表結構 show processlists; --如果查詢慢,可以查看是否鎖表 exit --退出mysql service mysqld restart; --重啟mysql服務
mysql聲明過程
mysql中的procedure: //聲明 declare i int; //賦值 set i = 1; //或者使用 @i 直接使用,不用聲明 //創建procedure模板 create procedure dbname.myMethod() begin declare i int; set i = 1; test:while i<3 do select i; end while test; //如果有增刪改,不要忘記commit commit; end; //調用過程 call myMethod();
數據刪除、清空
drop、delete和truncate:
drop:連同表結構和表數據直接刪除
truncate:清空表數據,但不刪除表結構,而且autoincrement從0開始計數;
delete:可以加where條件,刪除特定區域記錄,但是主鍵autoincrement繼續之前的數字計數。
語法:
drop table tableName; truncate table tableName; delete from tableName where 1=1;
速度,一般來說: drop> truncate > delete
truncate和 delete只刪除數據不刪除表的結構(定義)
數據導入導出
mysql導出數據
select * from test_table into outfile "d:/a.txt";
mysql導入數據
LOAD DATA INFILE '/tmp/1.txt' INTO TABLE tmpuserid FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';
sql server
使用bcp導出
oracle
待定
表復制
mysql
1)先創建table1
create table table1(id bigint);
2)插入
insert into table1(id) select id from table2; --要求table1必須存在,字段必須一一對應
oralce
方法一:復制表結構和數據
create table temp_clientloginuser as select distinct userid from tbuserloginlog;
方法二:僅復制數據
--如果表結構一樣 insert into mytable select * from yourtable;
-- 如果表結構不一樣 insert into mytable(column1,column2...) select column1,column2 ... from yourtable;
3.ms sqlserver
select ptid into newtable from tmpuserid; --sqlserver 會自動新建一張表結構和 from表一樣的新表
其他注意問題
1.sql server 查詢select的時候要記得加 with(nolock) ,防止鎖住;
2. oracle 中查詢用戶所包含的所有對象信息
select * from user_source
where lower(text) like '%yyyy%'
3.使用mysql和oracle時一定要對DML語言進行顯式地commit,不然insert的數據不會生效,切記!
4. 要分清哪些命令是DML,哪些是DDL
DDL是數據定義語言,如drop,alter,truncate等都是DDL;
DML是數據操縱語言,如nsert,update,delete,merge等都是DML,
在oracle里DML需要顯式地commit,當然可以rollback的,而DDL是不可以的。
5.面對表數據量很大,成千萬上億的情況,查詢的時候不要join,直接查范圍大也會很慢,最好的辦法是將需要的數據導出到一張臨時表,然后在臨時表中進行操作,速度會快很對。
6.如何跨庫?
在oracle中使用database link方式,如 在database3中使用
> select * from datatable@database2;
查詢,但是,最好減少跨庫查詢,如確實需要,可以將需要的數據導入到一張臨時表,然后在臨時表中操作。
not exists
例子:
select * from temp_clientloginuser_info a where not exists(select 1 from tvsumamountmonth b where lower(a.ptid)=b.poptid and b.sumamount>0)
update 2013-7-12 10:07:45
mysql中日期函數:
// 當前時間 select now(); --2008-12-29 16:25:46 CURDATE() -- 2008-12-29 CURTIME() -- 16:25:46 SELECT DATE_ADD("1997-12-31 23:59:59",INTERVAL -1 DAY); //日期增減 DATE_FORMAT(@insertDate, '%Y-%m-%d') //日期格式化,相當於oralce中的trunc方法
sql server 中的日期函數:
-- 獲取當前時間 select getdate(); -- 返回 2013-06-20 ,相當於oracle中的trunc方法 select CONVERT(varchar(10), getdate(),120); select getdate(); -- 返回 2013-06-20 ,相當於oracle中的trunc方法字符串轉date: select CONVERT(varchar(10), getdate(),120); CONVERT(datetime, getdate(),120); convert(int,sum(NewSingleUser)) --sum()的返回值是根據里面的字段決定的,這里返回int64 long類型,convert函數把long轉化為int類型
oracle 日期函數 to_date()
sysdate : --系統日期 to_date('2004-05-07 13:23:44','yyyy-mm-dd hh24:mi:ss') -- 時間格式轉化 to_date('2004-05-07 13:23:44','hh24') --13 取小時數 sysdate+1 --加一天 sysdate+1/24 --加1小時 sysdate+1/(24*60) --加1分鍾 sysdate+1/(24*60*60) --加1秒鍾 select to_date('2003-11-17','yyyy-mm-dd')+1 from dual; --2003-11-18 add_months(sysdate,1) --加一個月 add_months(sysdate,12) --加一年
alter語句
--oracle 刪除一列 alter table t_jm_user drop column USR_EmailValidate; --sql server要修改表中列的數據類型 ALTER TABLE [PV_HIS_JifenWall_Report] alter COLUMN [type] nvarchar(10) --刪除mysql的一個分區表: ALTER TABLE WebStat.PV_HIS drop partition p20130620; 查看分區表 SELECT TABLE_NAME, PARTITION_NAME FROM INFORMATION_SCHEMA.PARTITIONS WHERE Table_name = 'PV_HIS';
mysql
null與空’’ mysql中is not null 和 <> '' -- sql語句以...結尾 delimiter //
查看mysql是否鎖住: mysql > show processlist;
主要看STATE列,
Locked 被其他查詢鎖住了。
Sending data 正在處理SELECT查詢的記錄,同時正在把結果發送給客戶端。
Sorting for group 正在為GROUP BY做排序。
Sorting for order 正在為ORDER BY做排序。
Sorting result For a SELECT statement, this is similar to Creating sort index, but for nontemporary tables.
NULL This state is used for the SHOW PROCESSLIST state.