【原创】MySQL Workbench新建JSON字段

在MySQL  WorkBench中做ER图设计,并要将其转换为数据库,数据库的版本为MySQL 5.7.18。
按照需求设置了一个字段为5.7.8之后才有的新的JSON类型,按照习惯,为这个字段设置了字符集为UTF8,设置规则为UTF8_GENERAL_CI,结果在Forward Database的时候,SQL语句报错。
  1. Error 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' NULL
百思不得其解,最后把字符集设置去掉,就顺利通过,建表成功。特地做个记录。

 

MySQL最诡异的access denied错误

最近受领导安排,将公司做的一个项目发布到64位的windows 2008上,网页和Mysql数据库分开。

将程序从原来的二级目录修改成发布到根目录后,登陆系统,出现经典的access denied错误

这个错误很常见,通常是连接数据库的用户名密码和数据库里保存的不一致造成的,但是再三确认,完全没有问题。也看过MySQL 5.6版的设置和以前的版本没有不同。

Read More

MySQL 排序两个栏位的方法 (使用IF)

讨论区很常见的排法是这样:「按照所有文章的发表时间排序,但是如果有最新回应的话,则是会把最新回应的时间一起排进去。」照古早的写法:SELECT * FROM `forum` ORDER BY `REPLY_TIME` DESC, `TIME` DESC;这样会爆掉,因为它会把 REPLY_TIME 都排完,才排 TIME ,而这并不是我们想要的。

MySQL 有提供 IF 的功能,用法: IF (bool,value1,value2)解释:当第一个参数为真时,回传 value1,否则传回 value2

可以改写成:SELECTIF(`REPLY_TIME` > `TIME`, `REPLY_TIME`, `TIME`) AS `TEMPTIME`, `ID`, `POST_TITLE`, `POST_CONTET`– 这边是其他栏位,而 TEMPTIME 则是产生的新栏位。FROM `forum`WHERE 条件子句ORDER BY `TEMPTIME` DESC;LIMIT 0, 资料笔数

重要的笔记……

如何显示组成MySQL视图的SQL语句

如何显示组成MySQL视图的SQL语句?因为有时候只要修改其中一部分内容即可,重新输入整个语句不是太麻烦了么?尤其是语句比较复杂的时候。

点击Phpmyadmin的“SQL”链接,输入以下SQL语句

SHOW CREATE VIEW view_name

显示出来的结果,如果原有SQL语句比较复杂,通常是无法显示完整的,这时候,可以选择下面的“打印预览 (全文显示)”链接,就可以看到完整的语句。只要取消掉点击后弹出的选择打印机的对话框即可。

MySQL中将一个表数据批量导入另一表

不管是在网站开发还是在应用程序开发中,我们经常会碰到需要将MySQL或MS SQLServer某个表的数据批量导入到另一个表的情况,甚至有时还需要指定导入字段。

本文就将以MySQL数据库为例,介绍如何通过SQL命令行将某个表的所有数据或指定字段的数据,导入到目标表中。此方法对于SQLServer数据库,也就是T-SQL来说,同样适用。

类别一、如果两张张表(导出表和目标表)的字段一致,并且希望插入全部数据,可以用这种方法:

INSERT INTO 目标表 SELECT  * FROM 来源表;

例如,要将 articles 表插入到 newArticles 表中,则可以通过如下SQL语句实现:

INSERT INTO newArticles SELECT  * FROM articles;

类别二、如果只希望导入指定字段,可以用这种方法:

INSERT INTO 目标表 (字段1, 字段2, …) SELECT  字段1, 字段2, …  FROM 来源表;

请注意以上两表的字段必须一致,否则会出现数据转换错误。

批量更新不连续记录的某个字段值

更新记录,大家都知道用Update来做,如果只有一两个,可以手动处理,如果是大批量的连续记录,大家就会用 UPDATE communicate SET `jkd_clevel` =7 WHERE `jkd_cid` between 5 and 60; 的方法来做,但如果记录是不连续分布,如ID号是3、25,84,171,459……如果数量有几百个,几千个,难道要运行几百遍,几千遍Update语句么?

今天我终于找到了一个解决方法:

UPDATE communicate SET `jkd_clevel` =7 WHERE `jkd_cid` IN ( 5, 6,83,100,2500,……. )

顺便说一句,Delete语句也可以这样使用

UPDATE From communicate WHERE `jkd_cid` IN ( 5, 6,83,100,2500,……. )