美文网首页
PHP -- 数据库3 修改 删除 显示数据

PHP -- 数据库3 修改 删除 显示数据

作者: 潘肚饿兵哥哥 | 来源:发表于2019-08-13 17:05 被阅读0次
<?php
//header("Content-type:text/html;charset=utf-8");


    库的增删查
        create database 名字 [charset utf8];  增
        drop database 名字  删
        show databases  查
    
    表的增删改查
        结构
            create table 名字(
            列名 列类型 [列参数 not null default 默认值 列注释],
            ...
            
            )[engine=innodb/myisam charset=utf8 comment='注释']
            
            列类型
                数值型
                整型有无符号和有符号之分,但是浮点数没有
                    整型 tinyint(6) unsigned zerofill  
                    0填充:
                    这里的6不代表他的范围占6位
                    6仅代表显示宽度是6位,不是真实范围
                    如真实数是1,tinyint(6)显示为 000001
                    如真实数是123456 他就直接显示真实的数,
                    
                    浮点型:float: float(8, 2) 
                        8表示这个浮点数共8位,2是小数点后有2位(小数点不算一位,小数点前有6位,后有两位)
                        
                    定点型: decimal(m, n)和上面浮点型一样,m是位数,这个数的长度,n是小数点的位数
                    浮点型和定点型的区别就是,浮点型的精度会发生变化,定点型不会发生变化
                    例如:123465798.23  浮点型存进去小数点后的最后一位
                    就可能不是3了,可能是别的,但是定点型存什么就是什么,不会发生改变
                    浮点型的处理速度快,定点型的处理速度慢
                        
                    
                    
                字符串型: 常用的是下面这三个
                    char(n) n代表一个数字 n=[1-255]代表最大存255个字符
                    (存汉字就没有这么多了,utf8就只能存255/3个字)
                    varchar(n) n代表一个数字 n=[1-65535]个字符,可以存20000多中文字
                    特点:
                    char是定长字符串,varchar是可变长的字符串
                    char(8)这样写的话,系统会自动分配8位的长度,无论实际参数是几位,这个8位的位置都存在
                    用carchar(8)的话,实参给几个,他就占几位
                    
                    还有,如果字符串的前年后面都有空格的话,前面的空格都会保存
                    但是char后面的空格会丢失,而varchar后面的空格会保存
                    因为char保存字符是写几位就给几位的空位,所以有可能会有空着没用的位置
                    所以,在取数的时候,是从第一位开始取,一直取到出现空位为止
                    所以一旦出现空格或后面还有字符串的情况,他就会丢失掉
                    如果给定的位数是8位,实际给的也是8位
                    这样全部占满的情况下,char实际就是8位,但是varchar会超出8位,因为,varchar存的字符串不会忽略空格
                    所以,就需要多用一两个字节来做一个标记,标记这个varchar存的字符到底有多长
                    
                    
                    text    n 系统给定65535  text无默认值
                    除非不得已,一般不用text定义一个字符串,一般用前两个,
                    因为在mysql在低版本的时候,varchr范围也是255,所以才要text的大范围
                    
                
                日期时间 项目中时间多用整数代替,因为用整数好计算
                时间戳: 设定好一个时间,例如1998.08.23 00.00 到现在这个之间的秒数就是时间戳  
                用整数记时间直接做减法就可以了
                
                其他类型
                修改表结构
                    alter table 表名 add 列   增加列
                    alter table 表名 drop 列  删除列
                    alter table 表名 change   修改列
        
        
        数据
            增
            insert into 表名(列1, ...) values(值1,...);//列和值一一对应,这样写一次插入一条信息
            insert into 表名(列1, ...) values(值1,...),(值1,...),(值1,...),(值1,...)...;这样写一次插入多条信息
            
            改
            update 表名 set 列1=值1,...[where 修改条件 ]  
