--------------------------------------mysql函数------------------------
函数的定义
函数:具有某种功能的独立程序段。
⑴从程序设计方法看函数:它是实现模块化程序设计的语法元素。
⑵从程序的组成方式看函数:它是程序的基本组成单位。
一、 函数结构
CREATE FUNCTION 函数名 RETURNS 返回类型
BEGIN
-----
END
---顺序结构(格式化日期为XXXX年XX月XX日)
解析:
调用:SELECT getdate(‘2009-06-23 00:00:00’);返回 '2009年06月23日'
use test;
select now();
DROP FUNCTION IF EXISTS getdate;
CREATE FUNCTION getdate(gdate datetime) RETURNS varchar(255)
BEGIN
DECLARE x VARCHAR(255) DEFAULT '';
SET x= date_format(gdate,'%Y年%m月%d日');
RETURN x;
END
select getdate(now());
----分支结构(截取字符串)
解析:
这是一个截取字符串的函数,参数有两个,一个是字符串s,一个是数字n,将字符串s保留前n位,如果字符串的个数小于n,则返回字符串s,如果大于n,则返回前n位。
DROP FUNCTION IF EXISTS cutString;
CREATE FUNCTION cutString(s VARCHAR(255),n INT) RETURNS varchar(255)
BEGIN
IF(ISNULL(s)) THEN RETURN '';
ELSEIF CHAR_LENGTH(s) < n THEN RETURN s;
ELSE RETURN LEFT(s,n);
END IF;
END
select cutString('abcde',2);
----循环结构(产生n个*)
解析:
产生n个*。
DROP FUNCTION IF EXISTS morestar;
CREATE FUNCTION morestar(n INT) RETURNS text
BEGIN
DECLARE i INT DEFAULT 0;
DECLARE s TEXT DEFAULT '';
myloop:LOOP
SET i=i+1;
SET s = CONCAT(s,'*');
IF i > n THEN LEAVE myloop;
END IF;
END LOOP myloop;
RETURN s;
END
select morestar();
.循环语句
(1).while循环
[label:] WHILE expression DO
statements
END WHILE [label] ;
(2).loop循环
[label:] LOOP
statements
END LOOP [label];
(3).repeat until循环
[label:] REPEAT
statements
UNTIL expression
END REPEAT [label] ;
--------------------------------------mysql索引------------------------
索引的定义
索引:在数据库的表或者视图上创建的对象,使用树状结构存储.
使用索引的原因
提高对含有大量记录的表的查询效率
索引优缺点
优点
加快访问速度
保证行的唯一性
缺点
带索引的表在数据库中需要更多的存储空间
操纵数据的命令需要更长的处理时间,因为它们需要对索引进行更新。
索引的类型
普通索引
唯一性索引
全文索引
格式:
普通索引可以通过以下几种方式创建:
创建索引,例如CREATE INDEX <索引的名字> ON tablename (列的列表);
修改表,例如ALTER TABLE tablename ADD INDEX [索引的名字] (列的列表);
创建表的时候指定索引,例如CREATE TABLE tablename ( [...], INDEX [索引的名字] (列的列表) );
例:修改test表的索引
ALTER TABLE news ADD INDEX index_title (title);
唯一索引可以通过以下几种方式创建:
创建索引,例如CREATE UNIQUE INDEX <索引的名字> ON tablename (列的列表);
修改表,例如ALTER TABLE tablename ADD UNIQUE [索引的名字] (列的列表);
创建表的时候指定索引,例如CREATE TABLE tablename ( [...], UNIQUE [索引的名字] (列的列表) );
例:修改news表的主键
ALTER TABLE news ADD PRIMARY KEY (id);
单列索引与多列索引
例:修改test表的索引(title,time)
ALTER TABLE test ADD INDEX index_title_time (title,time);
全文索引与搜索
修改mysql安装目录下的my.ini文件中default-storage-engine=的值为MyISAM
CREATE TABLE articles (
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
title VARCHAR(200),
body TEXT,
FULLTEXT (title,body)
);
INSERT INTO articles VALUES
(NULL,'MySQL Tutorial', 'DBMS stands for DataBase ...'),
(NULL,'How To Use MySQL Efficiently', 'After you went through a ...'),
(NULL,'Optimising MySQL','In this tutorial we will show ...'),
(NULL,'1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
(NULL,'MySQL vs. YourSQL', 'In the following database comparison ...'),
(NULL,'MySQL Security', 'When configured properly, MySQL ...');
SELECT * FROM articles
WHERE MATCH (title,body) AGAINST ('database');
+----+-------------------+------------------------------------------+
| id | title | body |
+----+-------------------+------------------------------------------+
| 5 | MySQL vs. YourSQL | In the following database comparison ... |
| 1 | MySQL Tutorial | DBMS stands for DataBase ... |
+----+-------------------+------------------------------------------+
2 rows in set (0.00 sec)
函数 MATCH() 对照一个文本集(包含在一个 FULLTEXT 索引中的一个或多个列的列集)执行一个自然语言搜索一个字符串。搜索字符串做为 AGAINST() 的参数被给定。搜索以忽略字母大小写的方式执行。对于表中的每个记录行,MATCH() 返回一个相关性值。即,在搜索字符串与记录行在 MATCH() 列表中指定的列的文本之间的相似性尺度。
示例显示如何检索一个明确的相似性值。如果即没有 WHERE 也没有 ORDER BY 子句,返回行是不排序的。
mysql> SELECT id,MATCH (title,body) AGAINST ('Tutorial') FROM articles;
+----+-----------------------------------------+
| id | MATCH (title,body) AGAINST ('Tutorial') |
+----+-----------------------------------------+
| 1 | 0.64840710366884 |
| 2 | 0 |
| 3 | 0.66266459031789 |
| 4 | 0 |
| 5 | 0 |
| 6 | 0 |
+----+-----------------------------------------+
6 rows in set (0.00 sec)