1.关键字delimiter 的作用

  ①delimiter叫做“定界符”  ,经常可以在复合sql语句或者存储过程等语句中看到 DELIMITER $$ 的内容,

  ②DELIMITER $$的意义是告诉mysql解释器,命令的结束符号是$$,当解析sql语句遇到$$符号时,就可以执行sql语句了。

  ③DELIMETER定义定界符,这个符号可以是任意符号(只要不与sql语句冲突),

  ④默认情况下,delimiter是分号;在命令行客户端中,如果有一行命令以分号结束,

    那么回车后,mysql将会执行该命令。如输入下面的语句
   mysql> select * from test_table;
   然后回车,那么MySQL将立即执行该语句。

  ⑤更改了默认的定界符;为其他符号的时候,记得要改回默认的;,因为,执行sql语句时;分号已是约定俗成的符号了。

2.mysql5.1、5.5等不同版本数据迁移时会出现的错误以及解决方案,

①存储过程的定义存储在mysql数据库的proc表中,proc中的comment字段的类型在mysql5.1的版本中是char(64)类型的,然而在mysql5.5版本中是text类型的,在这两个版本的mysql进行数据迁移时,要注意更改comment的类型。

不修改的话会报错"Cannot load from mysql.proc. The table is probably corrupted",

关于这个报错信息可参考http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=28212952&id=3407891

http://wenku.baidu.com/link?url=exER7FiGM7PSzueM4cwJtDR5lz9jO4SQc044_a5RsBK6axIQxhODQoTEjL7e9OIhxXHx15tqcKQqXyNbHhaMJ9IKF2vknCts3vc2QnZp8hC

3.mysql命令行操作界面中使用\G可以将打印的内容变成列状显示,标题在左列,

4.mysql命令行操作界面下查看存储过程的信息的sql语句

show create procedure XXX存储过程名称 \G

 5.sql语句中嵌套IF、Case、When语句:

  参考http://blog.knowsky.com/240220.htm

    http://blog.csdn.net/zoohouse/article/details/5800799

 6.用户访问权限设置

  GRANT ALL PRIVILEGES ON db1.* TO 'user1'@'192.168.1.1' IDENTIFIED BY '1234556' WITH GRANT OPTION;

 最大权限GRANT ALL PRIVILEGES ON *.* TO 'user1'@'%' IDENTIFIED BY '1234556' WITH GRANT OPTION;

7.查询显示序号的sql,

情景案例:根据字段分页顺序查询tab1,显示每条记录的排名,假如每页记录数目是size,页码是page,第一页的页码是0,则每页的起始排名是size*page+1,

即@rownum:=size*page,sql语句为:

SELECT (@rownum:=@rownum+1) AS rankno,t1.* FROM tab1 as t1 ,(SELECT @rownum:=size*page) b ORDER BY score LIMIT page,size

8.having、where的不同:where 的作用是对查询结果进行分组前,将不符合where条件的行去掉,having 子句的作用是筛选满足条件的组,

select A,count(B) as num1 from tab1 group by A having C='XX',这样写是错误的,select 中没有C列,查询结果集中没有C列值,having也就没法对C进行筛选了,

应该改为select A,count(B) as num1,C from tab1 group by A having C='XX'

