MySQL学习笔记

这篇博客详细介绍了MySQL的学习笔记,包括软件安装、数据库的创建、删除、导出、导入,数据表的创建、删除、改名、复制等操作,以及数据的添加、删除、修改和查找。还涵盖了常用的MySQL函数和SQL语句。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MYSQL 学习笔记

对数据库的操作可分为:

1,软件的安装以及对数据库的连接

2,对数据库的处理(创建,删除,导出,导入):

3, 对数据表整体的处理(创建,删除,改名,复制,合并,修改表的类型,临时表);

4,对数据表的格式的处理(添加列,删除列,修改列名,修改列类型,设定列字段默认值,删除默认值,索引)

5,对表内数据的处理(添加,删除数据,删除重复数据,修改,排序,查找, 序列,分组)

6, 其他(函数,语法)




一 软件的安装与数据库的连接

1,安装过程我们需要通过开启管理员权限来安装,否则会由于权限不足导致无法安装。
Linux/UNIX 上安装 MySQL
Linux平台上推荐使用RPM包来安装Mysql,MySQL AB提供了以下RPM包的下载地址:

MySQL - MySQL服务器。你需要该选项,除非你只想连接运行在另一台机器上的MySQL服务器。
MySQL-client - MySQL 客户端程序,用于连接并操作Mysql服务器。
MySQL-devel - 库和包含文件,如果你想要编译其它MySQL客户端,例如Perl模块,则需要安装该RPM包。
MySQL-shared - 该软件包包含某些语言和应用程序需要动态装载的共享库(libmysqlclient.so*),使用MySQL。
MySQL-bench - MySQL数据库服务器的基准和性能测试工具。
安装前,我们可以检测系统是否自带安装 MySQL:

rpm -qa | grep mysql

如果有,可以进行卸载:
rpm -e mysql  // 普通删除模式
rpm -e --nodeps mysql  // 强力删除模式,如果使用上面命令删除时,提示有依赖的其它文件,则用该命令可以对其进行强力删除

2,验证安装:

[root@host]# mysqladmin --version
mysqladmin  Ver 8.23 Distrib 5.0.9-0, for redhat-linux-gnu on i386//说明安装成功

3,连接:
(1)以二进制方式连接:

[root@host]# mysql -u root -p
Enter password:******

退出mysql:

mysql> exit
Bye

(2)以PHP脚本的方式连接:(命名为 connect.php)
PHP 提供了 mysqli_connect() 函数来连接数据库。mysqli_connect(host,username,password,dbname,port,socket);
用mysqli_close ( mysqli $link )断开连接

