MYSQL导入导出.sql文件

我在这里总结一下在Windows下关于数据库导入、导出文件,希望各位不吝赐教!
一.MYSQL的命令行模式的设置:
桌面->我的电脑->属性->环境变量->新建->
PATH=“;path\mysql\bin;”其中path为MYSQL的安装路径。
二.简单的介绍一下命令行进入MYSQL的方法:
1.C:\>mysql -h hostname -u username -p
按ENTER键,等待然后输入密码。这里hostname为服务器的名称,如localhost,username为MYSQL的用户名,如root。
进入命令行后可以直接操作MYSQL了。
2.简单介绍一下MYSQL命令:
mysql->CREATE DATABASE dbname;//创建数据库
mysql->CREATE TABLE tablename;//创建表
mysql->SHOW DATABASES;//显示数据库信息,有那些可用的数据库。
   mysql->USE dbname;//选择数据库
mysql->SHOW TABLES;//显示表信息,有那些可用的表
mysql->DESCRIBE tablename;//显示创建的表的信息
三.从数据库导出数据库文件:
1.将数据库mydb导出到e:\mysql\mydb.sql文件中:
打开开始->运行->输入cmd 进入命令行模式
c:\>mysqldump -h localhost -u root -p mydb >e:\mysql\mydb.sql
然后输入密码,等待一会导出就成功了,可以到目标文件中检查是否成功。
2.将数据库mydb中的mytable导出到e:\mysql\mytable.sql文件中:
c:\>mysqldump -h localhost -u root -p mydb mytable>e:\mysql\mytable.sql
3.将数据库mydb的结构导出到e:\mysql\mydb_stru.sql文件中:
c:\>mysqldump -h localhost -u root -p mydb –add-drop-table >e:\mysql\mydb_stru.sql
四.从外部文件导入数据到数据库中:
从e:\mysql\mydb2.sql中将文件中的SQL语句导入数据库中:
1.从命令行进入mysql,然后用命令CREATE DATABASE mydb2;创建数据库mydb2。
2.退出mysql 可以输入命令exit;或者quit;
3.在CMD中输入下列命令:
c:\>mysql -h localhost -u root -p mydb2 < e:\mysql\mydb2.sql
然后输入密码,就OK了。
五.下面谈一下关于导入文件大小限制问题的解决:
默认情况下:mysql 对导入文件大小有限制的,最大为2M,所以当文件很大时候,直接无法导入,下面就这个问题的解决列举如下:
1.在php.ini中修改相关参数:
影响mysql导入文件大小的参数有三个:
memory_limit=128M,upload_max_filesize=2M,post_max_size=8M
修改upload_max_filesize=200 M   这里修改满足你需要的大小,
可以同时修改其他两项memory_limit=250M   post_max_size=200M
这样就可以导入200M以下的.sql文件了。

pro*c++实现类似分页机制

1,本程序类似于分页机制,程序运行要求输入pagecout和page,pagecount表示每页显示的记录条数,page表示第几页;

pagecount_page.pc

#include<iostream>
using namespace std;
#include"sqlca.h"

EXEC SQL BEGIN DECLARE SECTION;
char *uid="
soft/soft@192.168.0.2:1521/orasoft";
int pagecount;
int page;
int u_id;
int c_cursor;
char u_name[20];
EXEC SQL END DECLARE SECTION;

void sqlerr()
{
EXEC SQL WHENEVER SQLERROR CONTINUE;
cout<<sqlca.sqlerrm.sqlerrmc<<endl;
EXEC SQL ROLLBACK WORK RELEASE;
exit(1);
}

int main()
{
EXEC SQL WHENEVER SQLERROR DO sqlerr();
EXEC SQL CONNECT :uid;

cout<<"Please input pagecount:";
cin>>pagecount;
cout<<"Please input page:";
cin>>page;
c_cursor=(page-1)*pagecount+1;
cout<<"FECTH FROM :"<<c_cursor<<endl;
EXEC SQL WHENEVER NOT FOUND STOP;
EXEC SQL DECLARE emp_cursor SCROLL CURSOR FOR SELECT * FROM T_USER;
EXEC SQL OPEN emp_cursor;
cout<<"The pagecount:"<<pagecount<<",The page:"<<page<<endl;
cout<<"     u_id u_name     "<<endl;
cout<<"——— ———–"<<endl;
//EXEC SQL FETCH ABSOLUTE :c_cursor emp_cursor INTO :u_id,:u_name;
for(int i=0;i<pagecount;i++)
{
   EXEC SQL WHENEVER NOT FOUND DO break;
   EXEC SQL FETCH NEXT emp_cursor INTO :u_id,:u_name;
   cout<<"        "<<u_id<<" "<<u_name<<endl;
}
EXEC SQL CLOSE emp_cursor;
EXEC SQL COMMIT WORK RELEASE;
return 0;
}

