数据库CRUD操作
首先先了解一下什么是数据库CRUD操作?
它代表创建(Create)、更新(Update)、读取(Read)和删除(Delete)操作。
程序员们日常口述也喜欢用 增、删、改、查来表达。
------------------------------------------------------------------
创建一个数据库
CREATE DATABASE 语句用于在 MySQL 中创建数据库。
语法
CREATE DATABASE database_name
实例:
CREATE DATABASE `dahuilang` COLLATE 'utf8mb4_unicode_ci';
`dahuilang` 为数据库名 'utf8mb4_unicode_ci' 为数据库字符集编码。
注意:数据名名包裹符号是键盘~ · 键(Esc下按键、!1按键前面的 ) 。字符集参数包裹是单引号。
------------------------------------------------------------------
创建一个表(并同时创建多个字段,至少要创建一个字段)
语法
CREATE TABLE `表名` (·字段名· char(20) NOT NULL ) ENGINE='InnoDB';
实例:
CREATE TABLE `user` ( -- 创建user_id字段 int类型长度9 无符号 非空 自动增量 主键 `user_id` int(9) unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY, -- 创建user_name字段 char定长类型限20个字符 不允许为空 `user_name` char(20) NOT NULL, -- 创建user_age字段 tinyint类型长度3 非空 `user_age` tinyint(3) NOT NULL, -- 创建user_info字段 varchar类型 限长度500字符 非空 `user_info` varchar(500) NOT NULL ) ENGINE='InnoDB'; -- 设置表引擎为InnoDB 支持索引和事务
上面语句是在数据库里创建一个 user表 并创建4个字段
------------------------------------------------------------------
删除指定表中 一个或多个字段
删除user表中一个 user_info字段
ALTER TABLE `user` DROP `user_info`;
删除user表中user_name,user_age 2个字段(关键词 DROP多个字段逗号隔开 )。
ALTER TABLE `user` DROP `user_name`, DROP `user_age`;
------------------------------------------------------------------
修改/更新一个字段名
ALTER TABLE `user` CHANGE `user_id` `user_ss` int(9) unsigned NOT NULL AUTO_INCREMENT FIRST;
------------------------------------------------------------------
修改/更新 一个表名
ALTER TABLE `user` RENAME TO `user22`;
------------------------------------------------------------------
查询表中数据
查询user22表 返回所有字段 的前50条数据
SELECT * FROM `user22` LIMIT 50
查询user22表 返回 name 和age字段 的前20条
SELECT `name`,`age` FROM `user22` LIMIT 20
注:LIMIT 5 表示查询 前5条(0~4), LIMIT 2,5 表示返回 第3条开始取5条数据(3 4 5 6 7条)
limit m,n
其中m是指记录开始的index,从0开始,表示第一条记录
n是指从第m+1条开始,取n条。
========================================一条分割线
PDO中操作数据库的基本步骤
1 创建PDO对象
首先准备设置PDO所需的参数信息(数据库类型 数据库 数据库名字 账号 密码)
$dns='数据库类型:host=数据库主机地址;dbname=默认数据库名称';
$username='root';
$password='root';
$pdo=new PDO($dns,$username,$password);
因为只要页面操作数据就得用到PDO来操作数据库 所以以上方法写到单独页面以待调用。connect.php
2 需要操作数据库页面加载connect.php
require __DIR__.'/inc/connect.php';
3.创建预处理对象 及设置SQL语句到参数
$stmt=$pdo->prepare('INSERT INTO `menu` SET `classify`=:classify,`nameEn`=:nameEn,`nameCN`=:nameCn');
4 执行sql预处理对象的sql语句
$stmt->execute(['classify'=>1,'nameEn'=>'ldh','nameCn'=>'刘德华']);
5 关闭数据库链接PDO对象
$pdo=null; 或使用 unset($pdo) 其中一条
--------------------------------------------------------------------------实例
database.php
<?php //将配置信息 封装成数组 return[ 'type'=>'mysql', 'host'=>'127.0.0.1', 'dbname'=>'music', 'username'=>'root', 'password'=>'root', ]; ?>
connect.php
<?php $db=require 'database.php'; $dns="{$db['type']}:host={$db['host']};dbname={$db['dbname']}"; $username=$db['username']; $password=$db['password']; try{ $pdo=new PDO($dns,$username,$password); // var_dump($pdo); //可以打印pdo对象 有对象就说明成功了 }catch(PDOException $e){ die('连接失败'.$e->getMessage()); }
插入数据
实例
<?php //插入数据库 //1.链接数据库 require __DIR__.'/inc/connect.php'; //3 创建 sql预处理对象+ 2 创建sql语句 $stmt=$pdo->prepare('INSERT INTO `menu` SET `classify`=:classify,`nameEn`=:nameEn,`nameCN`=:nameCn'); //4 给sql预处理对象的模板绑定值 $classify=4; $nameEn='ljj2'; $nameCn='林俊杰2'; //5执行SQL语句 $stmt->execute() 返回布尔值 $stmt->execute(['classify'=>$classify,'nameEn'=>$nameEn,'nameCn'=>$nameCn]); echo "成功添加".$stmt->rowCount()."条记录,主键:".$pdo->lastInsertId(); //6关闭数据库对象 unset($pdo)或$pdo=null; $pdo=null;
运行实例 »
点击 "运行实例" 按钮查看在线实例
更新数据
实例
<?php //更新数据库 //1.链接数据库 require __DIR__.'/inc/connect.php'; //3 创建 sql预处理对象+ 2 创建sql语句 $stmt=$pdo->prepare('UPDATE `menu` SET `classify`=:classify,`nameEn`=:nameEn,`nameCN`=:nameCn WHERE `nameEn`=:nameEn2 AND `nameCn`=:nameCn2 ' ); //4 给sql预处理对象的模板绑定值 $classify=4; $nameEn='ljj888'; $nameCn='林俊杰555'; $nameEn2='ljj3'; $nameCn2='林俊杰3'; //5执行SQL语句 $stmt->execute() 返回布尔值 $stmt->execute(['classify'=>$classify,'nameEn'=>$nameEn,'nameCn'=>$nameCn,'nameEn2'=>$nameEn2,'nameCn2'=>$nameCn2]); echo "成功更新".$stmt->rowCount()."条记录,主键:".$pdo->lastInsertId(); //6关闭数据库对象 unset($pdo)或$pdo=null; $pdo=null;
运行实例 »
点击 "运行实例" 按钮查看在线实例
查询数据
实例
<?php //查询数据库 //1.链接数据库 require __DIR__.'/inc/connect.php'; //3 创建 sql预处理对象+ 2 创建sql语句 $stmt=$pdo->prepare('SELECT * FROM `menu` WHERE `nameEn`=:nameEn2 AND `nameCn`=:nameCn2 ' ); //4 给sql预处理对象的模板绑定值 $nameEn2='ljj'; $nameCn2='林俊杰'; //5执行SQL语句 $stmt->execute() 返回布尔值 $stmt->execute(['nameEn2'=>$nameEn2,'nameCn2'=>$nameCn2]); //echo "查询到5条记录".$stmt->rowCount()."条记录,主键:".$pdo->lastInsertId(); //遍历查询结果 fetch()返回结果集中一条记录 //echo "<pre>".print_r($stmt->fetch(),true); //因为fetch()没有设置获取模式参数 所以结果集 既返回了索引数组部分也返回了关联数组部分 //只获取关联数组部分的数据 $stmt->fetch(PDO::FETCH_ASSOC) //echo "<pre>".print_r($stmt->fetch(PDO::FETCH_ASSOC),true); //循环输出查询结果--------------方法一 fetch (大量数据 推荐使用此方式) //while ($menu=$stmt->fetch(PDO::FETCH_ASSOC)) { // echo "<pre>".print_r($menu,true); //} //循环输出查询结果--------------方法二 fetchALL (少量数据 如1000条内 因为数据会全部加载到内存) //$menu=$stmt->fetchALL(PDO::FETCH_ASSOC); //foreach ($menu as $key => $value) { // echo "<pre>".print_r($value,true); //}; //循环输出查询结果--------------方法三 将2个字段绑定 比如 名字和电话号码 (作为了解使用不多) $stmt->bindColumn('nameCn',$nameCn); $stmt->bindColumn('nameEn',$nameEn); //遍历 mb_substr(0,20) 字符串截取0到第20个 while ($stmt->fetch(PDO::FETCH_ASSOC)) { echo "中文名:".$nameCn2." 英文简称:".$nameEn2."<br>"; } //6关闭数据库对象 unset($pdo)或$pdo=null; $pdo=null;
运行实例 »
点击 "运行实例" 按钮查看在线实例