mysql常用语句整理

回复 收藏

        
关键字/子句       
作用
用法
解释语法
备注
show       
databases       
查看数据库列
tables
查看表列
columns
查看表结构
columns from 库名;
describe       
查看表结构
describe tablename;
describe  tableanme;是show columns from tablename;的一种快捷方式
status       
显示服务器状态
create databases
显示库或表的mysql语句
show create database
show create table
grants       
显示授权用户
errors
显示错误信息
warnings
显示警告信息
select       
distinct       
过滤重复值
select distinct 列名  from 表名
limit       
返回第一行或前几行
select 列名  from 表名 limit 5;
5:返回不多于5行;limit  5,5(第一个数是开始位置,第二个数返回行)PS:检索第一行为0行
limit n offset x       
从n行取n行,类似limit x,n;
limit 4 offset 3
表示从3行开始取4行
order by       
检索排序(默认升序)desc降序
select 列名 from 表名  order by 列名 [desc]
between       
范围值检查
select 名称,价格 from 表名  where 价格 between 5 and 10;
译:检索价格在5之10之间的产品名称。
is null
空值检查
select 名称 from 表名  where 价格 is null;
译:检索出价格是空的产品名
where子句       
where
条件过滤(过滤行)
select 列名 from 表名  where 列名='fuses';
如果过滤值为数字,那么不需要加引号。同时过滤字符串匹配是不区分大小写。
where+and
过滤多列(满足匹配所有条件)
select ID,名称,价格 from  表名 where ID=100 and 价格 <=10;
译:检索供应商100且价格小于10的所有产品和价格;
PS:需要同时满足2个条件。
or
过滤列(满足匹配任意条件)
select 名称,价格 from 表名  where ID=101 OR ID=102;
译:检索出ID为101和102的所有名称跟价格。
where+or+and       
高级过滤
select 名称,价格 from 表名  where (ID=102 or ID=103)and 价格>=10;
译:检索出10元以上且有102和103制造商提供的所有商品.
where ID=102 or  ID=103 and 价格>=10;(译:检索出103制造商价格在10以上的商品,且检索出102制造商任意价格商品,原因是and优先级较高)
where+in
范围中每个条件匹配
select 名称,价格 from 表名  where ID in (102,103) order by 名称;
译:检索出102和103制造商的所有产品,并名称升序排序。
IN与OR功能相同,IN执行更快
where+not+in
否定条件
select 名称,价格 from 表名  where ID not in (102,104) order by 名称;
译:检索出除102和103制造商的所有商品。
通配符       
like +%
%表示任意字符出现次数
select ID,名称 from 表名  where 名称 like 'xx%';
译:检索出名称以xx开头的
like+_       
_只匹配单个字符
select ID,名称 from 表名  where 名称 like '_xxx';
译:检索出任意字符开的数据
正则表达式       
regexp
与正文匹配
select 名称 from 表名  where 名称 regexp '1000'order by 名称;
译:检索出名称包含1000的名称
(like与regexp区别:like匹配整列,而regexp匹配列值中出现的)匹配大小写区分  regexp binary 'Jet .000'
regexp '|'
进行OR匹配(匹配其中之一)
select 名称 from 表名  where 名称 regexp '1000|10001'order by 名称;
译:检索出满足1000或10001条件的名称。若要进行多个1000|2000|3000
regexp '^[]'       
匹配任意单一字符
select 名称 from 表名  where 名称 regexp '[123]000'order by 名称;
译:检索出以1或2或3开头的名称  1000或2000或3000.
若不加^那么将把[123]匹配列中的值,只要包含1或2或3  都将打印出来。另外[^]表示匹配除[]内的任何字符
regexp '[0-9]'或[a-z]
范围集合
select 名称 from 表名  where 名称 regexp '[1-5]000' order by 名称
译:匹配[1-5]000,当然是匹配的整个列值  如果1000-5000前后各有字符,也都将被匹配出来。
regexp '\\.'       
\\表示查找
select 名称 from 表名  where 名称 regexp '\\.' order by 名称
译:检索出名称包含.符号
(\\f换页 ,\\n换行,\\r回车,\\t制表,\\v纵向制表)如果需要检索\  那么需要\\\
重复元字符
*/+/?/{n}/{n,}/{n,m}
重复元字符
select 名称 from 表名  where 名称 regexp '\\([0-9] sticks?\\)'
译:
\\:匹配 、[0-9]:匹配任意数字、  sticks?:?前字符可有可无 、 \\):匹配)
字符类
[:digit:]
任意数字(同[0-9])
select 名称 from 表名  where 名称 regexp '[[:digit:]]{4}' boder by 名称
译:检索名称4个数字一起的
定位元字符       
^
从文本的开始
select 名称 from 表名  where 名称 regexp '^[0-9\\.]' boder by 名称
译:检索出名称以任何数字或.为列值中第一字符才匹配出来
(^:文本的开始、$:文本的结尾、[[:<:]]:词的开始、[[:>:]]:词的结尾)
         字段       
