Tags
-
Recent Posts
Recent Comments
Archives
Categories
Category Archives: mysql
function procedure之区别
1. 只能说是看各自的习惯的,用procedure可以实现的,大部分用函数都可以的,所以有些package中函数的实现一个,过程的实现一个。 2.考虑是使用函数还是使用存储过程可以根据以下方面: 从参数的返回情况来看:如果返回多个参数值最好使用存储过程,如果只有一个返回值的话可以使用函数; 从调用情况来看: (1)如果在SQL语句(DML或SELECT)中调用的话一定是存储函数或存储的封装函数不可以是存储过程,但调用存储函数的时候还有好多限制以及函数的纯度等级的问题,你可以参考《ORACLE 9I PL\SQL程序设计》(机械工业出版社); (2)如果是在过程化语句中调用的话,就要看你要实现什么样的功能。函数一般情况下是用来计算并返回一个计算结果而存储过程一般是用来完成特定的数据操作(比如修改、插入数据库表或执行某些DDL语句等等),所以虽然他们的语法上很相似但用户在使用他们的时候所需要完成的功能大部分情况下是不同的。 3. 让我来简单的说PROCEDURE可以返回值,也可以做一件事,比如几个TABLE之间的数据转来转去,而FUNCTION一定要有返回值,还只能返回一个….. 4.三点与存储过程不同的地方: a,必须要一个RETURNS语句来定义返回值类型 b,不能指定参数的IN、OUT或INOUT修饰符,所有参数隐式的为IN c,Function体必须包含RETURN语句来终结Function执行并返回指定的结果给调用者
Posted in mysql
Leave a comment
mysql how to create function
mysql中定义function,有时候能减少MYSQL的数据传输量,但是好像很少有人使用,用的最多的就是procedure,其实function和procedure很类似。首先给出一个定义function的例子。 CREATE DEFINER=`root`@`localhost` FUNCTION `function_test`(`p_uid` int) RETURNS int(11) BEGIN #Routine body goes here… DECLARE tuid int default 0; DECLARE done int default 0; declare row1 int default 0; declare rowid int default 0; DECLARE rs_cursor CURSOR FOR SELECT uid from … Continue reading
Posted in mysql
Leave a comment
mysql row_number() fix
由于在mysql中没有row_number()方法,不能通过判断当前记录的行数来获取前几条记录。 所以这里通过模拟row_number()来实现。 如有表 student id name age class 1 张1 15 1 2 张2 15 1 3 张3 15 1 4 张4 15 2 5 张5 15 2 6 张6 15 2 7 张7 … Continue reading
Posted in mysql
Leave a comment
MySQL数据库开启允许远程登录
Mysql默认是不允许远程连接的,因为有很大的安全隐患。 需要手动增加可以远程访问数据库的用户。 方法一、本地登入mysql,更改 “mysql” 数据库里的 “user” 表里的 “host” 项,将”localhost”改为”%” #mysql -u root -proot mysql>use mysql; mysql>update user set host = ‘%’ where user = ‘root’; mysql>select host, user from user; <!–more–> 方法二、直接授权(推荐) 从任何主机上使用root用户,密码:youpassword(你的root密码)连接到mysql服务器: # mysql -u root -proot mysql>GRANT ALL … Continue reading
Posted in mysql
Leave a comment
mysql row_number()
有sql如下: db2 “select row_number() over (order by idsq ) as seq,pid,pmk from tablename where seq <= 20 order by idsq ” 报:SQL0206N “SEQ” 在使用它的上下文中无效。 SQLSTATE=42703 ————————————————– ————————————————— ————————– 关于ROW_NUMBER() OVER()的用法! 列别名在where 中使用是无效的。 改为 select * from (select row_number() over (order … Continue reading
Posted in mysql
Leave a comment
Mysql FULLTEXT
全文检索在 MySQL 中就是一个 FULLTEXT 类型索引FULLTEXT 索引用于 MyISAM 表,可以在 CREATE TABLE 时或之后使用 ALTER TABLE 或 CREATE INDEX 在 CHARVARCHAR 或 TEXT 列上创建对于大的数据库,将数据装载到一个没有 FULLTEXT 索引的表中,然后再使用 ALTER TABLE (或 CREATE INDEX) 创建索引,这将是非常快的将数据装载到一个已经有 FULLTEXT 索引的表中,将是非常慢的 1.使用Mysql全文检索fulltext的先决条件 表的类型必须是MyISAM 建立全文检索的字段类型必须是char,varchar,text 2.建立全文检索先期配置 由于Mysql的默认配置是索引的词的长度是4,所以要支持中文单字的话,首先更改这个. *Unix用户要修改my.cnf,一般此文件在/etc/my.cnf,如果没有找到,先查找一下find / -name ‘my.cnf’ … Continue reading
Posted in mysql
Leave a comment
mysql分区简介
数据库分区 数据库分区是一种物理数据库设计技术,DBA和数据库建模人员对其相当熟悉。虽然分区技术可以实现很多效果, 但其主要目的是为了在特定的SQL操作中减少数据读写的总量以缩减响应时间。 水平分区,垂直分区 分区主要有两种形式:这里一定要注意行和列的概念(row是行,column是列) 水平分区(Horizontal Partitioning) 这种形式分区是对表的行进行分区,通过这样的方式不同分组里面的物理列分割的数据集得以组合,从而进行个体分割(单分区)或集体分割(1个或多个分区)。 所有在表中定义的列在每个数据集中都能找到,所以表的特性依然得以保持。 举个简单例子:一个包含十年发票记录的表可以被分区为十个不同的分区,每个分区包含的是其中一年的记录。 一定要通过某个属性列来分割,譬如这里使用的列就是年份 垂直分区(Vertical Partitioning) 这种分区方式一般来说是通过对表的垂直划分来减少目标表的宽度,使某些特定的列被划分到特定的分区,每个分区都包含了其中的列所对应的行。 举个简单例子:一个包含了大text和BLOB列的表,这些text和BLOB列又不经常被访问,这时候就要把这些不经常使用的text和BLOB了划分到另一个分区, 在保证它们数据相关性的同时还能提高访问速度。 在数据库供应商开始在他们的数据库引擎中建立分区(主要是水平分区)时,DBA和建模者必须设计好表的物理分区结构, 不要保存冗余的数据(不同表中同时都包含父表中的数据)或相互联结成一个逻辑父对象(通常是视图)。 这种做法会使水平分区的大部分功能失效,有时候也会对垂直分区产生影响。 模式 MySQL5.1中最激动人心的新特性应该就是对水平分区的支持了。而且已经支持分区大部分模式: Range(范围) 这种模式允许DBA将数据划分不同范围。例如DBA可以将一个表通过年份划分成三个分区,80年代(1980′s)的数据,90年代(1990′s)的数据以及任何在2000年(包括2000年)后的数据。 Hash(哈希) 这中模式允许DBA通过对表的一个或多个列的Hash Key进行计算,最后通过这个Hash码不同数值对应的数据区域进行分区,。例如DBA可以建立一个对表主键进行分区的表。 Key(键值) 上面Hash模式的一种延伸,这里的Hash Key是MySQL系统产生的。 List(预定义列表) 这种模式允许系统通过DBA定义的列表的值所对应的行数据进行分割。例如:DBA建立了一个横跨三个分区的表,分别根据2004年2005年和2006年值所对应的数据。 Composite(复合模式) 是以上模式的组合使用而已,举例:在初始化已经进行了Range范围分区的表上,可以对其中一个分区再进行hash哈希分区。 分区带来的好处 性能的提升(Increased performance) – 在扫描操作中,如果MySQL的优化器知道哪个分区中才包含特定查询中需要的数据, 对数据管理的简化(Simplified data … Continue reading
windows server下如何定时备份MYSQL数据库
mysql不像MSSQL那样可以自动备份数据库的功能,但是我们可以写出任务计划来让服务器自动定时去备份MYSQL,在LINUX下可以用AT和CRON配合SHELL来实现,当然AT只是一次性动作罢了。 在WINDOWS SERVER下可以使用WINDOWS的计划任务来实现,主要是写BAT就可以了,下面给出个WINDOWS下的备份BAT脚本,可以实现按天备份。可惜的是没有增量备份的功能,但是有些商用软件能实现这个功能,比如zmanda就能实现热备份。 @echo off mysqldump –opt -u root –password=root test > D:\db_backup\test.sql xcopy D:\db_backup\oslide.sql D:\db_backup\%date:~0,10%\ /y
配置MYSQL远程登录
mysql默认是不允许远程连接的,因为有很大的安全隐患,所以需要手动增加可以远程访问数据库的用户; 修改/etc/mysql/my.cnf,把文件里面的skip-networking注释掉,然后重新启动MYSQL,使用netstat -an | grep 3306命令查看3306端口是否打开; 解决方法: 1、 改表法。 可能是你的帐号不允许从远程登陆,只能在localhost。这个时候只要在localhost的那台电脑,登入mysql后,更改 “mysql” 数据库里的 “user” 表里的 “host” 项,从”localhost”改称”%” mysql -u root -p 密码 mysql>use mysql; mysql>update user set host = ‘%’ where user = ‘root’; mysql>select host, user from user; 2.、授权法。 例如,你想root使用mypassword密码从任何主机连接到mysql服务器的话。 … Continue reading
Posted in mysql
Leave a comment