//最后一个值不写逗号,where必须写,不写整个表都被改掉了
//真实项目中where是必须要写的
            
            $sql = "update student set sex=2";
            $sql = "update student set name='李雷' where number='180402'";
            此处如果不加where条件的话,sex这一列全部都会变成2
            set后面的 列=值 是修改列,而where后面的条件是确定行
            行列都有设置才能准确定位要改的具体信息


                        $sql = "update student set name='李雷' where number='180402'";
                        $result = mysqli_query($link, $sql) or die(mysqli_error($link));
                        //mysqli_query 对数据库执行一次查询 返回一个mysqli_result对象
                        //mysqli_result中有一个fetch_all方法,获取所有查到的值

                        //下面之所以要这样写,而不是成功输出成功,失败输出失败
                        //是因为前面的mysqli_query查询完成之后返回的,每次刷新都会返回
                        //无论有没有修改成功,只要刷新浏览器,就会返回操作成功
                        //因此,要用mysqli_affected_rows接收受影响的行数,如果受影响(修改过),
                        //就返回1,没有就返回0
                        //用它来判断操作成功之后是否修改过具体内容,这样做更精确一些
                        if($result){
                            if(mysqli_affected_rows($link) > 0){
                                echo '操作成功';
                            }else{
                                echo '操作成功,没有修改任何数据';
                            }
                        }else{
                            echo '操作失败';
                        }
                

        
    mysqli::$affected_rows -- mysqli_affected_rows 
      获取之前mysql操作受影响的行数(就是获取之前修改过的行数)
    
            





            删除
                delete from 表名 [where 删除条件]删除条件必须写
                $sql = "delete from student where number='180402'";





mysqli_result::fetch_all 将查询结果转为一个数组
mysqli_result::free   mysqli_free_result释放资源


关系型数据库 表的三范式
    1NF 一条记录要具有原子性,不可再分割(关系型数据库自动满足)        
      意思就是例如一个学生的所有信息,就只属于他,不可能他的信息还能分割成两个部分
    
    2NF 一条记录要具有唯一性(加主键则可以满足 主键一般用id表示)
        就是不能出现两个一模一样的记录
    3NF 数据字段不能冗余


建表练习  

有如下信息:
    学号
    姓名
    年龄
    性别
    email
    手机
    简介
    毕业薪水
    入学日期

下面not null之所以不允许出现null这个数据类型,是因为在查值的时候,例如 a=null  或a != null 都查不出来数据,显示是空的,只有form student where a is null才能查出来
所以,项目中不允许出现null,所以要写not null 

creat table student(  //myisam插入数据的速度比engine快很多
id smallint unsigned primary key auto_increment  //primary key主键  auto_increment自增长,只能给主键
number char(6) not null default '' unique comment='学号',  //unique唯一
name varchar(30) not null default '',
age tinyint unsigned not null default 0,
sex tinyint not null default 0 conment='性别 1男2女0未知'
)myisam  charset=utf8;


 php使用mysqli的函数库来操作MYSQL数据库
        步骤
            1.连接数据库
            2.选择库
            3.设置编码 mysqli_set_charset
            4.执行SQL语句(指令)   返回值是对象
            5.处理上一步的结果
            6.释放资源   mysqli_result::free   mysqli_free_result释放资源 
            (如果第四步是查询语句,才需要释放
             因为查询返回的是一个对象,查询得到的结果会在内存里,不释放的话,存多了占资源)
            7.关闭连接 可有可无 // mysqli_close($link);php并不能立刻关闭连接



$link = @mysqli_connect('localhost', 'root', 'root', '180301') or die (mysqli_connect_error());
mysql_set_charset($link, 'utf8') or die(mysqli_error($link));//设置编码

$sql = "insert into student(number, name, sex, age) values ('180401', '张三', '1', '18')";
//1表示性别,用不用单引号都可以 用单引号可以存进字符串里,如果是varchar就必须是字符串

$sql = "update student set sex=2";//修改
$result = mysqli_query($link, $sql) or die(mysqli_error($link));//修改之后执行
if($result){//执行后输出
    echo '操作成功';
 }else{
    echo '操作失败';
 }

$sql = "select id, number, name, age, sex, student";
$result = mysqli_query($link, $sql) or die(mysqli_error($link));
$list = mysqli_fetch_all($result, MYSQLI_ASSOC);//mysqli_result::fetch_all 将查询结果转为一个数组  
MYSQLI_ASSOC  关联下标,在写的时候,关联起来就不会乱
否则,列表项顺序 $sql 和下面输出的echo "<tr><td>...{$v['age']}</td><td>{$v['sex']}</td></tr>";}不一致就乱了
在下面输出信息的时候,也用number/name/age/sex等信息关联起来,因为他关联起来了,输出不会乱
获取一行数据 mysqli_fetch_array mysqli_fetch_assoc mysqli_fetch_row  d都只能拿到一行数据