(ps:group by语句的意义在于分组查询后进行聚合函数运算统计,如果只是显示列值就不合适了,在having执行的前面,group by 后面接的having一般是表达式,如果是字段值判断,一定要确保是分组之前该字段的值是唯一的,所以一般要求判断这个字段就是分组的字段

9.Group By 和 Having, Where ,Order by这些关键字是按照如下顺序进行执行的:Where, Group By, Having, Order by,

参考:http://www.chengxuyuans.com/MySQL/63991.html

10.创建用户:参考 http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece763105392230e54f73260878e482a958448e435061e5a35bfe87969585393d82f2747f41802bdb12b71350527b59ec89f4aaae1d477719c6269304a891e59925af1dc4755d650964d99a90e97cce74199b9d3a3c82252dd22046df0809c2905&p=aa759a43d48a57f20be296375857&newp=9b6c861f86cc47ad01be9b7c1c6492695d0fc20e39d2db4c&user=baidu&fm=sc&query=mysql%B4%B4%BD%A8%D3%C3%BB%A7&qid=a5e398780002a9d7&p1=1

insert into mysql.user(Host,User,Password) values("localhost","phplamp",password("1234"));

刷新系统权限表

flush privileges;

 11.时间戳和日期转换:

 FROM_UNIXTIME( ):转为时间戳类型时间
UNIX_TIMESTAMP( ) :返回长整形类型时间

例如:

SELECT FROM_UNIXTIME(1234567890, '%Y-%m-%d %H:%i:%S')

mysql>SELECT FROM_UNIXTIME( 1249488000, '%Y年%m月%d' ) 
->2007年11月20

mysql> SELECT UNIX_TIMESTAMP('2009-08-06') ; 
->1249488000

 12.表结构相同时A表数据导入B表:

INSERT INTO table_B SELECT * FROM table_A

特殊数据导入

A表有id,n1,n2,n3字段

B表有id,n1,n2,n3,n4,n5等字段

现将B表中的n1,n2,n3组合的记录去重后导入A表中,并且A表主键也要录入值

sql语句:

INSERT INTO A表(id,n1,n2,n3)
select @row :=@row+1 AS id,t1.* from
(
SELECT DISTINCT ,n1,n2,n3 FROM B表
) t1,(select @row :=0) as t2

13.表字段数字类型float、double、decimal、numeric

  float可以表示小数,占4字节,double占8字节,double比float能存储更多的小数位,两者当接收到整数时会默认存储整数值,不加小数点,0.00实际存储的是0

  decimal(M,D)可以指定精度度最大是M位(不含小数部分)数字精确到小数点后D位,默认M是10,,如decimal(5,2)代表最大可以存储99999.99的数字

  numeric会自动转化为decimal,

  DECIMAL与FLOAT和DOUBLE的区别是:
  DECIMAL类型的值是以字符串的形式被储存起来的,它的小数位数是固定的。
  它的优点是,不会象 FLOAT和DOUBLE类型数据列那样进行四舍五入而产生误差,所以很适合用于财务计算;
  而它的缺点是:由于它的存储格式不同,CPU不能对它进行直接运算,从而影响运算效率。
  DECIMAL(M,D)总共要占用M+2个字节。

14. mysql中自增字段id的那些事

  ①实际可以显示传值插入数据,例如insert into student(id,name,age) values(10,'james',12);

②自动插入id时,会在当前所有记录中的id最大值加1

③删除的记录行,新增记录将会首先填补这些行的位置,但是自增id不会恢复原来被删除的id值

15.修改密码

use mysql;

update user set password = PASSWORD('123456') where user = 'root';

小提示:如果是mysql5.6以上安装了密码强度检测插件的,强制要求密码强度50以上的才能设置成功,

查看密码强度select VALIDATE_PASSWORD_STRENGTH('uqIsTpYmq7%Z');

如果是mysql 5.7以上版本,user表中没有password字段,取而代之的是authentication_string字段

update user set authentication_string = PASSWORD('uqIsTpYmq7%Z') where user = 'root';

最后刷新相关缓存:

flush privileges;

16.Mysql字符串拼接,用函数CONCAT('a','b') 结果是'ab'

17.mysql计算保留一位小数

CAST(age/10 AS DECIMAL(9,1))  //将age字段值除以10得到结果保留1位小数

18.Got a packet bigger than ‘max_allowed_packet’ bytes的解决方法:

数据导入报错:Got a packet bigger than‘max_allowed_packet’bytes的问题

这个问题可以有2个解决方法:

1.临时修改:mysql>set global max_allowed_packet=524288000;修改 #512M

2.修改my.cnf,需重启mysql

在 [MySQLd] 部分添加一句(如果存在,调整其值就可以):
max_allowed_packet=256M (根据实际情况调整数值)

19. DELETE和 EXISTS配合删除记录的方法:

DELETE t1 FROM schools AS t1
WHERE NOT EXISTS
(
    SELECT * FROM students AS t2
    WHERE t1.`school_id` = t2.`id`
)

20.用sql查看日志情况

SHOW VARIABLES LIKE 'log_%';

   错误日志:     -log-err 
查询日志: -log
慢查询日志: -log-slow-queries
更新日志: -log-update
二进制日志: -log-bin

mysql语法充电的更多相关文章

  1. MYSQL 语法大全自己总结的

    mysql语法大全 --------数据链接---------------------数据库服务启动net start mysql --关闭服务net stop mysql --登录 -u,-p后面不 ...

  2. 学习mysql语法--基础篇(一)

      前  言  mysql  mysql语法--本篇学习都是通过使用Navicat Premium(数据库管理工具),连接mysql数据. 本篇学习主要有两个部分:    一.创建用户,创建数据库,给 ...

  3. 学习mysql语法--基础篇(二)

      前  言  mysql  mysql语法--本篇学习都是通过使用Navicat Premium(数据库管理工具),连接mysql数据. 本篇学习主要有两个部分: [SQL语句的组成]   DML ...

  4. mysql语法之case when then与列转行

    mysql语法中case when then与列转行的使用场景非常丰富. case语句类似java中条件分支语句的作用,可以类比java中的switch语句或者if语句来学习. 其语法如下: case ...

  5. mongo 与 传统mysql语法对比

    MongoDB语法                                  MySql语法 db.test.find({'name':'foobar'})<==> select ...

  6. Mongodb与mysql语法比较

    Mongodb与mysql语法比较   mongodb与mysql命令对比 传统的关系数据库一般由数据库(database).表(table).记录(record)三个层次概念组成,MongoDB是由 ...

  7. mongodb linux基本启动 基础增删改 mysql语法的对比

    一.主流数据源类型 还存在自定义数据源以及REST接口数据,共6中数据源. 二.linux下启动连接数据库 进去mongodb的目录启动服务:mongo --host 192.168.320.826 ...

  8. mysql 基础篇5(mysql语法---数据)

    6 增删改数据 -- ********一.增删改数据********* --- -- 1.1 增加数据 -- 插入所有字段.一定依次按顺序插入 INSERT INTO student VALUES(1 ...

  9. MongoDB(五)mongo语法和mysql语法对比学习

    我们总是在对比中看到自己的优点和缺点,对于mongodb来说也是一样,对比学习让我们尽快的掌握关于mongodb的基础知识. mongodb与MySQL命令对比 关系型数据库一般是由数据库(datab ...

随机推荐

  1. java多态---ABC案列

    class A{ public void show(){ show2(); } public void show2(){ System.out.println("我"); } } ...

  2. HTML之Data URL(转)

    Data URL给了我们一种很巧妙的将图片“嵌入”到HTML中的方法.跟传统的用img标记将服务器上的图片引用到页面中的方式不一样,在Data URL协议中,图片被转换成base64编码的字符串形式, ...

  3. System.Web.HttpContext.Current.Session获取值出错

    在自定义类库CS文件里使用System.Web.HttpContext.Current.Session获取Session时提示错误:未将对象引用设置到对象的实例. 一般情况下通过这种方式获取Sessi ...

  4. 开源的Android开发框架-------PowerFramework使用心得(一)总体介绍

    PowerFramework是一款几乎囊括了所有Android基础功能的框架应用,这个框架目前是开源的,开发者可以在这个框架的基础上进行二次开发.结合开发者自己的UI设计,可以很快就能开发出具备基础应 ...

  5. iOS开发 UITableView之cell

    1.cell简介 UITableView的每一行都是一个UITableViewCell,通过dataSource的tableView:cellForRowAtIndexPath:方法来初始化每一行 U ...

  6. [个人原创]关于java中对象排序的一些探讨(二)

    2.  使用Collections.sort()方法 Collections类中提供了诸多静态方法,诸如addAll(),max()等等.当自己相对Collection接口下的类处理的时候,可以看看这 ...

  7. 【转】C++之内部类(嵌套类)与外部类及友元

    [转]http://baike.baidu.com/link?url=Md223wQoT5s-3cZ5xRnj1pGmvm310DKAuh-HDrcEdc2l24rwobHrdEc_Mi4Z3BGP0 ...

  8. js 实现win7任务栏拖动效果

    前言 在某个时刻, 我认识了一个朋友. 此人在我的教唆下, 踏上了js的不归路. 前天他问我, Win7任务栏拖动效果怎么实现. 我随口就跟他说, 这简单的一逼. 在我一晚上的折腾之后, 一份潦草的代 ...

  9. Linux 4.1内核编译报告

    编译环境 Arch Linux on VirtualBox 下载内核 https://www.kernel.org/ 下载的内核压缩包,此时的最新内核版本为4.1: 解压包 # tar -xvJf l ...

  10. linux c数据库备份第三版

    这个版本相对第一版更新了很多,其实我本地定义为第五版的.相对第一版主要更新内容:1.增加了定时器2.用户可以停止调备份程序3.如果备份程序正在运行,那么尝试运行提示已经在运行4.记录程序运行时的pid ...