oracle 、mysql、 sql server使用记录

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.