<?php
$dbhost = 'localhost:3306';  // mysql服务器主机地址,默认为3306,
$dbuser = 'root';            // mysql用户名
$dbpass = '123456';          // mysql用户名密码
// $dbname ='RUNOB';   //如果是连接到创建好的数据库mybase 需要加这句
$conn = mysqli_connect($dbhost, $dbuser, $dbpass($bdname));
if(! $conn )
{
    die('Could't connect: ' . mysqli_error());
}
echo '数据库连接成功!';

?>

二,对数据库的处理(创建,删除,导出,导入);

1,创建数据库

通常查看用户的数据库用:

SHWO DATABASES;

选择数据库:用use

USE RUNOOC;

(1)语法:CREATE DATABASE 数据库名;

[root@host]# mysql -u root -p   
Enter password:******  # 登录后进入终端

mysql> create DATABASE RUNOOB;

(2)以PHP脚本创建:

?php
require ‘connect.php’; // 引用上一个脚本连接数据库

$sql = 'CREATE DATABASE RUNOOB';
$retval = mysqli_query($conn,$sql );
if(! $retval )
{
    die('创建数据库失败: ' . mysqli_error($conn));
}
echo "数据库 RUNOOB 创建成功\n";

mysqli_close($conn); // 关闭数据库必不可少
?>
2,删除数据库

(1)drop 命令删除数据库
语法:drop database <数据库名>;

mysql> drop database RUNOOB;

(2)PHP脚本:

<?php
require ‘connect.php’;//l连接数据库

$sql = 'DROP DATABASE RUNOOB';
$retval = mysqli_query( $conn, $sql );
if(! $retval )
{
    die('删除数据库失败: ' . mysqli_error($conn));
}
echo "数据库 RUNOOB 删除成功\n";
mysqli_close($conn);
?>
3,导出

MySQL中你可以使用SELECT…INTO OUTFILE语句来简单的导出数据到文本文件上。

mysql> SELECT * FROM runoob_tbl 
    -> INTO OUTFILE '/tmp/runoob.txt';



ELECT ... INTO OUTFILE 语句有以下属性:
LOAD DATA INFILE是SELECT ... INTO OUTFILE的逆操作,SELECT句法。为了将一个数据库的数据写入一个文件,使用SELECT ... INTO OUTFILE,为了将文件读回数据库,使用LOAD DATA INFILE。
SELECT...INTO OUTFILE 'file_name'形式的SELECT可以把被选择的行写入一个文件中。该文件被创建到服务器主机上,因此您必须拥有FILE权限,才能使用此语法。
输出不能是一个已存在的文件。防止文件数据被篡改。
你需要有一个登陆服务器的账号来检索文件。否则 SELECT ... INTO OUTFILE 不会起任何作用。
在UNIX中,该文件被创建后是可读的,权限由MySQL服务器所拥有。这意味着,虽然你就可以读取该文件,但可能无法将其删除。

将数据表及数据库拷贝至其他主机

$ mysqldump -u root -p database_name table_name > dump.txt
password *****
4,导入

如果你需要将备份的数据库导入到MySQL服务器中,可以使用以下命令,使用以下命令你需要确认数据库已经创建:

$ mysql -u root -p database_name < dump.txt
password *****

三,对数据表整体的处理(创建,删除,改名,复制,合并,修改表的类型,临时表);

1,创建数据表

创建MySQL数据表需要以下信息:

表名
表字段名
定义每个表字段
(1)二进制:
语法:CREATE TABLE table_name (column_name column_type);

CREATE TABLE IF NOT EXISTS `runoob_tbl`(
   `runoob_id` INT UNSIGNED AUTO_INCREMENT, //自增
   `runoob_title` VARCHAR(100) NOT NULL,
   `runoob_author` VARCHAR(40) NOT NULL,
   `submission_date` DATE,
   PRIMARY KEY ( `runoob_id` )//设置主键,主键值唯一
)ENGINE=InnoDB DEFAULT CHARSET=utf8;  // DEFAULT 用于设置默认值和格式

(2)PHP脚本:

<?php
require ‘connect.php’;//连接数据库

$sql = "CREATE TABLE runoob_tbl( ".
        "runoob_id INT NOT NULL AUTO_INCREMENT, ".
        "runoob_title VARCHAR(100) NOT NULL, ".
        "runoob_author VARCHAR(40) NOT NULL, ".
        "submission_date DATE, ".
        "PRIMARY KEY ( runoob_id ))ENGINE=InnoDB DEFAULT CHARSET=utf8; ";
$retval = mysqli_query( $conn, $sql );
if(! $retval )
{
    die('数据表创建失败: ' . mysqli_error($conn));
}
echo "数据表创建成功\n";
mysqli_close($conn);
?>
2,删除数据表

语法:DROP TABLE table_name ;
PHP脚本:

<?php
 require ‘connect.php’ ;
$sql = "DROP TABLE runoob_tbl";

$retval = mysqli_query( $conn, $sql );
if(! $retval )
{
  die('数据表删除失败: ' . mysqli_error($conn));
}
echo "数据表删除成功\n";
mysqli_close($conn);
?>
3,修改表名
mysql> ALTER TABLE testalter_tbl RENAME TO alter_tbl;
4,复制数据表
CREATE TABLE new_table LIKE source_table;
INSERT INTO now_table SELECT * FROM source_table;
5,合并数据表

只能合并同一个数据库中的数据表
(1)用UNION:
MySQL UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。多个 SELECT 语句会删除重复的数据。
UNION 语法:

SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions]
UNION [ALL | DISTINCT]
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions];

//expression1, expression2, ... expression_n: 要检索的列。

tables: 要检索的数据表。

WHERE conditions: 可选, 检索条件。

DISTINCT: 可选,删除结果集中重复的数据。默认情况下 UNION 操作符已经删除了重复数据,所以 DISTINCT 修饰符对结果没啥影响。

ALL: 可选,返回所有结果集,包含重复数据。

**(2) 用JOIN **
INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。