concat()
两列拼接函数
select  concat(列名,'(',列名1,')') from 表名 order by 列名
译:检索出列名(列名1)  各串之间用逗号分割,列名 、 '('、列名1、')'
Rtrim()
删除列中数据右侧多余的空格
select  concat(Rtrim(列名),'(',Rtrim(列名1),')')from 表名 order by 列名
译:检索出列名和列名1拼接,并去掉列名和列名1的右侧数据空格
(LTrim():去掉左边/Trim():去掉两边空格)
        
AS
别名
select  concat(Rtrim(列名),'(',Rtrim(列名2),')')AS 新列名 from 表名 order by 列名
译:检索出值并将赋予列别名
执行算术计算
*
select ID,数量,价格,数量*价格 AS 总价 from 表名 where 条件       
译:检索出总价,赋予别名输出
(计算符号:/ * - +)  PS:select 3*2;   select Trim('abc');  select now();
        
文本函数
Upper()
文本转换为大写
select 名称,Upper(名称) AS 新名称 from 表名 order by 名称
译:将名称转换为大写
PS:Soundex()是一个将任何文本串转换为描述其语音表示的字母数字模式的算法,对发音进行比较而不是字母比较
        
Soundex()       
发音匹配
select 名字 from 表名  where 名字='Y.Lie'
译:将某顾客实际英文名Y.Lie输入错误成Y.Lee  ,我们就使用Soundex()匹配Y.Lie
日期、时间处理函数       
Date()
匹配列中日期部分(年月日)
..where  Date(date)='2005-09-01'
译:检索出2005-9-1所有的行
Year()+Month()
检索本月所有信息
..where Year(date) =  2005 AND Month(date)= 9
译:检索出date为2005年9月的所有行
(year:从日期或日期时间中返回年份的函数;Month:从日期中返回月份)
         聚合函数       
AVG()
平均值
avg:只能用于单列,要想多列,需要使用多个。  AVG()函数忽略列值为null行
        
COUNT()
计算行数
COUNT(*):计算表中所有行,包括NULL。  COUNT(column):计算表中列,忽略NULL行。
        
MAX()
最大值
MAX():如数据想通,那么返回最后一行,忽略值为null行
        
MIN()
最小值
MIN():如数据相同,那么将会返回最前面的行,忽略值为null行
        
SUM()
求和
SUM():多列计算可以利用算术操作符。
         组合集合函数       
AVG(DISTINCT 列名)
过滤想相同的值,在进行平均值计算
DISTINCT不能用于CONUT(*),否则会产生错误,DISTINCT必须使用列名,不能用于计算或表达式.MIN()/MAX()可以使用,但是没有价值。
        
多函数同时使用
SELECT COUNT(*) as  items MIN(列名) AS min,max(列名) as min, avg(列名) as avg from 表名       
         分组数据       
GROUP BY子句
创建分组
select id ,count(*)  as prods from products GROUP BY id
译:检索出所有商品的行数,然后利用GROUP  BY id 汇总每个供应商供应多少种商品。
子句必须出现在where子句之后。
        
WITH ROLLUP
SELECT id,count(*) as  prods from 表名 GUOUP BY id WITH ROLLUP       
使用WITH  ROLLUP关键字,可以得到每个分组以及每个分组汇总级别(针对每个分组)的值
        
过滤分组
HAVING子句
过滤分组
select id ,COUNT(*)  as prods from products where  price>=10 GROUP BY id HAVING COUNT(*) >=2
译:检索出2个(含)以上、价格为10(含)以上的产品的供应商
区别:where:过滤行,在数据前分组前进行过滤。HAVING:过滤分组,在数据分组后进行过滤
        