mysqli_free_result($result);//释放资源,这步必须要有  如果第四步是查询语句,才需要释放
mysqli_close($link);//关闭连接

while($row = mysqli_fetch_row($result)){//获取一行数据,赋值给$row
    $list[] = $row;
}


//var_dump($list);
// if($result){
//  echo '操作成功';
// }else{
//  echo '操作失败';
// }


//最终这样显示
echo '<table width="600" border="1">';
echo '<tr><th>学号</th><th>姓名</th><th>年龄</th><th>性别</th></tr>';
foreach($list as $v){
    echo "<tr><td>{$v['number']}</td><td>{$v['name']}</td><td>{$v['age']}</td><td>{$v['sex']}</td></tr>";
}
echo '</table>';
?>
    
    

删除

delete from 表名 [where 删除条件]删除条件必须写

$link = @mysqli_connect('localhost', 'root', 'root', '180301') or die(mysqli_connect_error());
mysqli_set_charset($link, 'utf8') or die(mysqli_error($link));

$sql = "delect from student where number='180401'";
//删除整行,不加where后面的条件会把所有数据全部删掉
//用delect删除数据,原来的索引还会保存,例如之前删掉两行数据
//再增加数据的话,索引就会是3,而不是从1开始
//因为id是自增长的

$result = mysqli_query($link, $sql) or die(mysqli_error($link));//mysqli_query 对数据库执行一次查询 返回一个mysqli_result对象,mysqli_result中有一个fetch_all方法,获取所有查到的值


if($result){
    if(mysqli_affected_rows($link) > 0){
        echo '操作成功';
    }else{
        echo '操作成功,没有修改任何数据';
    }
}else{
    echo '操作失败';
}

$sql = "select id, number, name, sex, age from student";
$result = mysqli_query($link, $sql) or die(mysqli_error($link));
$list = mysqli_fetch_all($result, MYSQLI_ASSOC);
//mysqli_fetch_all 获取数组的所有行,fetch的其他方法只能获取一行
//有三个默认值,这个是把下标变成关联下标, MYSQLI_NUM是默认值
//下标是索引下标,MYSQLI_BOTH. 是两个都保存
//要用关联下标,省的顺序乱了

mysqli_close($link);//关闭连接,可有可无,php关闭不了链接

echo '<table width="600" border="1">';
echo '<tr><th>ID</th><th>学号</th><th>姓名</th><th>年龄</th><th>性别</th></tr>';//这一行是输出的表头
foreach ($list as $v){
    echo "<tr><td>{$v['id']}</td><td>{$v['number']}</td><td>{$v['name']}</td><td>{$v['age']}</td><td>{$v['sex']}</td></tr>";
    //这一行是输出的内容,对应上面数据库查询的顺序
    //上面用MYSQLI_ASSOC,这里就写关联下标,不易错。
    //用其他的这里$v['0']就要写上对应的索引下标了
    //一旦顺序写错,这里输出到浏览器的顺序也是错的
    //用MYSQLI_ASSOC的话,只要查询的列表项和这里的关联下标是同一个词,不用管顺序是什么样,都会一一对应起来
    //mysqli_fetch_all获取到的数组的下标就是表的字段名
}
echo '</table>';

代码:


<?php
/* 
步骤
    1.连接数据库
    2.选择库
    3.设置编码 mysqli_set_charset
    4.执行SQL语句(指令)   返回值是对象
    5.处理上一步的结果
    6.释放资源   mysqli_result::free   mysqli_free_result释放资源 
    (如果第四步是查询语句,才需要释放
        因为查询返回的是一个对象,查询得到的结果会在内存里,不释放的话,存多了占资源)
    7.关闭连接 可有可无  mysqli_close($link);php并不能立刻关闭连接
 */


$link = @mysqli_connect('localhost', 'root', 'root', '180301') or die(mysqli_connect_error());
mysqli_set_charset($link, 'utf8') or die(mysqli_error($link));

//$sql = "update student set sex=2";
$sql = "update student set name='李雷' where number='180402'";
//此处如果不加where条件的话,sex这一列全部都会变成2
//set后面的 列=值 是修改列,而where后面的条件是确定行
//行列都有设置才能准确定位要改的具体信息