mysql> SELECT * FROM tcount_tbl;
+---------------+--------------+
| runoob_author | runoob_count |
+---------------+--------------+
| 菜鸟教程  | 10           |
| RUNOOB.COM    | 20           |
| Google        | 22           |
+---------------+--------------+
mysql> SELECT * from runoob_tbl;
+-----------+---------------+---------------+-----------------+
| runoob_id | runoob_title  | runoob_author | submission_date |
+-----------+---------------+---------------+-----------------+
| 1         | 学习 PHP    | 菜鸟教程  | 2017-04-12      |
| 2         | 学习 MySQL  | 菜鸟教程  | 2017-04-12      |
| 3         | 学习 Java   | RUNOOB.COM    | 2015-05-01      |
| 4         | 学习 Python | RUNOOB.COM    | 2016-03-06      |
| 5         | 学习 C      | FK            | 2017-04-05      |
+-----------+---------------+---------------+-----------------+

mysql> SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a INNER JOIN tcount_tbl b ON a.runoob_author = b.runoob_author;
+-------------+-----------------+----------------+
| a.runoob_id | a.runoob_author | b.runoob_count |
+-------------+-----------------+----------------+
| 1           | 菜鸟教程    | 10             |
| 2           | 菜鸟教程    | 10             |
| 3           | RUNOOB.COM      | 20             |
| 4           | RUNOOB.COM      | 20             |
+-------------+-----------------+----------------+

mysql> SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a, tcount_tbl b WHERE a.runoob_author = b.runoob_author;
+-------------+-----------------+----------------+
| a.runoob_id | a.runoob_author | b.runoob_count |
+-------------+-----------------+----------------+
| 1           | 菜鸟教程    | 10             |
| 2           | 菜鸟教程    | 10             |
| 3           | RUNOOB.COM      | 20             |
| 4           | RUNOOB.COM      | 20             |
+-------------+-----------------+----------------+

使用 LEFT JOIN,该语句会读取左边的数据表 runoob_tbl 的所有选取的字段数据,即便在右侧表 tcount_tbl中 没有对应的 runoob_author 字段值。

使用了 RIGHT JOIN,该语句会读取右边的数据表 tcount_tbl 的所有选取的字段数据,即便在左侧表 runoob_tbl 中没有对应的runoob_author 字段值。

php脚本:

<?php
 require 'connect.php';
// 设置编码,防止中文乱码
mysqli_query($conn , "set names utf8");
 
$sql = 'SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a INNER JOIN tcount_tbl b ON a.runoob_author = b.runoob_author';
 
$retval = mysqli_query( $conn, $sql );
if(! $retval )
{
    die('无法读取数据: ' . mysqli_error($conn));
}

while($row = mysqli_fetch_array($retval, MYSQL_ASSOC))
{
    echo "<tr><td> {$row['runoob_id']}</td> ".
         "<td>{$row['runoob_author']} </td> ".
         "<td>{$row['runoob_count']} </td> ".
         "</tr>";
}

mysqli_close($conn);
?>
6,修改数据表的类型

查看数据表类型可以使用 SHOW TABLE STATUS 语句。

mysql>  SHOW TABLE STATUS LIKE 'testalter_tbl'\G

四,对数据表的格式的处理(添加列,删除列,修改列名,修改列类型,设定列字段默认值,删除默认值,索引)

1,添加列
mysql> ALTER TABLE testalter_tbl ADD i INT;
2,删除列
mysql> ALTER TABLE testalter_tbl  DROP i;
3,修改列名及列类型
可以在ALTER命令中使用 MODIFY 或 CHANGE 子句 。
mysql> ALTER TABLE testalter_tbl MODIFY c CHAR(10);

或
mysql> ALTER TABLE testalter_tbl CHANGE i j BIGINT;

在修改ID的数据类型是 建表时设置的 key 以及AUTO 依旧存在
在没有主键和索引的数据表中插入重复的数据会被忽略

4,设定字段的默认字段及删除默认值
mysql> ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000;
mysql> ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;

五,对表内数据的处理(添加,删除数据,删除重复数据,修改,排序,查找, 序列,分组)

1,添加信息

语法:

INSERT INTO table_name ( field1, field2,...fieldN )
                       VALUES
                       ( value1, value2,...valueN ),
                        ( value1, value2,...valueN ),
                         ( value1, value2,...valueN );