分组、排序
GROUP BY跟ORDER BY
分组排序(先分后排)
select  num,SUM(quantity*price) AS ordertotal from ordertotal GROUP BY num HAVING  SUM(quantity*price)>=50;
译:检索出总计订单价格大雨等于50的订单的订单号和订单价格
要想总价升序,只需要在最后加入ORDER  BY ordertotal
        
作为计算字段
select COUNT(*)
select 列名,列名2,(select COUNT(*) FROM 表名 )FROM 表名2  OBDER BY 列名       
译:检索出列,作为字段。
where  orders.cust_id  = customers.cust_id  orders表中的cust_id与当前正从customers表中检索的cust_id
        
创建联结
多表查询       
select  v_name,p_name,p_price from vendor,products WHERE vendors.v_id = products.v_id  ORDER BY v_name,p_name;
译:检索出供应商名称,商品名称,商品价格  。
vendors:供应商表   products:存储产品信息
        
内部联结
INNER JOIN …ON
查询多表列
select  v_name,p_name,p_price from vendor INNER JOIN products ON vendors.v_id = products.v_id ;
译:检索出供应商名称,商品名称,商品价格  。
ON子句实际条件与窗体与where相同
        
自然结
同表在select子句中使用多次       
select  p1.prod_id,p1.prod_name from products AS p1,products AS p2 where  p1.vend_id=p2.vend_id AND p2.prod_id='DTNTR';
译:发现某商品ID为DTNTR,这是需要检索该商品供应商,然后在查询该供应商其余商品ID是否为“DTNTR”
自然联结
排除多次出现,使列只返回一次       
外部联结
OUTER JOIN…ON
select  customers.cust_id ,orders.order_num FROM customers LEFT  OUTER JOUN orders ON customers.cust_id=orders.order_id;       
译:检索所有客户,包括那些没有订单的客户
在使用OUTER  JOIN语法时,必须使用LEFT和RIGHT关键字,指定包含起所有行的表 LEFT OUTER JOIN 从from子句的左边表。
        
组合查询
UNION [ALL]关键字
select  ….from…where…UNION select1 …from1…where1       
注意:查询必须包含想通的列、表达式或聚合函数,另外UNION默认是去掉重复的行,而UNION  ALL是包含重复行
        
创建全文搜索
FULLTEXT()  ENGINE
定义某列可进行全文搜索
create table pro(id  int NOT NULL AUTO_INCREMENT,text test NULL,…FULLTEXT(text))ENGINE=MyISAM;
常见的引擎MyISAM和InnoDM  前者支持全文,后者不支持。注意:不要在导入数据的时使用FULLTEXT,更新索引需要花时间,最好的处理方式是先导入数据,再修改表,定义FULLTEXT
        
进行全文搜索
Match() Against()
全文搜索
select test from pro  where Match(text) Against('rabbit');
译:检索text列中含有rabbit
Match():指定被搜索的列  Against():指定要使用的搜索表达式
        
查询扩展(4.11↑才有)
WITH QUERY EXPANSION
扩展查询
select…where  Match(text) Against('anvils' WITH QUERY EXPANSION)
译:检索出与anvils有关的行
查询扩展功能实在4.1.1中引入的。
        
布尔文本搜索
IN BOOLEAN MODE
全文搜索
select …where  Match(text) Against('heavy' IN BOOLEAN MODE);
译:检索出含有heavy的行
布尔方式可以不用加入FULLTEXT索引,还有查询比较缓慢,性能将随数据量的增加而降低
INSERT       
INSERT  INTO()..VALUES()       
添加行
INSERT  [LOW_PRIORITY] INTO 表名(列1,列2,列3..)VALUES('值1,值2,值3..');
向表中插入数据
LOW_PRIORITY:降低INSERT语句的优先级,原因是数据表被多个客户访问,在执行INSERT操作可能很耗时(索引需要更新)还可能降低select性能
        
INSERT  INTO()..VALUES(),VALUES();       
多行数据插入
INSERT  [LOW_PRIORITY] INTO 表名(列1,列2,列3..)VALUES('值1,值2,值3..'),VALUES('值1,值2,值3..');
向表中多次插入数据
这可以这样 INSERT  [LOW_PRIORITY] INTO 表名(列1,列2,列3..)VALUES('值1,值2,值3..');INSERT [LOW_PRIORITY]  INTO 表名(列1,列2,列3..)VALUES('值1,值2,值3..')
        
