最近一直忙着做了几个项目,顺带熟悉了Sql server和MySql这两个数据库,下面总结一下自己得到的经验。
时间日期类型数据:
不知道大家有没有想过,为什么数据库要专门了定义这样类型的数据,当然是为了跟编程语言对应,那么编程语言为什么要有这玩意呢?仔细思考,这东西还必须得有。平常咱么做东西总会碰到日期时间的计算,譬如算一下7月28日到8月2日有几天?这问题掰一下是指头就知道了,但是程序中你怎么实现呢?两个字符串相减吗?况且你的算法还得考虑大小月,比较特殊的2月,2月的话还得考虑闰年和平年(还是挺麻烦的!)。所以就有了这种类型的数据了,系统给你封装好,方便使用嘛
。
。
对于Sql server的话,有date和datetime这两种比较常见的(别的,如time,还有DateTimeOffset),这些都是能顾名思义的,存储格式也是有限定的。
现在说说比较有意思的是MySql,MySql存储时间日期一般是用int类型的,它存储的是一个UNIX时间戳,网上的说法是:定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数。Unix时间戳不仅被使用在Unix 系统、类Unix系统中,也在许多其他操作系统中被广告采用。这样做很显然可以更精确的控制时间。MySql跟php结合的很好,php对UNIX时间戳也有很多内置的转换方法,所以用php举个例子:
php的date函数可以把传入的UNIX时间戳返回一个字符串表示(如果不传UNIX,但还是得传参数的,用来控制输出格式,不然会用警告,则返回当前时间的字符串),而strtotime函数可以把这种字符串转化为UNIX时间戳(刚好互补),另外,strtotime函数根据传入的字符串如(“+1 day”)得到其他时间的UNIX时间戳:
<?php
echo date("Y-m-d");
echo "<br/>";
echo date("Y-m-d", 1414684800);
echo "<br/>";
echo strtotime(date("Y-m-d"));
echo "<br/>";
echo date("Y-m-d", strtotime("+1 day"));
?>
输出结果:
2014-11-30
2014-10-30
1417302000
2014-12-01
另外注意一点:这里的显示结果跟php环境的
时区设置有关系,网上百度一下。
MySql数据表存储引擎:
什么是存储引擎:百度了一下,找了一个比较浅显的定义:存储引擎说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型)。Mysql比较特殊,有不同的存储引擎,在Oracle 和SQL Server等数据库中只有一种存储引擎,所有数据存储管理机制都是一样的。而MySql数据库提供了多种存储引擎。用户可以根据不同的需求为数据表选择不同的存储引擎,用户也可以根据自己的需要编写自己的存储引擎。其实对我们来说,只要了解一下,不同引擎的区别,用的时候考虑一下那种选择为最优即可。
Mysql常见的数据引擎:MyISAM,InnoDB,NDB Cluster,FEDERATED,最常用的就是MyISAM和InnoDB,前者读取效率很高,但是不支持事务处理和外键,后者支持外键和事务处理,如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表。用sql修改表的存储引擎:
ALTER TABLE tablename ENGINE = MyISAM ;
MySql查看外键和约束:
最好使的一句SQL是:
show create table table_name;