//$sql = "insert into student(number, name, sex, age) values ('180401', '张三', '1', '18')";
//$sql = "select id, number, name, sex, age from student";
$result = mysqli_query($link, $sql) or die(mysqli_error($link));//mysqli_query 对数据库执行一次查询 返回一个mysqli_result对象,mysqli_result中有一个fetch_all方法,获取所有查到的值


if($result){
    if(mysqli_affected_rows($link) > 0){
        echo '操作成功';
    }else{
        echo '操作成功,没有修改任何数据';
    }
}else{
    echo '操作失败';
}

$sql = "select id, number, name, sex, age from student";
$result = mysqli_query($link, $sql) or die(mysqli_error($link));
$list = mysqli_fetch_all($result, MYSQLI_ASSOC);
//mysqli_fetch_all 获取数组的所有行,fetch的其他方法只能获取一行
//有三个默认值,这个是把下标变成关联下标, MYSQLI_NUM是默认值
//下标是索引下标,MYSQLI_BOTH. 是两个都保存
//要用关联下标,省的顺序乱了


mysqli_free_result($result);
//释放资源,只有前面是查询语句才需要释放
//因为插入等返回值是布尔值,而查询返回值是对象,所以要释放资源
//$result里查到的东西已经转到了$list里,$result就不需要了

mysqli_close($link);//关闭连接,可有可无,php关闭不了链接


// var_dump($result);
// if($result){
//     echo '操作成功';
// }else{
//     echo '操作失败';
// }

echo '<table width="600" border="1">';
echo '<tr><th>ID</th><th>学号</th><th>姓名</th><th>年龄</th><th>性别</th></tr>';//这一行是输出的表头
foreach ($list as $v){
    echo "<tr><td>{$v['id']}</td><td>{$v['number']}</td><td>{$v['name']}</td><td>{$v['age']}</td><td>{$v['sex']}</td></tr>";
    //这一行是输出的内容,对应上面数据库查询的顺序
    //上面用MYSQLI_ASSOC,这里就写关联下标,不易错。
    //用其他的这里$v['0']就要写上对应的索引下标了
    //一旦顺序写错,这里输出到浏览器的顺序也是错的
    //用MYSQLI_ASSOC的话,只要查询的列表项和这里的关联下标是同一个词,不用管顺序是什么样,都会一一对应起来
    //mysqli_fetch_all获取到的数组的下标就是表的字段名
}
echo '</table>';

?>



相关文章

  • PHP -- 数据库3 修改 删除 显示数据

    删除 delete from 表名 [where 删除条件]删除条件必须写 代码:

  • mongodb基本命令

    连接数据库 显示所有数据库 使用数据库 查看表 插入数据 查询表数据 修改表数据 删除表数据 删除表 删除数据库

  • SQL从入门到不放弃(ing)

    常用表操作 显示数据库下的表: 显示表列: 修改表名: 删除表: 删除mysql表中所有内容: 修改表列类型 修改...

  • hive基本语法

    DDL数据定义 创建数据库: 修改数据库: 显示数据库: 删除数据库 创建表 分区表 DML数据操作 查询

  • MySQL

    第2章 数据库创建、修改、删除 系统数据库:mysql、test 第3章 数据表的创建、修改删除 数据类型 数值类...

  • linux系统中常用MySQL命令

    1、在终端中进入MySQL: 2、显示、创建、使用、删除 数据库 3、显示、查询、更新、删除 表格

  • DDL-数据定义语言

    1、库 创建数据库 删除数据库 2、表 创建表 删除表 3、列 增加列 删除列 修改列 4、键 添加主键 删除主键...

  • Mysql 数据库

    数据库的主要操作包括: 数据库的操作:创建、删除 表的操作:创建、修改、删除 数据的操作:增加、修改、删除、查询 ...

  • PHP数据库操作

    一、增删改查 1. 插入语句 2. 删除语句 3. 修改语句 4. 查询语句 二、php对数据库的操作流程 ...

  • sql基础操作

    数据库的创建: 数据库的修改: 数据库的删除: 数据库查看: 创建表 删除表 数据表的结构的修改: 查看表结构 插...

网友评论

      本文标题:PHP -- 数据库3 修改 删除 显示数据

      本文链接:https://www.haomeiwen.com/subject/pbpbjctx.html