第一个pro*c++程序

程序说明:

1,从dynamic_file.in中读入动态的sql语句,创建跟T_USER一样的表T_USER2,并且插入一条数据;
2,从dynamic_file1.in中读入动态的sql语句,删除T_USER2表;
3,把所有的sql语句内容,错误信息,时间存储在dynamic_file.log的日志文件中。

dynamic_file.pc

#include <iostream>
using namespace std;
#include "sqlca.h"
#include "fstream"
#include "time.h"

EXEC SQL BEGIN DECLARE SECTION;
char *uid="
soft/soft@192.168.0.2:1521/orasoft";
char sqlstmt[100];
//char buf[100]
EXEC SQL END DECLARE SECTION;

//fstream outfile("dynamic_file.log");

void sqlerr()
{
EXEC SQL WHENEVER SQLERROR CONTINUE;
fstream errlog("dynamic_file.log",ios::out|ios::app);
cout<<sqlca.sqlerrm.sqlerrmc<<endl;
time_t ltime;
time(&ltime);
//cout<<time<<endl;
errlog.write(ctime(&ltime),strlen(ctime(&ltime)));
errlog.write(sqlca.sqlerrm.sqlerrmc,strlen(sqlca.sqlerrm.sqlerrmc));
errlog<<‘\n';
EXEC SQL ROLLBACK WORK RELEASE;
errlog.close();
exit(1);
}

int main(int argc,char* argv[])
{
if(argc<2)
{
   cout<<"please input source file like:<filename> <source file>"<<endl;
   return 0;
}
EXEC SQL WHENEVER SQLERROR DO sqlerr();
EXEC SQL CONNECT :uid;

fstream infile(argv[1]);
cout<<"source file:"<<argv[1]<<endl;
if(infile==NULL)
{
   cout<<"the source file is empty.."<<endl;
   return 0;
}

fstream outfile("dynamic_file.log",ios::out | ios::app);
while(!infile.eof())
{
   //cout<<infile.get()<<endl;
   infile.getline(sqlstmt,100);
   cout<<"sqlstmt:"<<sqlstmt<<endl;
   EXEC SQL EXECUTE IMMEDIATE :sqlstmt;
   time_t ltime;
   time(&ltime);
   outfile<<ctime(&ltime);
   outfile.write(sqlstmt,strlen(sqlstmt));
   outfile<<‘\n';
   if(infile.peek()==-1)break;
}
EXEC SQL COMMIT WORK RELEASE;
infile.close();
outfile.close();
cout<<"————–OK————–"<<endl;
return 0;
}

dynamic_file.in

CREATE TABLE T_USER2 AS SELECT * FROM T_USER
INSERT INTO T_USER2 VALUES(100,’ABC’)

dynamic_file1.in

DROP TABLE T_USER2

有些地方还需要改进,比如把写log功能封装到一个类

mysql查询语句

–基本查询
select * from pet

–列出指定的列
select name, owner form pet

–直接进行算术运算,对字段起别名
select sin(1+2) as sin

–where条件
select * from pet where (birth>’1980′ and species=’dog’) or species=’bird’

–对null的条件
select * from pet where sex is not null

–所有名字第四位是n的宠物信息是
select * from pet where owner like ‘___n%’

–所有主人名叫gwen或benny的宠物
select * from pet where owner in (‘gwen’ , ‘benny’)

–查询出生日期在90年代是宠物,相当与   >= and   <=
select * from pet where birth between ‘1990’ and ‘1999’

–按主人姓名排序,相同的按宠物姓名倒序排列
select * from pet order by owner, name desc

–查询性别为公的宠物,按生日倒序排列
select * from pet where sex=’m’ order by birth desc

–char_lenngth()返回的字符的长度,length()返回字节长度
SELECT owner,length(owner),char_length(owner) FROM pet p;

