数据库设计三大范式

第一范式:当关系模式R的所有属性都不能在分解为更基本的数据单位时,称R是满足第一范式的,简记为1NF。满足第一范式是关系模式规范化的最低要求,否则,将有很多基本操作在这样的关系模式中实现不了。

第二范式:如果关系模式R满足第一范式,并且R得所有非主属性都完全依赖于R的每一个候选关键属性,称R满足第二范式,简记为2NF。

第三范式:设R是一个满足第一范式条件的关系模式,X是R的任意属性集,如果X非传递依赖于R的任意一个候选关键字,称R满足第三范式,简记为3NF。

PHP读取Excel文档

<?php
require_once 'PHPExcel.php';
require_once 'PHPExcel/IOFactory.php';
require_once 'PHPExcel/Reader/Excel5.php';
/* 以上三步加载phpExcel的类
下载地址:https://github.com/PHPOffice/PHPExcel/tree/1.8/Classes */

$filename='F:\PhpStudy\PHPTutorial\WWW\exc\test.xlsx';//指定excel文件

$file = iconv("utf-8","gb2312",$filename);   //转码 

if(empty($file) OR !file_exists($file)) {  
    die('file not exists!');  
}

$extension = strtolower( pathinfo($filename, PATHINFO_EXTENSION) );

if ($extension =='xlsx') {

	$objReader = PHPExcel_IOFactory::createReader('excel2007');
    $objReader->setReadDataOnly(true);
    $objReader->setLoadSheetsOnly(true);	
    $objExcel = $objReader ->load($filename);
} elseif ($extension =='xls') {

	$objReader = PHPExcel_IOFactory::createReader('excel5');
    $objReader->setReadDataOnly(true);
    $objReader->setLoadSheetsOnly(true);	
    $objExcel = $objReader ->load($filename);
}

$sheet = $objExcel->getSheet(0)->toArray(); 

print_r($sheet);

参考:https://baike.baidu.com/item/phpexcel/10979571

函数、存储过程、视图、事务和索引总结

1.函数—创建—调用—变量 (临时变量declare,用户变量set @xx=xx,系统变量@@)

创建,调用,删除

有返回值的sql语句中都不能够执行除了select 。。。into之外

2.存储过程—创建—查看—调用—删除

参数的类型 in out inout类型的参数 通过out类型的参数可以给存储过程实现返回值

存储过程中 可以执行任意的sql语句,更到的灵活,在实际开发中使用更多

相同点:减少网络流量的消耗

3.视图—创建—调用—删除

数据库中存在的虚表

4.事务:安全的更新数据库的一中方式

四大特征:原子性,一致性,隔离性,持久性

三个操作指令 begin commit rollbacl

1.手动开启事务,手动提交事务

2.成功之后,进行提交,一旦提交不能够车脚

3.失败之后,执行回滚操作,回滚去除脏数据

事务是面向当前连接的

事务更新大批量数据的时候,效率高,更新安全(脏数据)

5.索引:提高查询的效率

降低更新的效率

额外消耗磁盘的效率

PHP中的break与continue关键字

/*
 * 在PHP中break语句不仅可以跳出当前循环,还可以指定跳出几层循环
 * break $num;  num为向外跳的层数 num不能大于最大循环层数
 */
 
//  第三重循环
while(true) {
    //  第二重
    for(;;) {
        //  第一重
        for($i = 0; $i <= 10; $i++) {
            echo "$i \n";
            if($i == 7) {
                echo "i=7, 跳出1重循环";
                break;
            }
        }
        echo "\n";
        //  第一重
        for($i = 0; $i <= 20; $i++){
            echo "$i \n";
            if($i == 15) {
                echo "i=15, 跳出3重循环";
                break 3;
            }
        }
        echo "绝对不会输出这里";
    }
}
 
/*
 * PHP中continue只能终止本次循环而进入到下一次循环中,
 * continue $num 可以指定终止第几重的当前循环  num不能大于最大循环层数
 */
$arr = array(1,2,3,4,5,6,7,8,9,10);
for($i = 0; $i < 10; $i++) {
    if($i % 2 == 0){
        continue;
    }
    for(;;){
        for($j = 0; $j < count($arr); $j++) {
            if($j == $i){
                echo "\n";
                continue 3; //终止第三层的当前循环
            }else{
                echo "\$arr[".$j."]:".$arr[$j]." ";
            }
        }
    }
    echo "这里也绝对不会输出"; 
}

isset()和empty()的区别

isset()检查变量是否定义,而empty()检查定义的变量是否是空值:

$g = array();
echo isset($g)?"isset(g) is true \n":"isset(g) is false \n";
echo empty($g)?"empty(g) is true \n":"empty(g) is false \n";

运行结果:

isset(g) is true //$g的值为非null
empty(g) is true //$g虽然已定义,但值为空