1.5 读取数据

语法:select * from runoob_tbl;
PHP脚本:

<?php
require ‘connect.php’;
mysqli_query($conn , "set names utf8"); // 设置格式
 
$sql = 'SELECT runoob_id, runoob_title, 
        runoob_author, submission_date
        FROM runoob_tbl';
 //获取数据
$retval = mysqli_query( $conn, $sql );
if(! $retval )
{
    die('无法读取数据: ' . mysqli_error($conn));
}

while($row = mysqli_fetch_array($retval, MYSQLI_ASSOC))   // 或者用while($row = mysqli_fetch_assoc($retval))
{
    echo "<tr><td> {$row['runoob_id']}</td> ".
         "<td>{$row['runoob_title']} </td> ".
         "<td>{$row['runoob_author']} </td> ".
         "<td>{$row['submission_date']} </td> ".
         "</tr>";
}
//输出数据
mysqli_free_result($retval); // 释放内存
mysqli_close($conn);
?>

或者用

while($row = mysqli_fetch_array($retval, MYSQLI_NUM))
{
    echo "<tr><td> {$row[0]}</td> ".
         "<td>{$row[1]} </td> ".
         "<td>{$row[2]} </td> ".
         "<td>{$row[3]} </td> ".
         "</tr>";
}
2,删除数据

你可以使用 SQL 的 DELETE FROM 命令来删除 MySQL 数据表中的记录
语法:

DELETE FROM table_name [WHERE Clause] //WHERE 指定条件

PHP脚本:

<?php
require ‘connect.php’;
// 设置编码,防止中文乱码
mysqli_query($conn , "set names utf8");
 
$sql = 'DELETE FROM runoob_tbl
        WHERE runoob_id=3';

$retval = mysqli_query( $conn, $sql );
if(! $retval )
{
    die('无法删除数据: ' . mysqli_error($conn));
}
echo '数据删除成功!';
mysqli_close($conn);
?>
3,删除重复信息

防止表中出现重复数据
你可以在 MySQL 数据表中设置指定的字段为 PRIMARY KEY(主键) 或者 UNIQUE(唯一) 索引来保证数据的唯一性。
统计重复数据
以下我们将统计表中 first_name 和 last_name的重复记录数:


    mysql> SELECT COUNT(*) as repetitions, last_name, first_name
    -> FROM person_tbl
    -> GROUP BY last_name, first_name
    -> HAVING repetitions > 1;


确定哪一列包含的值可能会重复。
在列选择列表使用COUNT(*)列出的那些列。
在GROUP BY子句中列出的列。
HAVING子句设置重复数大于1。

过滤重复数据

mysql> SELECT DISTINCT last_name, first_name
    -> FROM person_tbl;

你也可以使用 GROUP BY 来读取数据表中不重复的数据:

mysql> SELECT last_name, first_name
    -> FROM person_tbl
    -> GROUP BY (last_name, first_name);

删除重复数据
删除重复项其实就是 重新建一个表,并把 原表的GROUP BY 分组后的信息 复制给新表。

mysql> CREATE TABLE tmp SELECT last_name, first_name, sex FROM person_tbl  GROUP BY (last_name, first_name, sex);
mysql> DROP TABLE person_tbl;
mysql> ALTER TABLE tmp RENAME TO person_tbl;
4,修改更新数据

如果我们需要修改或更新 MySQL 中的数据,我们可以使用 SQL UPDATE 命令来操作。
语法:

UPDATE table_name SET field1=new-value1, field2=new-value2
[WHERE Clause]
mysql> UPDATE runoob_tbl SET runoob_title='python' WHERE runoob_id=3;

PHP脚本:

<?php
require ‘connect.php’;
mysqli_query($conn , "set names utf8");
 
$sql = 'UPDATE runoob_tbl
        SET runoob_title=‘Python"
        WHERE runoob_id=3';
 
$retval = mysqli_query( $conn, $sql );
if(! $retval )
{
    die('无法更新数据: ' . mysqli_error($conn));
}
echo '数据更新成功!';
mysqli_close($conn);
?>
5,排序

如果我们需要对读取的数据进行排序,我们就可以使用 MySQL 的 ORDER BY 子句来设定你想按哪个字段哪种方式来进行排序,再返回搜索结果。

mysql> SELECT * from runoob_tbl ORDER BY submission_date ASC;