–列出养有宠物狗的人名
select distinct owner from pet where species=’dog’

–用两种方法查询出所有狗和猫的名字、出生年份、出生月份
select name, left(birth,4) as year, mid(birth, 6, 2) as month from pet
where species=’dog’ or species=’cat’

select name, year(birth) as year, month(birth) as month from pet
where species in(‘dog’,’cat’)

–查询所有名字中存在字母’e’的人,将他们养的宠物按类别、年龄排序
select name, species, birth
from pet
where owner like ‘%e%’
order by species,birth desc

–数字函数
select round(2.345,2), truncate(2.345,2), mod(323,5)

–日期函数
select now(), curdate(), curtime()

select adddate(‘2007-02-02′, interval 31 day)

–求出所有宠物的年龄
select name,birth,
truncate(datediff(now(),birth)/365,0) as age1,
year(now())-year(birth) – (dayofyear(birth)>dayofyear(now())) as age2
from pet

–分组函数
select min(birth),max(birth),avg(birth),count(*),count(sex),
sum(birth)
from pet

–每种宠物各有几只
select species,count(*)
from pet
group by species

–查询年龄最大的宠物的信息
select * from pet where birth =
       (select max(birth) from pet)

–每年各出生了几只宠物
select year(birth), count(*) from pet group by year(birth)

–鸟和猫的性别比例
select species, sex, count(*)
from pet
where species in (‘cat’,’bird’)
group by species, sex

–各种宠物年龄的和
select species, sum(truncate(datediff(now(),birth)/365,0)) as SumAge
from pet
group by species

–数量大于1的宠物种类
select species, count(*) as c
from pet
group by species
having c>=2

–基本双表关联
select a.name,a.species, a.sex,b.date, b.type, b.remark
from pet a,event b
where a.name = b.name

–查询宠物产仔时的年龄
select a.name, a.species,
   truncate(datediff(b.date,a.birth)/365,0) as age
from pet a,event b
where a.name = b.name and b.type=’litter’

–90年代出生的狗的事件列表
select a.name,birth,species,sex,date,type,remark
from pet a,event b
where a.name=b.name and birth between ‘1990’ and ‘1999’
and species=’dog’

–活着的宠物按发生的事件类型分组,看各种事件发生的次数
select type, count(*)
from pet a, event b
where a.name=b.name and a.death is null
group by type

–记录的事件数量超过1条的宠物信息
select a.name,species,sex,count(*)
from pet a, event b
where a.name = b.name
group by b.name
having count(*)>=2

–列出发生了两件事情的宠物的事件记录信息
select a.name,type,date,remark,b.species,b.sex,b.owner
from event a, pet b
where a.name=b.name and
   b.name in
   (
     select name
     from event
     group by name
     having count(*)=2
   )

–插入语句
insert into pet (name,species,birth)
values (‘KKK’,’snake’,’2007-01-01′);

insert into pet
values (‘KK’,’Diane’,’cat’,’f’,null,null);

insert into pet set name=’k’,owner=’Benny’

–更新语句
update pet set species=’snake’,sex=’f’,birth=now()
where name=’k’

–将事件表中生日的日期,更新到pet表中相应宠物的birth字段
update pet a
set birth = (
               select date
               from event b
               where a.name=b.name and b.type=’birthday’
             )
where a.name in (
                   select name
                   from event
                   where type=’birthday’
                 )

–删除语句
delete from pet where name like ‘k%’

Oracle Pro*C 动态SQL技术

Pro*C的常用动态SQL技术一共有3种:

  1. 用于处理不包含宿主变量的动态SQL, 不能用于SELECT语句.
  2. 用于处理输入宿主变量个数和类型已经确定的动态SQL, 不能用于SELECT语句.
  3. 用于处理选择列表项和输入宿主变量个数已经确定的动态SQL, 此种方法可以处理所有前两种方法能处理的情况, 此外, 还能处理SELECT语句.

由于第3种方法已经包含前两种方法的处理范围, 这篇文章我们主要介绍第3种方法.

1 介绍:

1.1 适用语句:

  • DML(Data Manipulation Language 数据操纵语言)
  • DDL(Data Definition Language 数据定义语言)
  • DCL(Data Control Language 数据控制语言)
  • 以及事务控制语句
  • 而且还可以处理SELECT语句

    用SQL语句举例就是:

  • DELETE FROM tbl_name WHERE name=xxx
  • CREATE TABLE tbl_name(cola INT)
  • GRANT SELECT ON xx TO xxx
  • COMMIT
  • INSERT INTO tbl_name VALUES(:a)
  • DELETE FROM tbl_name WHERE name=:a
  • SELECT name FROM tbl_name WHERE no=xxx

1.2 不能处理的语句:

总体来讲就是对象名和列名不能使用宿主变量, 例如:

  • INSERT INTO :a VALUES(:b)
  • SELECT :a, :b FROM tbl_name WHERE name=:c

2 处理步骤:

2.1 PREPARE语句:

PREPARE命令用于明明和解析SQL语句, 语法如下:

EXEC SQL PREPARE statement_name
    
FROM {:host_string | string_literal};

说明:

  • statement_name: 预编译器标识符.
  • host_string: 包含SQL语句的宿主变量.
  • string_literal: SQL语句文本字符串.

2.2 DECLARE游标:

使用PREPARE准备了SQL语句之后, 应该执行内嵌DECLARE命令定义游标, 语法如下:

EXEC SQL DECLARE cursor_name CURSOR
    
FOR statement_name;

说明:

  • cursor_name: 游标名.
  • statement_name: statement标识符, 在PREPARE过程中使用的.

2.3 OPEN打开游标:

当开始游标时, 会执行游标所对应的SQL语句, 语法如下:

EXEC SQL OPEN cursor_name [USING host_variable_list];

说明:

  • cursor_name: 游标名, 前面DECLARE的.
  • host_variable_list: 输入的宿主变量列表.

当执行OPEN命令时, 如果SQL语句不是SELECT语句, 会直接执行该语句, 此后可以关闭游标; 如果SQL语句是SELECT语句, 那么会将查询结果放到游标结果集中, 还必须使用内嵌的FETCH语句提取并处理游标结果集, 之后再关闭游标.

2.4 FETCH提取游标数据:

当SQL语句是SELECT语句时, OPEN之后会把结果存放到游标结果集中, 为了处理查询结果, 需要使用FETCH来提取数据, 语法如下:

EXEC SQL FETCH cursor_name INTO host_variable_list;

说明:

cursor_name: 游标名, 前面OPEN的.

host_variable_list: 输入的宿主变量列表.

2.5 CLOSE关闭游标:

提取并处理完游标数据后, 关闭游标, 语法如下:

EXEC SQL CLOSE cursor_name;

3 代码举例:

/* 大组成员表结构 */
struct GrpMember
{
    
char str_bgID[22];  /* 大组ID */

    
char str_matID[22]; /* 素材ID */
     …
     …
};

/**
* 素材检索
* 填冲好一个输入结构, 作为函数的参数进行调用.
*
* 这个输入结构中的各各成员项可以为空,
* 通过判断来确定数据库检索条件, 即: SELECT语句后面的条件.
*
*/

void MatSearch(struct GrpMember *in)
{
    
/* 定义临时变量 */

    
char buf[256]; /* buffer */

    /* 定义宿主变量 */
     EXEC SQL BEGIN DECLARE SECTION;
        
char sql_buf[1024]; /* 存放SQL语句 */
        
struct GrpMember ret; /* 查询结果 */
     EXEC SQL END DECLARE SECTION;

    /**
      * 根据参数, 构造SQL语句
      *
      * 1 把SQL语句的前半部分拷贝到buffer中.
      * 2 判断输入参数的结构中各成员项是否为空, 如不为空, 则add到buffer中.
     
*/

     strcpy(sql_buf,
"SELECT * FROM TBL_GRPMEMBER WHERE 1=1 ");
    
if (!
isEmpty(str_bgID))
     {
         sprintf(buf,
"AND tbl_str_bgID = %s "
, str_bgID);
         strcat(sql_buf, buf);
     }
     …
     …

    /* 准备动态SQL */
     EXEC SQL PREPARE sql_stmt FROM :sql_buf;

    /* 定义游标 */
     EXEC SQL DECLARE c1 CURSOR FOR sql_stmt;

    /* 打开游标: 执行查询 */
     EXEC SQL OPEN c1;

    /* 提取查询结果 */
    
while(1)
     {
         EXEC SQL FETCH c1 INTO ret;
/* 此处伪代码, 应该逐项INTO, 逗号分割, 具体见游标的使用 */

     }

     EXEC SQL CLOSE c1;
}