INSERT SELECT       
检索出列值,在插入表中
INSERT INTO  表1(列1.1,列1.1,列1.3)SELECT 表2(列2.1,列2.2,列3.1) from 表2
译:检索出表2中的列插入到表1的列
UPDATE       
UPDATE…SET       
更新
UPDATE 表 SET  email='asd@163.com' where id=1005;
译:更新表中ID为1005用户邮箱帐号为asd@163.com
让某列=NULL 就是删除某个列的值
        
IGNORE关键字       
更新错误,依然更新行
UPDATE  IGNORE 表 SET email='asd@163.com' where id=1005;
译:更新表中ID为1005用户邮箱帐号为asd@163.com,更新错误时,继续更新。
DELETE       
删除行
DELETE FROM 表 where  id=1005;
译:删除ID为1005的行
删除表所有行,但是不能删除表本身  也可以使用TRUNCATE  TABLE删除表的所有行,速度更快,原因是删除原来的表,并重新创建一个表,而不是逐行删除。
        
创建表
CREATE TABLE
创建表
CREATE  TABLE 表名(列名 类型 是否允许空,….PRIMARY  KEY (列名))
译:创建基础表
PRIMARY  KEY():指定表中主键
        
IFNOT EXISTS       
查看表名是否存在,不存在时创建
AUTO_INCREMENT       
自动增量
没表允许一个,而且必须被索引
        
DEFAULT       
默认值(插入行时不给值,就使用默认值)
不允许使用函数作为默认值,默认值不是NULL值
        
InnoDB、MEMORY、MY ISAM       
引擎类型
InnoDB:可靠的事务处理引擎;MEMORY:功能等同于My  ISAM,存储与内存,速度快,特别适用于临时表。 My ISAM:性能极高的引擎,支持全文搜索。引擎可以混用,但是外键不能跨引擎。
        
ALTER TABLE       
更改表结构
ALTET TABLE 表名 ADD 列名 类型 FOREIGN  KEY(列名2) REFERENCES 表名2 (列名2);ALTET TABLE 表名 DROP COLUMN 列名;
        
DROP TABLE       
删除表
DROP TABLE 表名
删除整个表,而不是其内容
        
RENAME TABLE       
重命名
TENAME TABLE 新表名 TO  旧表名
视图(虚)       
创建视图
CREATE VIEW
用于创建视图
CREATE VIEW pcts AS  SELECT cust_name,cust_contact,prod_id from cs,os,ois where  cs.cust_id=orders.cust_id AND or.order_num =os.orser_num
译:创建一个名为pcts的视图,联结三个表,返回任意商品的所有客户列表
视图主要用于数据检索,简化语句。
存储过程       
CREATE PROCEDURE  BEGIN..END       
创建存储过程
DROP PROCEDURE IF  EXISTS       
当存储过程,存在时删除
CONMMENT关键字       
该关键字不是必需的,但是给出将在SHOW  PROCEDURE STATUS
        
SHOW CREATE PROCEDURE  ..       
检查存储过程
STATUS:列出所有存储过程 SHOW  PROCEDURE STATUS LIKE 'ordertotall' 可使用like 指定一个过滤模式
游标       
触发器       
创建触发器
CREATE TRIGGER
创建触发器INSERT
CREATE  TRIGGER newpr AFTER  INSERT ON 表名 FOR EACH ROW SELECT 'Product added'
译:成功添加一条商品信息后,就提示“Product added”
AFTER INSERT: 执行后触发事件  ,每表最多支持6个触发器,单一触发器不能多事简,多表关联
        
删除触发器
DROP TRIGGER
删除触发器
DROP TRIGGER newpr
触发器不能乐观更新或覆盖,修改一个触发器必须先删除在创建
        
INSERT触发器
CREATE TRIGGER newder  AFTER INSERT ON 表名 FOR EACH ROW SELECT   NEW.列
译:向表中插入数据后,触发信息保存在列中
BEFORE:活动前触发,主要用于数据验证验证和净化,还有UPDATE触发器。  AFTER:活动后触发,适用于INSERT触发器
        
