MySQL数据库学习笔记(一)


作为开发人员,无论是前端还是后端,与数据库都要进行打交道.后端开发自然不必多说,而身为前端,起码应该知道数据库最基础的操作,SQL基本的增删改查语句等.本篇主要是在学习使用PHP操作数据库的过程中,整理的一些资料,方便日后复习.

一、数据库的创建

1、创建数据库

//创建数据库
$createDb = "CREATE DATABASE database_name";

2、检测数据库创建结果

2.1、面向对象方法

if($conn -> query($createDb) === true){
    echo "数据库创建成功!";
}else{
    echo "Error creating database: " . $conn->error;
}

2.2、面向过程方法

if(mysqli_query($conn,$createDb)){
    echo "数据库创建成功!";
}else{
    echo "Error creating database: " . mysqli_error($conn);
}

二、创建数据表

1、创建表

语法:CREATE TABLE table_name();

实例

$createTable = "CREATE TABLE members (
id INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
姓名 VARCHAR(10) NOT NULL,
电话 VARCHAR(13) NOT NULL,
内容 VARCHAR(60) NOT NULL
)

参数说明

约束 说明
NOT NULL 每一行都必须含有值(不能为空),null 值是不允许的。
DEFAULT 规定没有给列赋值时的默认值。
UNIQUE 保证某列的每行必须有唯一的值。
CHECK 保证列中的值符合指定的条件。
FOREIGN KEY 保证一个表中的数据匹配另一个表中的值的参照完整性。
PRIMARY KEY NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。

2、检测表的创建

2.1、面向对象方法

if($conn -> query($createTable)===true){
    echo "数据表创建成功<br>";
}else {
    echo '数据表创建错误:' .$conn -> error;
}

2.2、面向过程方法

if(mysqli_query($conn,$createTable)){
    echo "数据表创建成功<br>";
}else {
    echo '数据表创建错误:' .mysqli_error($conn);
}

3、向表中插入数据

在创建完数据表后,我们可以向表中插入数据,但须遵循一些语法规则:

  • PHP 中 SQL 查询语句必须使用引号
  • 在 SQL 查询语句中的字符串值必须加引号
  • 数值的值不需要引号
  • NULL 值不需要引号

3.1、语法用法

语法:
INSERT INTO table_name (column1, column2, column3,...) VALUES (value1, value2, value3,...)

实例

...
//参照上方规则:字符串必须加引号
$insertData = "INSERT INTO members (姓名,电话,内容)
VALUES ('".$name."',$phone,'".$comment."')";

...

3.2、检测插入数据结果

3.2.1、面向对象方法
if ($conn->query($insertData) === TRUE) {
    echo "新记录插入成功";
} else {
    echo "Error: " . $insertData . "<br>" . $conn->error;
}
3.2.2、面向过程方法
if (mysqli_query($conn, $insertData)) {
    echo "新记录插入成功";
} else {
    echo "Error: " . $insertData . "<br>" .  mysqli_error($conn);
}

三、数据库连接

1、面向对象方法

//数据库连接
$conn = new mysqli($servername,$username,$password,$database_name);

//连接检测
if($conn -> connect_error){
    die("Connection failed:".$conn -> connect_error);
}else {
    echo "数据库连接成功。<br>";
}

2、面向过程方法

//数据库连接
$conn = mysqli_connect($servername,$username,$password,$database_name);

//检测连接
if(!$conn){
    die("Connection failed: " .mysqli_connect_error());
}else {
    echo "数据库连接成功。";
}

四、从数据库读取数据

语法:

  • SELECT column_name(s) FROM table_name
  • SELECT * FROM table_name 读取所有字段

1、面向对象方法

//读取数据
$fecth = "SELECT * FROM members";
$res = $conn -> query($fecth);

//检测读取结果并输出
if($res -> num_rows > 0){
while($row = $res->fetch_array()){
    echo <<<HTML
    <div class="tbodyrow">
      <span class="id tbody">{$row["id"]}</span>
      <span class="name tbody">{$row["姓名"]}</span>
      <span class="phone tbody">{$row["电话"]}</span>
      <span class="comment tbody">{$row["内容"]}</span>
    </div>
<br>
HTML;
}
}else{
echo "0结果";
}

2、面向过程方法

//读取数据
$fecth = "SELECT * FROM members";
$res = mysqli_query($conn,$fecth);