通过phpmyadmin把(excel->csv)文件导入到mysql

/**************’D:BOOK.csv用写字板打开为,可以发现以“,”换字段,"n"换行********************************/

0,AAA,aaa,100
1,BBB,bbb,200
2,CCC,ccc,300

导入到mysql的sql语句为:

LOAD DATA LOCAL INFILE ‘D:\BOOK.csv’ INTO TABLE `book` FIELDS TERMINATED BY ‘,’ ESCAPED BY ‘\’ LINES TERMINATED BY ‘n';

通过phpmyadmin把(excel->csv)文件导入到mysql

/**************’D:\BOOK.csv用写字板打开为,可以发现以“,”换字段,"\n"换行********************************/

0,AAA,aaa,100
1,BBB,bbb,200
2,CCC,ccc,300

导入到mysql的sql语句为:

LOAD DATA LOCAL INFILE ‘D:\\BOOK.csv’ INTO TABLE `book` FIELDS TERMINATED BY ‘,’ ESCAPED BY ‘\\’ LINES TERMINATED BY ‘\n';

配置Pro*C/C++,以及链接到oracle

1,一般安装oracle时候都已经安装了pro*,所以一般不需要再配置/etc/profile,如果是后来单独安装,看先这个文文件里是否有pro*的目录,否则在执行proc的时候可能会提示报错。

vi /etc/profile

加入

LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib:/usr/local/lib;
export LD_LIBRARY_PATH

2,修改$ORACLE_HOME/precomp/admin/pcscfg.cfg(红色字为新加入内容)

sys_include=(/software/oracle/precomp/public,/usr/include,/usr/lib/gcc/i386-redhat-linux/4.1.1/include,/usr/lib/gcc/i386-redhat-linux/3.4.5/include,/usr/lib/gcc-lib/i386-redhat-linux/3.2.3/include,/usr/lib/gcc/i586-suse-linux/4.1.0/include)
ltype=short
code=cpp
cpp_suffix=cc
parse=none
SQLCHECK=SEMANTICS

至此,我们可以开始写pc源程序了

以下是一个链接oracle数据库的程序。

/*

login.pc

用户名:soft;密码soft;数据服务器地址:192.168.0.2:1521/orasoft

*/

#include<iostream>
using namespace std;
#include "sqlca.h"

EXEC SQL BEGIN DECLARE SECTION;
char *uid="
soft/soft@192.168.0.2:1521/orasoft";
EXEC SQL END DECLARE SECTION;

int main()
{
EXEC SQL CONNECT :uid;
if(sqlca.sqlcode==0)
   cout<<"connect success…"<<endl;
else
   cout<<sqlca.sqlerrm.sqlerrmc<<endl;
}

1,proc预编译

命令:proc login.cp

2,通过第一步生产login.cc文件,现在就要通过g++编译源文件

命令:g++ -o login login.cc -I /software/oracle/precomp/public/ -L /software/oracle/lib/ -l clntsh

3,通过上一步生成login可执行文件。执行login

命令:

chown 755 login

./login

结果显示connect success…,成功。。。。

=============================end==============================

asp链接oracle

首先在microsoft ODBC 管理中的系统DSN中加入oracle的驱动 then

<%
Set Conn_ODBC=Server.CreateObject("ADODB.Connection") ‘创建名为Conn的Connection对象
Conn_ODBC.Open("DSN=OracleDSN;uid=soft;pwd=soft;") ‘建立连接
SET RS_ODBC=SERVER.CreateObject("ADODB.RECORDSET")
SQL_ODBC="select * from T_USER"
RS_ODBC.OPEN SQL_ODBC,Conn_ODBC,1,3
RESPONSE.Write("ID      NAME<BR>")
RESPONSE.Write("————<BR>")
DO WHILE NOT RS_ODBC.EOF
RESPONSE.Write(RS_ODBC("ID")&"      "&RS_ODBC("NAME")&"<BR>")
RS_ODBC.MOVENEXT
LOOP
%>

sqlplus查看用户表

在你执行之前你可以用一下show user来查看当前的连接用户是谁,然后可以使用
select table_name from dba_tables where owner = ‘用户名’;或
select table_name from user_tables;来查看所有属于当前用户的表
select table_name from all_tables;来查看所有当前用户可以访问的表