在开发过程中,总有一些需求是需要查看在A表中ID不存在于B表中的ID的情况:
下面有三种方法可以实现这一需求:
第一种:使用Not in 方法通过子查询的结果集来做过滤:
0 |
select * from A where 1=1 AND A.ID not in (select ID from B ) |
这种情况最常见也是最容易理解的逻辑SQL代码,但是会有很多问题出现。 Continue reading
在开发过程中,总有一些需求是需要查看在A表中ID不存在于B表中的ID的情况:
下面有三种方法可以实现这一需求:
第一种:使用Not in 方法通过子查询的结果集来做过滤:
0 |
select * from A where 1=1 AND A.ID not in (select ID from B ) |
这种情况最常见也是最容易理解的逻辑SQL代码,但是会有很多问题出现。 Continue reading
MySQL主流引擎是MyISAM模式,这种模式方便使用和维护,Innodb为后来加入的另外一种模式,这种模式支持的功能更强大,是未来发展趋势。
又有个小项目,本地开发(也是框架需要)使用的InnoDB引擎,但当项目开发得差不多了,需要实测上到客户主机后,发现没有InnoDB引擎,说实话,还是头一回碰到没有InnoDB引擎的情况,客户使用的是护卫神服务器管理系统,安装环境可能是套件,没有细了解,那么如何开启MySQL数据库的InnoDB模式呢?下面是我在网上找的。 Continue reading
INSERT INTO … ON DUPLICATE KEY UPDATE …
表结构:
0 1 2 3 4 5 6 |
CREATE TABLE `mrdede_notfind` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `keyword` varchar(32) NOT NULL COMMENT '查询的关键词', `count` int(6) unsigned DEFAULT NULL COMMENT '计数:被查询的次数', PRIMARY KEY (`id`), UNIQUE KEY `keyword` (`keyword`) ) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8 COMMENT='保存没有查询到的搜索关键词' |
该语句是基于唯一索引或主键才可使用的,如下语句:
必要条件:其中字段id或keyword或count,至少有一个字段属性是主键或唯一索引。
0 |
INSERT INTO `mrdede_notfind` (id,keyword,count) VALUES (1,'织梦先生',3) ON DUPLICATE KEY UPDATE count=count+1; |
语句解释:如果查询主键id=1或者唯一索引keyword=’织梦先生’的记录存在,则更新此记录的count字段 count=count+1;如果没有查询主键id=1或者唯一索引keyword=’织梦先生’的记录都不存在,则插入一行记录。
其它:
假定id=1的记录存在,则下面语句与上面语句是等效的
0 |
UPDATE table SET count=count+1 WHERE id=1 OR keyword='织梦先生'; |
问题1:MySQL的data里的网站数据库里只有.frm 而没有.MYD和.MYI文件?
解释:首先排除误删的情况,那么,你的此数据库的存储引擎可能为innoDB类型(把数据库导入为.sql后,可以在每个表结构后看到写着“ENGINE=InnoDB”;或者使用phpmyadmin查看数据表时,在“类型”列下,显示每个表的类型为“ENGINE=InnoDB”)。
那么,在windows主机下查看数据库目录./mysql/data/数据库名/ ,这样只能看到.frm文件和一个db.opt文件,它的数据文件位置在“./mysql/data/ibdata1”文件中保存着。
问题2:直接在服务器中直接迁移WordPress网站的数据库文件则数据丢失?
解释:WordPress博客系统是数据库引擎是InnoDB类型的,所以,看了第一个问题的解释后,这第二个问题就明白了。
那么,要直接对WordPress系统网站的数据文件迁移的时候,同时也要迁移这个文件(“./mysql/data/ibdata1”),网站就会正常显示出原数据了。
相关知识:
MyISAM与InnoDB是mysql目前比较常用的两个数据库存储引擎,MyISAM与InnoDB的主要的不同点在于性能和事务控制上。这里简单的介绍一下两者间的区别和转换方法:
MyISAM:MyISAM是MySQL5.5之前版本默认的数据库存储引擎。MYISAM提供高速存储和检索,以及全文搜索能力,适合数据仓库等查询频繁的应用。但不支持事务、也不支持外键。MyISAM格式的一个重要缺陷就是不能在表损坏后恢复数据。
InnoDB:InnoDB是MySQL5.5版本的默认数据库存储引擎,不过InnoDB已被Oracle收购,MySQL自行开发的新存储引擎Falcon将在MySQL6.0版本引进。InnoDB具有提交、回滚和崩溃恢复能力的事务安全。但是比起MyISAM存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。尽管如此,但是InnoDB包括了对事务处理和外来键的支持,这两点都是MyISAM引擎所没有的。
又学习了!
mysql索引类型(normal、unique、full textl)及索引方法(BTree、Hash)的概念与使用场景