//检测读取结果并输出
if(mysqli_num_rows($res) > 0){
while($row = mysqli_fetch_array($res)){
    echo <<<HTML
    <div class="tbodyrow">
      <span class="id tbody">{$row["id"]}</span>
      <span class="name tbody">{$row["姓名"]}</span>
      <span class="phone tbody">{$row["电话"]}</span>
      <span class="comment tbody">{$row["内容"]}</span>
    </div>
<br>
HTML;
}
}else{
echo "0结果";
}

拓展

1、WHERE

WHERE 子句用于提取满足指定标准的的记录。

语法:

SELECT column_name(s) 
FROM table_name
WHERE column_name operator value

实例

$where = "SELECT * FROM members WHERE 姓名='张三' ";

2、ORDER BY

ORDER BY 关键词用于对记录集中的数据进行排序。
默认升序排序,可以使用 DESC 进行降序排序。

语法:

SELECT column_name(s)
FROM table_name
ORDER BY column_name(s) ASC|DESC

实例

$order = "SELECT * FROM members ORDER BY id DESC;

根据两列进行排序

可以根据多个列进行排序。当按照多个列进行排序时,只有第一列的值相同时才使用第二列:

SELECT column_name(s)
FROM table_name
ORDER BY column1, column2

特殊:拼音排序

拼音排序需要根据字符集采用的编码决定使用方法

字符集 使用方法
gbk (中文编码) 直接在查询语句后边添加 ORDER BY
utf8 (万国码) 先对字段进行转码然后排序。
方法:CONVERT(row_title using gbk)

实例:现有表格如下。对表格按姓名拼音排序

id 姓名 性别
1 丁一
2 牛二
3 张三

执行操作(由于原本是拼音升序,所以这里我们用降序来区别)

$orderPy = "SELECT * FROM members
ORDER BY CONVERT(姓名 using gbk) DESC";

输出结果:

id 姓名 性别
3 张三
2 牛二
1 丁一

3、UPDATE

UPDATE 语句用于更新数据库表中已存在的记录。

语法:

UPDATE table_name
SET column1=value, column2=value2,...
WHERE some_column=some_value

注意:UPDATE 语法中的 WHERE 子句。WHERE 子句规定了哪些记录需要更新。如果您想省去 WHERE 子句,所有的记录都会被更新!

实例

现有如下表格:(已设置降序排列)

id 姓名 电话 内容
3 张三 333 我叫张三
2 牛二 222 我叫牛二
1 丁一 111 我叫丁一

修改更新表中 张三 为 李四

$updateData = "UPDATE members SET 姓名='李四'
WHERE 姓名 = '张三';

输出结果

id 姓名 电话 内容
3 李四 333 我叫张三
2 牛二 222 我叫牛二
1 丁一 111 我叫丁一

UPDATE方法可以同时修改一条数据的多个字段

修改更新表中

  • 张三 ——> 李四
  • 333 ——> 444
  • 我叫张三 ——> 我叫李四
$updateData = "UPDATE members SET 
姓名='李四',电话 = '444', 内容 = '我叫李四'
WHERE 姓名 = '张三';

输出结果:

id 姓名 电话 内容
3 李四 444 我叫李四
2 牛二 222 我叫牛二
1 丁一 111 我叫丁一

id设置为 PRIMARY KEY,不要轻易去改变它,若需要改变,不可与已存在的重复,否则无法更新数据。

4、DELETE

DELETE 语句用于从数据库表中删除行

语法:

DELETE FROM table_name
WHERE some_column = some_value

注意:DELETE中的WHERE子句。WHERE 子句规定了哪些记录需要删除。如果您想省去 WHERE 子句,所有的记录都会被删除!

实例

现有表格同上,需要删除id为3的行:

$delete = " DELETE FROM members
WHERE 姓名 = '李四';

输出结果:

id 姓名 电话 内容
2 牛二 222 我叫牛二
1 丁一 111 我叫丁一

drop truncatedelete都可以对数据表进行删除操作,具体区别如下表:

语句 含义
drop 删除表。删除表及其结构。不可回滚
truncate 清空表。删除表中所有数据,保留表结构。不可回滚
delete 删除行。删除操作作为事务记录在日志中。可以回滚

TRUNCATE与不带 WHEREDELETE 都是删除表数据,保留表结构。


文章作者: 塵影
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 塵影学习笔记 !
评论
  目录