DELETE触发器
UPDATE触发器
事务处理
   
    事务
    回退
    提交
    保留点       
控制事务处理
START TRANSACTION
标记事务开始
事务(transaction):指定SQL语句;回退(rollback)撤销指定SQL语句的过程;提交(commit)将未存储的SQL语句结果写入数据库表;保留点(savepoint):临时占位符,可以发布回退,挡雨整和事务处理不用;
COMMIT       
直接针对数据库表执行和编写(隐含提交
START TRANSACTION;  DELECT FROM 表 where 列=2010; DELET FROM 表2 where 列=2010;COMMIT;
ROLLBACK       
用来回退Mysql语句
SELECT * FROM 表 ; START TRNSACTION ; DELETE FROM 表  SELECT * FROM 表;ROLLBACK;  SELECT *FROM 表;
RELEASE SAVEPOINT       
保留点释放
也可以使用 ROLLBACK TO  保留名  进行回滚
SAVEPOINT       
保留点释放
SAVEPOINT 保留点名
autocommit       
设置是否自动提交更改
SET  autocommit=0;
译:不自动提交更改
0假不自动提交更改,  1真自动提交更改
SHOW CHARACTER SET;       
译:显示所有可以的字符集以及每个字符集的描述和默认
全球化
    本地化                
SHOW COLLATION;
CHARACTER SET                               
COLLATE                                COLLATE可以在ORDER BY GROUP BY HAVING  、聚合函数、别名中使用。如果绝对需要,串在字符集转换,可以使用Cast()或Convert()
安全管理        控制访问                                       
用户管理                                       
创建帐号        CREATE USER        创建账号        CREATE USER ben IDENTIFIED BY '123456'        译:创建一个帐号为ben 密码为123456        使用GRANT或 INSERT 也可以创建帐号   update  mysql.user set password=password('123456') where user='root';  修改密码
重命名        RENAME USER        重名帐号        RENAME USER ben TO  bfn        译:将帐号为ben修改为bfn
删除帐号        DROP USER        删除账号        DROP USER bfn        译:删除帐号为bfn        版本5以后 DROP USER 删除永华帐号和相关帐号权限 ;5以前只能删除帐号,不能删除相关的权限
SHOW GRANTS FOR        查看访问权限        SHOW GRANTS FOR 用户名        译:查看用户访问权限
添加访问权限        GRANT        添加访问权限        GRANT SELECT ON  数据库名.* TO 用户名;        译:允许用户在数据库中的所有表上使用select          .*:表示所有表
REVOKE        撤销访问权限        REVOKE SELECT ON  数据库名.* FROM 用户名;        译:撤销用户在数据库中的对所有表使用select        整个服务器 使用GANT ALL 或REVOKE ALL 整个数据库使用ON database.*;特定的表 ON  database.table;
SET PASSWORD        更改口令        SET PASSWORD FOR 用户=password('新密码')        译:更改新口令,并且使用password()函数进行加密        也可以使用SET PASSWORD=password ('密码')进行改密码
数据库维护                ANAL YZE TABLE        检查表键是否正确        ANALYZE YZE TABLE 表名;        译:检查表键        CHECK TABLE 针对多问题表进行检查    CHANGED检查自最后一次检查以来改动过的表   EXTENDED执行最彻底的检查 FAST只检查未正常关闭的表 MEDIUM 检查所有被删除的连接并进行行键检查
CHECK TABLE        对多表进行检查        CHECK TABLE 表名1,表名2;        译:对这个2个表进行检查        MyISAM表访问产生不正确和不一致结果,可能需要REPAIR TABLE来修复表(不应该经常修复,否则有大问题)  如果成一个表中删除大量数据,应该使用OPTIMIZE TABLE回收所有空间,从而优化表性能。
重要命令选项                   --help 显示帮助  --safe-mode装载减去某些最佳配置的服务器 --verbose显示版本信息然后退出
FLUSH LOGS        刷新或重新开始所有日志文件       
改善性能                SHOW VARIABLES /SHOW STATUS        查当前设置                SHOW PROCESSLIST显示所有活动进程。
EXOLANIN        让Mysql解释如何执行select
2016-07-09 18:22 举报
已邀请:
0

杨其顶

赞同来自:

{:7_165:}
挺全乎的
0

Yajun

赞同来自:

看的 让人蛋痛i_f31.gif

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: