常用sql 、 数据库导入导出 、 优化 、更改用户密码、全文搜索
===语句===
DISTINCT用于返回唯一不同的值
对指定列进行返回组合的唯一
SELECT DISTINCT `userRole`, `userChannel`,`userInviteUid` FROM `t_user`
LIKE 操作符 _,%
SELECT * FROM Persons WHERE City LIKE 'N%'
注:在用索引时,支持用 '字符%/_'
IN 操作符允许我们在 WHERE 子句中规定多个值
SELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,...)
BETWEEN 操作符 值可以是数值、文本或者日期;包括两头
SELECT * FROM Persons WHERE LastName BETWEEN 'Adams' AND 'Carter'
SELECT * FROM Persons WHERE LastName NOT BETWEEN 'Adams' AND 'Carter'
JOIN
LEFT JOIN
SELECT * FROM `A` LEFT JOIN `B` ON `A`.aID = `B`.bID
是以A表的记录为基础的,left join是以左表为准的.
左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID).
B表记录不足的地方均为NULL.
RIGHT JOIN
SELECT * FROM `A` LEFT JOIN `B` ON `A`.aID = `B`.bID
以右表(B)为基础的,A表不足的地方用NULL填充
INNER JOIN
SELECT * FROM `A` INNER JOIN `B` ON `A`.`A`ID = `B`.bID
只显示符合条件的记录,即列出A、B都有的。(INNER JOIN 与 JOIN 相同)
FULL JOIN
SELECT * FROM `A` FULL JOIN `B` ON `A`.`A`ID = `B`.bID
只要其中某个表存在匹配(返回所有的行),FULL JOIN 关键字就会返回行
UNION 操作符用于合并两个或多个 SELECT 语句的结果集 UNION ALL
SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2
SELECT COUNT(column_name) FROM table_name
COUNT(column_name) 函数返回指定列的值的数目(NULL 不计入)
SELECT MIN(column_name) FROM table_name
AVG(),MAX(), MIN(),SUM()函数
SELECT Customer,SUM(OrderPrice) FROM OrdersGROUP BY CustomerHAVING SUM(OrderPrice)<2000
HAVING 子句
GROUP BY 语句合计函数 (比如 SUM) 常常需要添加 GROUP BY 语句
======
日期时间
NOW() 返回当前的日期和时间
CURDATE() 返回当前的日期
CURTIME() 返回当前的时间
UNIX_TIMESTAMP(date) 获取unix时间截
SELECT DATE('2008-12-29 16:25:46.635')
DATE(date) 提取日期或日期/时间表达式的日期部分
SELECT EXTRACT(YEAR FROM '2008-12-29 16:25:46.635')
EXTRACT(unit FROM date) 返回日期/时间按的单独部分
SELECT DATE_ADD('2008-12-29 16:25:46.635',INTERVAL 2 DAY)
DATE_ADD(date,INTERVAL expr type) 给日期添加指定的时间间隔
DATE_SUB(date,INTERVAL expr type) 从日期减去指定的时间间隔
SELECT DATEDIFF('2009-12-30','2008-12-29') AS DiffDate
DATEDIFF(date1,date2) 返回两个日期之间的天数
SELECT DATE_FORMAT(NOW(),'%Y %m %d %h:%i %s')
DATE_FORMAT(date,format) 用不同的格式显示日期/时间
字符串味道
SELECT LCASE(column_name) FROM table_name
UCASE 函数把字段的值转换为大写
LCASE 函数把字段的值转换为小写
SELECT MID(`login`, 1, 3) from `user`
MID(c,start[,end]) 函数用于从文本字段中提取字符,MID(column_name,start[,length]),start从1开始
SUBSTRING(c,start[,end]), substring(),同MID
LEFT(c,number_of_char)
RIGHT(c,number_of_char)
SELECT ROUND(column_name,decimals) FROM table_name
ROUND(c,decimals) 函数用于把数值字段舍入为指定的小数位数。decimals小数位数
FORMAT(c,format)
===================================================================
运算符###########################################
=,!=(<>),>,>=,<,<= is null , is not null, isnull(expr) expr between min and max expr in(v1,v2,...)
流程#############################################
mysql> select ifnull(1,0); #如果第一个参数为NULL,则返回第二个参数值,否则返回原值.
------------------------------------------------
mysql>select case 1 when then 'one' when 2 when 'two' else 'more' end;
------------------------------------------------
mysql>select if(1>0,'ok','no') #如果条件为真则返回OK,否则返回NO.
------------------------------------------------
mysql>select nullif(1,2) #如果exp1 = exp2则返回NULL,否则返回exp1
------------------------------------------------
字符串###########################################
mysql>select ASCII('a'); #返回字符串最左边那个字符的ASCII码值
-----------------------------------------------
mysql>select oct(12); #返回字符串表示的八进制形式.
-----------------------------------------------
mysql>select hex(255); #返回字符串的十六进制形式.
-----------------------------------------------
mysql>select char(3333342); #返回ASSCII码值对应的字符串
------------------------------------------------
mysql>select char_length('text') #返回字符串的个数
------------------------------------------------
mysql>select length(text) #返回字符串的字节数
________________________________________________
mysql>select concat('str1','str2','str3','str4','strn',) #将参数连接成字符串返回
-------------------------------------------------
mysql>select locate('字串','母串') #返回字串在母串中第一次出现的位置,如果不存在则返回0
-------------------------------------------------
mysql>select lpad('str',11,'.');
mysql>select rpad('str',11,'.'); #用字符串对str进行左边或右边填充直到他的长度达到11.
-------------------------------------------------
mysql> select left('strstrstr',5); #返回字符串最左边的N个字符. mysql>select right('strstrstr',5); #返回字符串最右边的N个字符.
-------------------------------------------------
mysql> select substring('xxxxxx',3,3); #从字符串的第三个字个位置起截取三个字符.
-------------------------------------------------
mysql> select ltrim(str);
mysql>select rtrim();
mysql> select trim(' str ');
mysql> select trim(both 'x' from 'xxx..xxx'); #去空格
-------------------------------------------------
mysql> select space(6); #返回门个空格
-------------------------------------------------
mysql> select repeat('str',3); #返回重复三次的字符串
-------------------------------------------------
mysql>select replace('www.tom.com','tom','sina'); #字符串替换
-------------------------------------------------
mysql>select reverse('abc'); #字符串颠倒
-------------------------------------------------
mysql>select lower('UPPER');
mysql>select upper('lower'); #转换大小写
--------------------------------------------------
mysql> update table set filed = load_file('/tmp/file'); where id=1; #读入文件
--------------------------------------------------
mysql> select abs(-1); #返回绝对值
--------------------------------------------------
mysql> select 4 div 2; #除
--------------------------------------------------
mysql> select 5 mod 2; #余
--------------------------------------------------
mysql> select floor(x) #返回不大于X的最大整数值
--------------------------------------------------
mysql> select ceiling(x) #返回大于X的最小整数
--------------------------------------------------
mysql> select round(2.23) #四舍五入
__________________________________________________
时间 mysql>select now(); select now() + 0; #返回时间
--------------------------------------------------
mysql>select curdate(); select curdate() + 0; #返回年月日
--------------------------------------------------
mysql>select curtime(); select curtime() + 0 #返回小时分秒
--------------------------------------------------
mysql>select database() #返回当前数据库的名子
--------------------------------------------------
mysql>select user();
select system_user();
select session_user(); #返回当前MYSQL用户名子
---------------------------------------------------
mysql>select password('abc'); #口令加密
---------------------------------------------------
删除所有表记录 #truncate table 表名;
#速度快于delete from table
---------------------------------------------------
加载数据 load data infile /PATH/文件 into table || mysqlimport dbname /PATH/file.txt 相关命令参数如下:
Usage: mysqlimport [OPTIONS] database textfile... --print-defaults 输出程序参数并退出,该选项为缺省值
--no-defaults 不读入缺省参数,该选项为缺省值
--defaults-file=# 从给定的文件中读入参数
-d, --delete 删除表中元素
--fields-terminated-by=name 每个元素之间的分隔符
--fields-enclosed-by=name 将每个元素括起来的符号
-f, --force 如果有sql错误也继续执行 -?,
--help 显示帮组并退出 -h,
--host=name host的名字 -i,
--ignore 如果有重复的行,保持原行
--ignore-lines=# 忽略开始n行
--lines-terminated-by=name 每行元素分隔符
-p, --password[=name] 连接host时使用的密码 -r,
--replace 如果key重复,使用新行代替原行 -u,
--user=name 用户名
----------------------------------------------------------
全文搜索怎么建立?
例如: create table mytable ( name varchar(10), address text, fulltext(name,address) );//OK搞定了
----------------------------------------------------------
MYSQL全文搜索(FULLTEXT 索引用于 MyISAM 表,可以在 CREATE TABLE 时或之后使用 ALTER TABLE 或 CREATE INDEX 在 CHAR、VARCHAR 或 TEXT 列上创建)
例: mysql>select * from table where match(字段一,字段二,字段三) against('要搜索的关键字');
------------------------------------------------------------
MYSQL逻辑全文检索?
呵呵 是像这样地: mysql> select * from table where match(字段一,字段二...) against('+要找的数据-不要找的数据');
---------------------------------------------------------
补充逻辑全文检索: against里边还可以有什么东东?(1)数据1 数据2: 表示要找到资料当中至少包含数据1或数据2(两数据有一个即可) (2)+ 数据1 +数据2:表示两个数据都要包含在内 (两数据必须同时存在)
----------------------------------------------------------
MYSQL' 查询缓存'是什么东东接着砍砍?优点?对于执行大量相同SELECT的操作来说这个东西可以提高查询效率(传说是百分之一秒,现在用的MYSQL是 5.0,也许5.0.24会不同了呢?),MYSQL执行查询的时候他会在内存中留下以往查询的语句,这样如果下次有相同的查询时就直接调用这个(前提条 件这些查询语句必须完全相同!差一点都不行严格到按字节匹配,MYSQL还不支持模糊,并且有过期时间是动态更新的),其实同个SELECT不是这么简单 的,他也要经过许多的步骤 --》对 MYSQL服务器而言,所以下一个脚本里加上这个功能吧.
------------------------------------------------------------
如何查看环境变量查询缓存是否开始?其他状态查询方相同的 mysql>show variables like 'have_query_cache'; mysql>show variables ; //显示所有状态 mysql> show variables like '%关键字%' ==>模糊查找。。。。
----------------------------------------------------------
mysql>select sql_cache 字段一,字段二 from table; 指定此语句缓存
'''''sql_no_cache''''''''''''''''''''';。。。。。不缓存
---------------------------------------------------------
缓存查询结果的最大值也可自己设置
mysql> set @@global.query_cache_limit=1024; mysql> select @@query_cache_limit;
------------------------------------------------------------
整理缓存。。。相当于硬盘的磁盘清理,不过不要担心,这个不会清掉缓存中的查询
mysql> flush query cache;
------------------------------------------------------------
清空cache ===》这个是会清掉缓存中的所有查询!
mysql> reset query cache ; ==== mysql> flush tables;
----------------------------------------------------------
查看缓存状态,
show status like 'qcache%'
----------------------------------------------------
禁止查询缓存
set session query_cache_type = off;
----------------------------------------------------
更改用户密码:
1. mysqladmin -uuser password mima;
2.mysql> set password for root=password('abcdefg');
3.mysql> update user set password=password('abcdef')
where user='user1'
--------------------------------------------------
mysqldump --databases db1 db2 > 多个数据库备份
1.导出整个数据库
mysqldump -u 用户名 -p 数据库名 > 导出的文件名
mysqldump -u wcnc -p smgp_apps_wcnc > wcnc.sql
2.导出一个表
mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名
mysqldump -u wcnc -p smgp_apps_wcnc users> wcnc_users.sql
3.导出一个数据库结构
mysqldump -u wcnc -p -d --add-drop-table smgp_apps_wcnc >d:wcnc_db.sql
-d 没有数据 --add-drop-table 在每个create语句之前增加一个drop table
4.导入数据库
常用source 命令
进入mysql数据库控制台,
如mysql -u root -p
mysql>use 数据库
然后使用source命令,后面参数为脚本文件(如这里用到的.sql)
mysql>source d:wcnc_db.sql (注:如果写成source d:\wcnc_db.sql,就会报语法错误)