php脚本:

<?php
 require ‘connect.php’;
// 设置编码,防止中文乱码
mysqli_query($conn , "set names utf8");
 
$sql = 'SELECT runoob_id, runoob_title, 
        runoob_author, submission_date
        FROM runoob_tbl
        ORDER BY  submission_date ASC';
 
mysqli_select_db( $conn, 'RUNOOB' );
$retval = mysqli_query( $conn, $sql );
if(! $retval )
{
    die('无法读取数据: ' . mysqli_error($conn));
}
echo '<h2>菜鸟教程 MySQL ORDER BY 测试<h2>';
echo '<table border="1"><tr><td>教程 ID</td><td>标题</td><td>作者</td><td>提交日期</td></tr>';
while($row = mysqli_fetch_array($retval, MYSQL_ASSOC))
{
    echo "<tr><td> {$row['runoob_id']}</td> ".
         "<td>{$row['runoob_title']} </td> ".
         "<td>{$row['runoob_author']} </td> ".
         "<td>{$row['submission_date']} </td> ".
         "</tr>";
}
echo '</table>';
mysqli_close($conn);
?>
6,查找

(1)以WHERE 来限定条件查找
语法:

SELECT column_name,column_name
FROM table_name
[WHERE Clause]
[LIMIT N][ OFFSET M]

WHERE 语法 AND 或者 OR 指定一个或多个条件。常与查找获取数据一起连用

SELECT * from runoob_tbl WHERE runoob_author='xxxx';

(2)用LIKE 来查找
语法:

SELECT field1, field2,...fieldN 
FROM table_name
WHERE field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue'

LIKE 子句中使用百分号 %字符来表示任意字符,类似于UNIX或正则表达式中的星号 *
你可以使用LIKE子句代替等号 =。
你可以使用 AND 或者 OR 指定一个或多个条件。
你可以在 DELETE 或 UPDATE 命令中使用 WHERE…LIKE 子句来指定条件。

mysql> SELECT * from runoob_tbl  WHERE runoob_author LIKE '%COM';//查找runoob_author 中含有COM字符的数据

PHP脚本:

<?php
require ‘connect.php’;
// 设置编码,防止中文乱码
mysqli_query($conn , "set names utf8");
 
$sql = 'SELECT runoob_id, runoob_title, 
        runoob_author, submission_date
        FROM runoob_tbl
        WHERE runoob_author LIKE "%COM"';

$retval = mysqli_query( $conn, $sql );
if(! $retval )
{
    die('无法读取数据: ' . mysqli_error($conn));
}
while($row = mysqli_fetch_array($retval, MYSQLI_NUM))
{
    echo "<tr><td> {$row[0]}</td> ".
         "<td>{$row[1]} </td> ".
         "<td>{$row[2]} </td> ".
         "<td>{$row[3]} </td> ".
         "</tr>";
}

mysqli_close($conn);
?>
8,分组

在用 SELECT 列1,列2 FROM 表名 GROUP BY 列1 时 表示以列1 为筛选项 ,列1,列2 为输出项
GROUP BY 语句根据一个或多个列对结果集进行分组。
语法:

SELECT column_name, function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;
mysql> SELECT name, COUNT(*) FROM   employee_tbl GROUP BY name;
+--------+----------+
| name   | COUNT(*) |
+--------+----------+
| 小丽 |        1 |
| 小明 |        3 |
| 小王 |        2 |
+--------+----------+
3 rows in set (0.01 sec)

六,常用函数:

1,mysqli_connect(host,username,password,dbname,port,socket); mysqli_connect() 函数打开一个到 MySQL 服务器的新的连接。

2,bool mysqli_close ( mysqli $link ) 用于关闭数据库

**3,mysqli_query(connection,query,resultmode); ** mysqli_query() 函数执行某个针对数据库的查询。
4,mysqli_select_db(connection,dbname); 用于选择数据库

**5,mysqli_fetch_array() ** 函数从结果集中取得一行作为关联数组,或数字数组,或二者兼有。
注释:该函数返回的字段名是区分大小写的。

6,mysqli_fetch_assoc() 函数来输出数据表 runoob_tbl 的所有记录mysqli_fetch_assoc() 函数从结果集中取得一行作为关联数组。
注释:该函数返回的字段名是区分大小写的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值