mysql语句怎么绑定 mysql 绑定变量

mysql的SQL语句有像oracle那样可以绑定变量吗关于sql
server
sql语句查询分页数据的解决方案:
要求选取
tbllendlist

第3000页的记录,每一页100条记录 。-------------------------
----------
方法1:
----------
select
top
100
*
from
tbllendlist
where
fldserialno
not
in
(
select
top
300100
fldserialno
from
tbllendlist
order
by
fldserialno
)
order
by
fldserialno
----------
方法2:
----------
select
top
100
*
from
tbllendlist
where
(fldserialno
(select
max(fldserialno)
from
(select
top
300100
fldserialno
from
tbllendlist
order
by
fldserialno)
as
t))
order
by
fldserialno
方法1执行速度比较快!
不过,这种做法还是很麻烦,强烈期待微软发明新的可分页的sql语句来?。。。?
sql
server
---------------------------------------------------------------------------------
从数据库表中的第m条记录开始取n条记录,利用top关键字:注意如果select语句中既有top , 又有order
by,则是从排序好的结果集中选择:
select
*
from
(
select
top
n
*
from
(select
top
(m
n
-
1)
*
from
表名称
order
by
主键
desc)
t1
)
t2
order
by
主键
asc
例如从表sys_option(主键为sys_id)中从10条记录还是检索20条记录,语句如下:
select
*
from
(
select
top
20
*
from
(select
top
29
*
from
sys_option
order
by
sys_id
desc)
t1)
t2
order
by
sys_id
asc
oralce数据库--------------------------------------------------------------------------------
从数据库表中第m条记录开始检索n条记录
select
*
from
(select
rownum
r,t1.*
from
表名称
t1
where
rownum
m
n)
t2
where
t2.r
=
m
例如从表sys_option(主键为sys_id)中从10条记录还是检索20条记录,语句如下:
select
*
from
(select
rownum
r,t1.*
from
sys_option
where
rownum
30
)
t2
where
t2.r
=
10
如果你对oracle数据库分页不是很熟悉的话,本页后面有专门对oracle分页技术的讲解 。
my
sql数据库---------------------------------------------------------------------------------------------
my
sql数据库最简单,是利用mysql的limit函数,limit
[offset,]
rows从数据库表中m条记录开始检索n条记录的语句为:
select
*
from
表名称
limit
m,n
例如从表sys_option(主键为sys_id)中从10条记录还是检索20条记录,语句如下:
select
*
from
sys_option
limit
10,20
tag:
racle
racle
server
server
server
sql
sql
mysql关联查询语句怎么写一使用SELECT子句进行多表查询
SELECT 字段名 FROM 表1 , 表2 … WHERE 表1.字段 = 表2.字段 AND 其它查询条件
SELECT a.id,a.name,a.address,a.date,b.math,b.english,b.chinese FROM tb_demo065_tel AS b,tb_demo065 AS a WHERE a.id=b.id
注:在上面的的代码中,以两张表的id字段信息相同作为条件建立两表关联,但在实际开发中不应该这样使用,最好用主外键约束来实现
二使用表的别名进行多表查询
如:SELECT a.id,a.name,a.address,b.math,b.english,b.chinese FROM tb_demo065a,tb_demo065_telb WHERE a.id=b.id AND b.id='$_POST[textid]'
SQL语言中,可以通过两种方式为表指定别名
第一种是通过关键字AS指定,如
SELECT a.id,a.name,a.address,b.math,b.english,b.chinese FROM tb_demo065 AS a,tb_demo065_tel AS b WHERE a.id=b.id
第二种是在表名后直接加表的别名实现
SELECT a.id,a.name,a.address,b.math,b.english,b.chinese FROM tb_demo065a,tb_demo065_telb WHERE a.id=b.id
使用表的别名应注意几下几点
(1)别名通常是一个缩短了的表名 , 用于在连接中引用表中的特定列,如果连接中的多个表中有相同的名称列存在,必须用表名或表的别名限定列名
(2)如果定义了表的别名就不能再使用表名
三合并多个结果集
SQL语言中,可以通过UNION 或 ALL将多个SELECT语句的查询结果合并输出,这两个关键字的使用说明如下:
UNION:利用该关键字可以将多个SELECT 语句的查询结果合并输出 , 并删除重复行
ALL:利用该关键字可以将多个SELECT 语句的查询结果合并输出,但不会删除重复行
在使用UNION或ALL关键字将多个表合并输出时,查询结果必须具有相同的结构并且数据类型必须兼容,另外使用UNION时两张表的字段数量也必须相同,否则会提示SQL语句有错误 。
e.x:SELECT id,name,pwd FROM tb_demo067 UNION SELECTuid,price,date FROM tb_demo067_tel
四简单嵌套查询
子查询:子查询是一个SELECT查询,返回单个值且嵌套在SELECT、INSERT、UPDATE和DELETE语句或其它查询语句中,任何可以使用表达式的地方都可以使用子查询.
SELECT id,name,sex,date FROM tb_demo068 WHERE id in(SELECT id FROM tb_demo068 WHERE id='$_POST[test]')
内连接:把查询结果作为WHERE子句的查询条件即称为内连接
五复杂的嵌套查询
多表之间的嵌套查询可以通过谓词IN实现,语法格式如下:
test_expression[NOT] IN{
subquery
}
参数说明:test_expression指SQL表达式,subquery包含某结果集的子查询
多表嵌套查询的原理:无论是多少张表进行嵌套,表与表之间一定存在某种关联 , 通过WHERE子句建立此种关联实现查询
六嵌套查询在查询统计中的应用
实现多表查询时 , 可以同时使用谓词ANY、SOME、ALL,这些谓词被称为定量比较谓词,可以和比较运算符联合使用,判断是否全部返回值都满足搜索条件.SOME和ANY谓词是存在量的,只注重是否有返回值满足搜索条件,这两个谓词的含义相同,可以替换使用;ALL谓词称为通用谓词 , 它只关心是否有谓词满足搜索要求.
SELECT * FROM tb_demo069_people WHERE uid IN(SELECT deptID FROM tb_demo069_dept WHERE deptName='$_POST[select]')
SELECT a.id,a.name FROM tb_demo067 AS a WHERE id3)
ANY 大于子查询中的某个值
=ANY 大于等于子查询中的某个值
=ANY 小于等于子查询中的某个值
=ANY 等于子查询中的某个值
!=ANY或ANY 不等于子查询中的某个值
ALL 大于子查询中的所有值
=ALL 大于等于子查询中的所有值
=ALL 小于等于子查询中的所有值
=ALL 等于子查询中的所有值
!=ALL或ALL 不等于子查询中的所有值
七.使用子查询作派生的表
在实际项目开发过程中经常用到从一个信息较为完善的表中派生出一个只含有几个关键字段的信息表,通过子查询就可以来实现这一目标,如
SELECT people.name,people.chinese,people.math,people.english FROM (SELECT name,chinese,math,english FROM tb_demo071) AS people
注:子查询应遵循以下规则:
(1)由比较运算符引入的内层子查询只包含一个表达式或列名,在外层语句中的WHERE子句内命名的列必须与内层子查询命名的列兼容
(2)由不可更改的比较运算符引入的子查询(比较运算符后面不跟关键字ANY或ALL)不包括GROUP BY 或 HAVING子句,除非预先确定了成组或单个的值
(3)用EXISTS引入的SELECT列表一般都由*组成,不必指定列名
(4)子查询不能在内部处理其结果
八使用子查询作表达式
SELECT (SELECT AVG(chinese)FROM tb_demo071),(SELECT AVG(english)FROM tb_demo071),(SELECT AVG(math)FROM tb_demo071) FROM tb_demo071
注:在使用子查询时最好为列表项取个别名,这样可以方便用户在使用mysql_fetch_array()函数时为表项赋值,如
SELECT (SELECT AVG(chinese) FROM tb_demo071) AS yuwen ,(SELECT AVG(english) FROM tb_demo071) AS yingyu,(SELECT AVG(math) FROM tb_demo071) AS shuxue FROM tb_demo071
九使用子查询关联数据
SELECT * FROM tb_demo072_student WHERE id=(SELECT id FROM tb_demo072_class WHERE className = '$_POST[text]')
十多表联合查询
利用SQL语句中的UNION,可以将不同表中符合条件的数据信息显示在同一列中 。
e.x:SELECT * FROM tb_demo074_student UNION SELECT * FROM tb_demo074_fasten
注:使用UNION时应注意以下两点:
(1)在使用UNION运算符组合的语句中,所有选择列表的表达式数目必须相同,如列名、算术表达式及聚合函数等
(2)在每个查询表中,对应列的数据结构必须一样 。
十一对联合后的结果进行排序
为了UNION的运算兼容,要求所有SELECT语句都不能有ORDER BY语句,但有一种情况例外 , 那就是在最后一个SELECT语句中放置ORDER BY 子句实现结果的最终排序输出 。
e.x:SELECT * FROM tb_demo074_student UNION SELECT * FROM tb_demo074_fasten ORDER BY id
使用UNION条件上相对比较苛刻,所以使用此语句时一定要注意两个表项数目和字段类型是否相同
十二条件联合语句
SELECT * FROM tb_demo076_BEIJING GROUP BY name HAVING name='人民邮电出版社' OR name='机械工业出版社' UNION SELECT * FROM tb_demo076_BEIJING GROUP BY name HAVING name '人民邮电出版社' AND name '机械工业再版社' ORDER BY id
上面语句应用了GROUP BY分组语句和HAVING语句实现条件联合查询 。其实现目的是先保证将'人民邮电出版社'和'机械工业出版社'始终位于名单最前列,然后再输出其它的出版社
十三简单内连接查询
SELECT filedlist FROM table1 [INNER] JOIN table2 ON table1.column1 = table2.column1
其中 , filedlist是要显示的字段,INNER表示表之间的连接方式为内连接,table1.column1=table2.column1用于指明两表间的连接条件,如:
SELECT a.name,a.address,a.date,b.chinese,b.math,b.english FROM tb_demo065 AS a INNER JOIN tb_demo065_tel AS b on a.id=b.id
十四复杂内连接查询
复杂的内连接查询是在基本的内连接查询的基础上再附加一些查询条件 , 如:
SELECT a.name,a.address,a.date,b.chinese,b.math,b.english FROM tb_demo065 AS a INNER JOIN tb_demo065_tel AS b on a.id=b.id WHERE b.id=(SELECT id FROMtb_demo065 WHERE tb_demo065.name='$_POST[text]')
总之,实现表与表之间的关联的本质是两表之间存在共同的数据项或者相同的数据项,通过WHERE 子句或内连接INNER JOIN … ON 语句将两表连接起来,实现查询
十五使用外连接实现多表联合查询
(1)LEFT OUTER JOIN表示表之间通过左连接方式相互连接,也可简写成LEFT JOIN,它是以左侧的表为基准故称左连接,左侧表中所有信息将被全部输出,而右侧表信息则只会输出符合条件的信息,对不符合条件的信息则返回NULL
e.x:SELECT a.name,a.address,b.math,b.english FROM tb_demo065 AS A LEFT OUTER JOIN tb_demo065_tel AS b ON a.id=b.id
(2)RIGHT OUTER JOIN表示表之间通过右连接方式相互连接 , 也可简写成RIGHT JOIN,它是以右侧的表为基准故称右连接 , 右侧表中所有信息将被全部输出,而左侧表信息则只会输出符合条件的信息,对不符合条件的信息则返回NULL
E.X:SELECT a.name,a.address,b.math,b.english FROM tb_demo065 AS A RIGHT OUTER JOIN tb_demo065_tel AS b ON a.id=b.id
十六利用IN或NOTIN关键字限定范围
e.x:SELECT * FROM tb_demo083 WHERE code IN(SELECT code FROM tb_demo083 WHERE code BETWEEN '$_POST[text1]' AND '$_POST[text2]')
利用IN可指定在范围内查询,若要求在某范围外查询可以用NOT IN代替它
十七由IN引入的关联子查询
e.x:SELECT * FROM tb_demo083 WHERE code IN(SELECT code FROM tb_demo083 WHERE code = '$_POST[text]')
十八利用HAVING语句过滤分组数据
HAVING子句用于指定组或聚合的搜索条件,HAVING通常与GROUP BY 语句一起使用,如果SQL语句中不含GROUP BY子句,则HAVING的行为与WHERE子句一样.
e.x:SELECT name,math FROM tb_demo083 GROUP BY id HAVING math'95'
mysql 变量设置问题mysql变量mysql语句怎么绑定的术语分类:
1.用户变量:以"@"开始,形式为"@变量名"
用户变量跟mysql客户端是绑定的 , 设置的变量,只对当前用户使用的客户端生效
2.全局变量:定义时,以如下两种形式出现,set
GLOBAL
变量名
或者
set
@@global.变量名,对所有客户端生效 。只有具有super权限才可以设置全局变量
3.会话变量:只对连接的客户端有效 。
4.局部变量:作用范围在begin到end语句块之间 。在该语句块里设置的变量
declare语句专门用于定义局部变量 。set语句是设置不同类型的变量,包括会话变量和全局变量
通俗理解术语之间的区别:
用户定义的变量就叫用户变量 。这样理解的话,会话变量和全局变量都可以是用户定义的变量 。只是他们是对当前客户端生效还是对所有客户端生效的区别了 。所以,用户变量包括了会话变量和全局变量
局部变量与用户变量的区分在于两点:
1.
用户变量是以"@"开头的 。局部变量没有这个符号 。
2.
定义变量不同 。用户变量使用set语句,局部变量使用declare语句定义
3.
作用范围 。局部变量只在begin-end语句块之间有效 。在begin-end语句块运行完之后,局部变量就消失了 。
所以,最后它们之间的层次关系是:变量包括局部变量和用户变量 。用户变量包括会话变量和全局变量 。
使用备忘,set
@var
若没有指定GLOBAL
或SESSION
,那么默认将会定义用户变量
两种方式定义用户变量:
1."=",如
set
@a
=3,@a:=5
2.":=" 。select常常这样使用
总结:使用select
和set设置变量的区别 , set可以使用以上两种形式设置变量 。而select只能使用":="的形式设置变量
实践积累:用户变量在mysql客户端退出后,会自动消失 。之后mysql语句怎么绑定我打开客户端,使用"select
@a;"
显示变了的值为null 。说明,未定义的变量初始化是null
实际中的问题
设置常量对group_concat()的配置影响:
SET
@@GROUP_CONCAT_MAX_LEN=4
手册中提到设置的语法是这样的:
SET
[SESSION
|
GLOBAL]
group_concat_max_len
=
val;
以下两种形式都能达到达到同样的效果,但是有什么区别?
SET
@@global.GROUP_CONCAT_MAX_LEN=4;
global可以省略,那么就变成了:SET
@@GROUP_CONCAT_MAX_LEN=4;
2011.2.25
之前的理解不怎么准确 。现在对加深理解后的地方进行总结 。
mysql中变量的层次关系是:大体包括用户变量和系统变量 。系统变量包括系统会话变量和系统全局变量 。
相互之间的区别:
因为用户变量就是用户定义的变量,系统变量就是mysql定义和维护的变量 。所以,用户变量与系统变量的区别在于 , 是谁在管理这些变量 。mysql一启动的时候就会读取系统变量(这样做目的是可以确定mysql的以何种机制或模式运行) 。
系统会话变量与用户变量都是在当前客户端退出后消失 。他们之间的区别可以这样理解,虽然常常看到"set
@@varible"的形式去改变系统变量的值,但是并不涉及到定义系统变量 。用户变量是可以自己定义(初始化) 。系统变量按照只是在改变值 。
局部变量只在begin-end语句块中定义并有效 。执行到该语句块之后就消失了 。定义的方式有明显的特点 , 使用declare语句 。
使用系统变量理论上是可以使用两种形式:
1.
前面带有符号"@@"
2.
符号省略 。比如我会看的如下形式:CURRENT_USER 。但是,约定系统变量要使用"@@变量名"的形式,就是在前面加上符号"@@"
怎么连接MYSQL数据库和执行SQL语句首先创建连接
就创建个Cnnection对象,然后把驱动加上,还有帐号密码什么的mysql语句怎么绑定!mysql语句怎么绑定我没连过sql数据库,不知道驱动,你可以在网上搜一下 。
给你一个我连接mysql数据库的例子
public Connection Getdata(){//这是连接数据库的一个方法,还可以配置连接池 。
Connection con=null;
try {
Class.forName("com.mysql.jdbc.Driver");//加驱动
con=DriverManager.getConnection("jdbc:mysql://localhost:3306/data","root","qq");//数据库路径、端口、库名、数据库用户名和密码
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return con;
}
public void delete(int id){//对数据库进行操作的方法,先调用上面写好的连接!
Connection con=Getdata();
Statement st;
try {
st=con.createStatement();
st.executeUpdate("delete from kaoshi where id=" id);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
什么是MySql数据库 MySQL数据库:
MySQL是一种开放源代码mysql语句怎么绑定的关系型数据库管理系统(RDBMS)mysql语句怎么绑定,使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库管理 。
MySQL是开放源代码的mysql语句怎么绑定,因此任何人都可以在General Public License的许可下下载并根据个性化的需要对其进行修改 。
MySQL因为其速度、可靠性和适应性而备受关注 。大多数人都认为在不需要事务化处理的情况下mysql语句怎么绑定,MySQL是管理内容最好的选择 。
数据库简介:
MySQL是一种开放源代码的关系型数据库管理系统(RDBMS)mysql语句怎么绑定 , MySQL数据库系统使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库管理 。
由于MySQL是开放源代码的,因此任何人都可以在General Public License的许可下下载并根据个性化的需要对其进行修改 。MySQL因为其速度、可靠性和适应性而备受关注 。大多数人都认为在不需要事务化处理的情况下,MySQL是管理内容最好的选择 。
MySQL这个名字 , 起源不是很明确 。一个比较有影响的说法是,基本指南和大量的库和工具带有前缀“my”已经有10年以上,而且不管怎样 , MySQL AB创始人之一的Monty Widenius的女儿也叫My 。这两个到底是哪一个给出了MySQL这个名字至今依然是个迷,包括开发者在内也不知道 。
MySQL的海豚标志的名字叫“sakila”,它是由MySQL AB的创始人从用户在“海豚命名”的竞赛中建议的大量的名字表中选出的 。获胜的名字是由来自非洲斯威士兰的开源软件开发者Ambrose Twebaze提供 。根据Ambrose所说,Sakila来自一种叫SiSwati的斯威士兰方言,也是在Ambrose的家乡乌干达附近的坦桑尼亚的Arusha的一个小镇的名字 。
MySQL , 虽然功能未必很强大,但因为它的开源、广泛传播,导致很多人都了解到这个数据库 。它的历史也富有传奇性 。
MySQL数据库历史:
MySQL的历史最早可以追溯到1979年,那时Oracle也才小打小闹,微软的SQL Server影子都没有 。有一个人叫Monty Widenius, 为一个叫TcX的小公司打工,并用BASIC设计了一个报表工具 , 可以在4M主频和16KB内存的计算机上运行 。过了不久,又将此工具,使用C语言重写 , 移植到Unix平台,当时,它只是一个很底层的面向报表的存储引擎 。这个工具叫做Unireg 。
可是,这个小公司资源有限,Monty天赋极高,面对资源有限的不利条件,他反而更能发挥潜能,总是力图写出最高效的代码 。并因此养成了习惯 。与Monty同在一起的还有一些别的同事,很少有人能坚持把那些代码持续写到20年后 , 而Monty却做到了 。
1990年,TcX的customer 中开始有人要求要为它的API提供SQL支持,当时,有人想到了直接使用商用数据库算了,但是Monty觉得商用数据库的速度难令人满意 。于是 , 他直接借助于mSQL的代码 , 将它集成到自己的存储引擎中 。但不巧的是,效果并不太好 。于是, Monty雄心大起,决心自己重写一个SQL支持 。
1996年 , MySQL 1.0发布,只面向一小拨人,相当于内部发布 。到了96年10月 , MySQL 3.11.1发布了,呵呵,没有2.x版本 。最开始,只提供了Solaris下的二进制版本 。一个月后,Linux版本出现了 。
紧接下来的两年里,MySQL依次移植到各个平台下 。它发布时,采用的许可策略 , 有些与众不同:允许免费商用,但是不能将MySQL与自己的产品绑定在一起发布 。如果想一起发布,就必须使用特殊许可 , 意味着要花银子 。当然,商业支持也是需要花银子的 。其它的 , 随用户怎么用都可以 。这种特殊许可为MySQL带来了一些收入,从而为它的持续发展打下了良好的基础 。(细想想,PostgreSQL曾经有几年限入低谷,可能与它的完全免费,不受任何限制有关系) 。
MySQL3.22应该是一个标志性的版本,提供了基本的SQL支持 。
MySQL关系型数据库于1998年1月发行第一个版本 。它使用系统核心提供的多线程机制提供完全的多线程运行模式,提供了面向C、C、Eiffel、Java、Perl、PHP、Python以及Tcl等编程语言的编程接口(APIs) , 支持多种字段类型并且提供了完整的操作符支持查询中的SELECT和WHERE操作 。
MySQL是开放源代码的,因此任何人都可以在General Public License的许可下下载并根据个性化的需要对其进行修改 。MySQL因为其速度、可靠性和适应性而备受关注 。
1999-2000年 , 有一家公司在瑞典成立了,叫MySQL AB (AB是瑞典语“股份公司”的意思) 。雇了几个人,与Sleepycat合作 , 开发出了 Berkeley DB引擎, 因为BDB支持事务处理,所以,MySQL从此开始支持事务处理了 。
2000年4月,MySQL对旧的存储引擎进行了整理,命名为MyISAM 。同时,2001年,Heikiki Tuuri向MySQL提出建议,希望能集成他们的存储引擎InnoDB,这个引擎同样支持事务处理,还支持行级锁 。
如今 , 遗憾的是,BDB和InnoDB好像都被Oracle收购了,为了消灭竞争对手,哪怕是开源的,都是不择手段 。
MySQL与InnoDB的正式结合版本是4.0 。
到了MySQL5.0 , 2003年12月,开始有View,存储过程之类的东东 , 当然 , 其间, bug也挺多 。
在2008年1月16号 MySQL被Sun公司收购 。
最近,MySQL的创始人Monty Widenius已经向Sun提交了辞呈 。head都要走了 。
据说,被Sun收购的公司多薄命,不知道MySQL今后前途如何 , 希望一路走好 。相信MySQL的生命力还是很长久的 。
时至今日 mysql 和 php 的结合绝对是完美.很多大型的网站也用到mysql数据库.mysql的发展前景是非常光明的!
MySQL常用命令:
1:使用SHOW语句找出在服务器上当前存在什么数据库:
mysql SHOW DATABASES;
2:2、创建一个数据库MYSQLDATA
mysql CREATE DATABASE MYSQLDATA;
3:选择你所创建的数据库
mysql USE MYSQLDATA; (按回车键出现Database changed 时说明操作成功!)
4:查看现在的数据库中存在什么表
mysql SHOW TABLES;
5:创建一个数据库表
mysql CREATE TABLE MYTABLE (name VARCHAR(20), sex CHAR(1));
6:显示表的结构:
mysql DESCRIBE MYTABLE;
7:往表中加入记录
mysql insert into MYTABLE values (”hyq”,”M”);
8:用文本方式将数据装入数据库表中(例如D:/mysql.txt)
mysql LOAD DATA LOCAL INFILE “D:/mysql.txt” INTO TABLE MYTABLE;
9:导入.sql文件命令(例如D:/mysql.sql)
mysqluse database;
mysqlsource d:/mysql.sql;
10:删除表
mysqldrop TABLE MYTABLE;
11:清空表
mysqldelete from MYTABLE;
12:更新表中数据
mysqlupdate MYTABLE set sex=”f” where name=’hyq’;
全局管理权限对应解释:
FILE: 在MySQL服务器上读写文件 。
PROCESS: 显示或杀死属于其它用户的服务线程 。
RELOAD: 重载访问控制表 , 刷新日志等 。
SHUTDOWN: 关闭MySQL服务 。
数据库/数据表/数据列权限:
ALTER: 修改已存在的数据表(例如增加/删除列)和索引 。
CREATE: 建立新的数据库或数据表 。
DELETE: 删除表的记录 。
DROP: 删除数据表或数据库 。
INDEX: 建立或删除索引 。
INSERT: 增加表的记录 。
SELECT: 显示/搜索表的记录 。
UPDATE: 修改表中已存在的记录 。
特别的权限:
ALL: 允许做任何事(和root一样) 。
USAGE: 只允许登录–其它什么也不允许做 。
MySQL数据库导入方法:
MySQL数据库的导入,有两种方法:
1) 先导出数据库SQL脚本,再导入;
2) 直接拷贝数据库目录和文件 。
在不同操作系统或MySQL版本情况下,直接拷贝文件的方法可能会有不兼容的情况发生 。
所以一般推荐用SQL脚本形式导入 。下面分别介绍两种方法 。
2. 方法一 SQL脚本形式
操作步骤如下:
2.1. 导出SQL脚本
在原数据库服务器上,可以用phpMyAdmin工具 , 或者mysqldump命令行 , 导出SQL脚本 。
2.1.1 用phpMyAdmin工具
导出选项中,选择导出“结构”和“数据”,不要添加“DROP DATABASE”和“DROP TABLE”选项 。
选中“另存为文件”选项,如果数据比较多,可以选中“gzipped”选项 。
将导出的SQL文件保存下来 。
2.1.2 用mysqldump命令行
命令格式
mysqldump -u 用户名 -p 数据库名数据库名.sql
范例:
mysqldump -u root -p abcabc.sql
(导出数据库abc到abc.sql文件)
提示输入密码时 , 输入该数据库用户名的密码 。
2.2. 创建空的数据库
通过主控界面/控制面板,创建一个数据库 。假设数据库名为abc,数据库全权用户为abc_f 。
2.3. 将SQL脚本导入执行
同样是两种方法,一种用phpMyAdmin(mysql数据库管理)工具,或者mysql命令行 。
2.3.1 用phpMyAdmin工具
从控制面板,选择创建的空数据库 , 点“管理” , 进入管理工具页面 。
在"SQL"菜单中,浏览选择刚才导出的SQL文件,点击“执行”以上载并执行 。
注意:phpMyAdmin对上载的文件大小有限制 , php本身对上载文件大小也有限制,如果原始sql文件
比较大,可以先用gzip对它进行压缩,对于sql文件这样的文本文件,可获得1:5或更高的压缩率 。
gzip使用方法:
# gzip xxxxx.sql
得到
xxxxx.sql.gz文件 。
提示输入密码时,输入该数据库用户名的密码 。
3 直接拷贝
如果数据库比较大,可以考虑用直接拷贝的方法,但不同版本和操作系统之间可能不兼容,要慎用 。
3.1 准备原始文件
用tar打包为一个文件
3.2 创建空数据库
3.3 解压
在临时目录中解压,如:
cd /tmp
tar zxf mydb.tar.gz
3.4 拷贝
将解压后的数据库文件拷贝到相关目录
cd mydb/
cp * /var/lib/mysql/mydb/
对于FreeBSD:
cp * /var/db/mysql/mydb/
3.5 权限设置
将拷贝过去的文件的属主改为mysql:mysql,权限改为660
chown mysql:mysql /var/lib/mysql/mydb/*
chmod 660 /var/lib/mysql/mydb/*
Mssql转换mysql的方法:
1.导表结构
使用MySQL生成create脚本的方法 。找到生成要导出的脚本,按MySQL的语法修改一下到MySQL数据库中创建该表的列结构什么的 。
2.导表数据
在MSSQL端使用bcp导出文本文件:
bcp “Select * FROM dbname.dbo.tablename;” queryout tablename.txt -c -Slocalhost\db2005 -Usa
其中”"中是要导出的sql语句,-c指定使用\t进行字段分隔,使用\n进行记录分隔,-S指定数据库服务器及实例,-U指定用户名,-P指定密码.
在MySQL端使用mysqlimport 导入文本文件到相应表中
mysqlimport -uroot -p databasename /home/test/tablename.txt
其中-u指定用户名,-p指定密码,databasename指定数据库名称,表名与文件名相同
MySQL备份与恢复:
MySQL备份恢复数据的一般步骤
备份一个数据库的例子:
1、备份前读锁定涉及的表
mysqlLOCK TABLES tbl1 READ,tbl1 READ,…
如果,你在mysqldump实用程序中使用--lock-tables选项则不必使用如上SQL语句 。
2、导出数据库中表的结构和数据
shellmysqldump --opt db_namedb_name.sql
3、启用新的更新日志
shellmysqladmin flush-logs
这样可以记录你备份后的数据改变为恢复数据准备 。
4、解除表的读锁
mysqlUNLOCK TABLES;
为了加速上述过程,你可以这样做:
shell mysqldump --lock-tables --opt db_namedb_name.sql; mysqladmin flush-logs
但是这样可能会有点小问题 。上命令在启用新的更新日志前就恢复表的读锁,
在更新繁忙的站点,可能有备份后的更新数据没有记录在新的日志中 。
现在恢复上面备份的数据库
1、对涉及的表使用写锁
mysqlLOCK TABLES tbl1 WRITE,tbl1 WRITE,…
2、恢复备份的数据
shellmysql db_namedb_name.sql
3、恢复更新日志的内容
shellmysql --one-database db_namehostname.nnn
假设需要使用的日志名字为hostname.nnn
4、启用新的更新日志
shellmysqladmin flush-logs
5、解除表的写锁
mysqlUNLOCK TABLES;
希望上面的例子能给你启发,因为备份数据的手法多种多样,你所使用的和上面所述可能大不一样 , 但是对于备份和恢复中,表的锁定、启用新的更新日志的时机应该是类似的,仔细考虑这个问题 。
MySQL数据库优化:
选择InnoDB作为存储引擎
大型产品的数据库对于可靠性和并发性的要求较高 , InnoDB作为默认的MySQL存储引擎,相对于MyISAM来说是个更佳的选择 。
优化数据库结构
组织数据库的schema、表和字段以降低I/O的开销,将相关项保存在一起,并提前规划,以便随着数据量的增长,性能可以保持较高的水平 。
设计数据表应尽量使其占用的空间最小化 , 表的主键应尽可能短 。·对于InnoDB表,主键所在的列在每个辅助索引条目中都是可复制的 , 因此如果有很多辅助索引,那么一个短的主键可以节省大量空间 。
仅创建你需要改进查询性能的索引 。索引有助于检索,但是会增加插入和更新操作的执行时间 。
InnoDB的ChangeBuffering特性
InnoDB提供了changebuffering的配置,可减少维护辅助索引所需的磁盘I/O 。大规模的数据库可能会遇到大量的表操作和大量的I/O,以保证辅助索引保持最新 。当相关页面不在缓冲池里面时,InnoDB的changebuffer将会更改缓存到辅助索引条目,从而避免因不能立即从磁盘读取页面而导致耗时的I/O操作 。当页面被加载到缓冲池时,缓冲的更改将被合并,更新的页面之后会刷新到磁盘 。这样做可提高性能,适用于MySQL5.5及更高版本 。
InnoDB页面压缩
InnoDB支持对表进行页面级的压缩 。当写入数据页的时候,会有特定的压缩算法对其进行压缩 。压缩后的数据会写入磁盘,其打孔机制会释放页面末尾的空块 。如果压缩失败,数据会按原样写入 。表和索引都会被压缩,因为索引通常是数据库总大小中占比很大的一部分,压缩可以显著节约内存,I/O或处理时间,这样就达到了提高性能和伸缩性的目的 。它还可以减少内存和磁盘之间传输的数据量 。MySQL5.1及更高版本支持该功能 。
注意 , 页面压缩并不能支持共享表空间中的表 。共享表空间包括系统表空间、临时表空间和常规表空间 。
使用批量数据导入
在主键上使用已排序的数据源进行批量数据的导入可加快数据插入的过程 。否则,可能需要在其他行之间插入行以维护排序,这会导致磁盘I/O变高,进而影响性能,增加页的拆分 。关闭自动提交的模式也是有好处的,因为它会为每个插入执行日志刷新到磁盘 。在批量插入期间临时转移唯一键和外键检查也可显著降低磁盘I/O 。对于新建的表,最好的做法是在批量导入后创建外键/唯一键约束 。
一旦你的数据达到稳定的大小,或者增长的表增加了几十或几百兆字节,就应该考虑使用OPTIMIZETABLE语句重新组织表并压缩浪费的空间 。对重新组织后的表进行全表扫描所需要的I/O会更少 。
优化InnoDB磁盘I/O
增加InnoDB缓冲池大小可以让查询从缓冲池访问而不是通过磁盘I/O访问 。通过调整系统变量innodb_flush_method来调整清除缓冲的指标使其达到最佳水平 。
MySQL的内存分配
在为MySQL分配足够的内存之前,请考虑不同领域对MySQL的内存需求 。要考虑的关键领域是:并发连接——对于大量并发连接,排序和临时表将需要大量内存 。在撰写本文时 , 对于处理3000 并发连接的数据库,16GB到32GB的RAM是足够的 。
内存碎片可以消耗大约10%或更多的内存 。像innodb_buffer_pool_size、key_buffer_size、query_cache_size等缓存和缓冲区要消耗大约80%的已分配内存 。
日常维护
定期检查慢的查询日志并优化查询机制以有效使用缓存来减少磁盘I/O 。优化它们,以扫描最少的行数,而不是进行全表扫描 。
其他可以帮助DBA检查和分析性能的日志包括:错误日志、常规查询日志、二进制日志、DDL日志(元数据日志) 。
定期刷新缓存和缓冲区以降低碎片化 。使用OPTIMIZETABLE语句重新组织表并压缩任何可能被浪费的空间 。
C#窗体程序,DataGridView代码绑定MySQL数据库中含有图片的字段列并显示图片DataTable dt = new DataTable();
using (MySqlConnection con = new MySqlConnection())
{
con.ConnectionString = "Data Source=127.0.0.1;Initial Catalog=mysql;User ID=root;password=";
con.Open();
string query = string.Format("select id ,name ,image from AAA");
using (MySqlCommand cmd = new MySqlCommand(query, con))
{
dt.Load(cmd.ExecuteReader());
}
}
dt.Columns.Add("图片",System.Type.GetType("System.Byte[]"));
DataTable dt2 = dt.Clone();
foreach (DataRow item in dt.Rows)
{
DataRow dr = dt2.NewRow();
dr[0] = item[0];
dr[1] = item[1];
dr[2] = item[2];
using (FileStream fs = new FileStream(item[2].ToString(), FileMode.Open))//根据路径取得图片
{
using (BinaryReader br = new BinaryReader(fs))
{
dr["图片"] = br.ReadBytes((int)fs.Length);
}
}
dt2.Rows.Add(dr);
}
dataGridView1.DataSource = dt2;
dataGridView1.Columns["图片"].DisplayIndex = 0;
dataGridView1.Columns["id"].DisplayIndex = 1;
dataGridView1.Columns["name"].DisplayIndex = 2;
dataGridView1.Columns["image"].Visible= false ;
【mysql语句怎么绑定 mysql 绑定变量】关于mysql语句怎么绑定和mysql 绑定变量的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读