整理的一些mysql数据库的 *** 作(包括命令行和PHP脚本两种方式)

整理的一些mysql数据库的 *** 作(包括命令行和PHP脚本两种方式),第1张

整理的一些mysql数据库的 *** 作(包括命令行和PHP脚本两种方式) 整理的一些mysql数据库的 *** 作(包括命令行和PHP脚本两种方式)

注意:除了连接的其他命令行都应该在最后加英文的 ; 做结尾

1、连接/退出mysql服务器:

①命令行:
连接:mysql -u root -p 然后根据提示输入密码(登录成功后出现mysql>命令提示即为成功)
退出:exit

②PHP脚本:
连接:$ conn=mysqli_connect(host,username,password,dbname,port,socket);(括号内均为可选项)
退出:mysqli_close ($conn);

2、创建/删除数据库:

①命令行:
创建:create database 数据库名;
删除:drop database 数据库名;

②PHP脚本:
创建/删除:mysqli_query(connection,query,resultmode);

(括号内resultmode为可选项,可以是以下任意一个:MYSQLI_USE_RESULT(需要检索大量数据时使用),MYSQLI_STORE_RESULT(默认))

query:规定查询字符串,如‘create database ling’‘drop database ling’

例子:

';
$sql = 'CREATE DATAbase ling';
$retval = mysqli_query($conn,$sql );
if(! $retval )
{
    die('创建数据库失败: ' . mysqli_error($conn));
}
echo "数据库创建成功n";
mysqli_close($conn);
?>
3、选择数据库:

①命令行:

use 数据库名;

②PHP脚本:

mysqli_select_db(connection,dbname);
4、创建/删除数据表

通用:CREATE TABLE table_name (column_name column_type);
DROP TABLE table_name;

①命令行:
创建:

create table 表名(
column_name1 column_type1,
column_name2 column_type2,
......
);

创建后可用 show tables; 显示数据库中所有数据表名称

删除:drop table 表名;

②PHP脚本:
创建:

$sql="create table 表名(
column_name1 column_type1,
column_name2 column_type2,
......
);";
$retval = mysqli_query( $conn, $sql );

例子:

CREATE TABLE IF NOT EXISTS `tbl`(
   ‘id’ INT UNSIGNED AUTO_INCREMENT,
   ‘title VARCHAR(100) NOT NULL,
   ‘author’ VARCHAR(40) NOT NULL,
   ‘submission_date’ DATE,
   PRIMARY KEY ( ‘id’ )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

AUTO_INCREMENT:定义列为自增的属性,一般用于主键,数值会自动加1;
PRIMARY KEY关键字用于定义列为主键。 可使用多列来定义主键,列间以逗号分隔;
ENGINE 设置存储引擎,CHARSET 设置编码;
不想字段为 NULL 可以设置字段的属性为 NOT NULL, 在 *** 作数据库时如果输入该字段的数据为NULL ,就会报错

删除:drop table 表名;

5、查看数据表与查询数据 5.1查看数据表(查询表中所有数据,SELECT):

①使用命令行是一个最简单的方法:

select * from 表名;

②PHP脚本:

......
// 设置编码,防止中文乱码
mysqli_query($conn , "set names utf8");

$sql = 'SELECt id, title, 
        author, submission_date
        FROM tbl';
 
mysqli_select_db( $conn, 'ling' );
$retval = mysqli_query( $conn, $sql );
if(! $retval )
{
    die('无法读取数据: ' . mysqli_error($conn));
}
echo ' mysqli_fetch_array 测试';
echo 'ID标题作者提交日期';
while($row = mysqli_fetch_array($retval, MYSQLI_ASSOC))
{
    echo " {$row['id']} ".
         "{$row['title']}  ".
         "{$row['author']}  ".
         "{$row['submission_date']}  ".
         "";
}
echo '';
mysqli_close($conn);
5.2查询数据(WHERe)

通用:SELECT field1,field2,...,fieldN FROM table_name1,table_name2... [WHERe condition1 [AND [OR]] condition2...]

可指定一个或多个查询条件:=(相等返回true)、<>,!=(不相等返回true)、>(左边大于右边返回true)、<(左边小于右边返回true)、>=(左边大于或等于右边返回true)、<=(左边小于或等于右边返回true)

字符串比较时不区分大小写,可用 BINARY 关键字来设定 WHERe 子句的字符串比较区分大小写:
SELECt * FROM tb1 WHERe BINARY author=‘ling.com’;

如果给定的条件在表中没有任何匹配的记录,那么查询不会返回任何数据

6、插入数据(INSERT)

通用:

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

如果数据是字符型,必须使用单引号或者双引号,如:“ling”

例子(PHP脚本):

';

// 设置编码,防止中文乱码
mysqli_query($conn , "set names utf8");
 
$title = 'mysql学习';
$author = 'ling.com';
$submission_date = '2021-10-17';
 
$sql = "INSERT INTO tbl ".
        "(title,author, submission_date) ".
        "VALUES ".
        "('$title','$author','$submission_date')";

mysqli_select_db( $conn, 'ling' );
$retval = mysqli_query( $conn, $sql );
if(! $retval )
{
  die('无法插入数据: ' . mysqli_error($conn));
}
echo "数据插入成功n";
mysqli_close($conn);
?>
7、更新数据(UPDATE)

通用:UPDATE table_name SET field1=new_value1, field2=new_value2 [WHERe Clause]

注:不使用 WHERe 子句将数据表的全部数据进行更新

8、删除数据(DELETE)

通用:DELETE FROM table_name [WHERe Clause]

如果没有WHERe语句,则表中所有记录均被删除

9、查询含有某字符的数据(link)

使用百分号 % 字符来表示任意字符,类似于正则表达式中的星号 *
如果没有使用百分号 % , LIKE子句与等号 = 的效果是一样的
可以在 SELECt、DELETE 或 UPDATE 命令中使用 WHERe…LIKE 子句来指定条件

通用:SELECT field1, field2,...fieldN FROM table_name WHERe field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue'

例子(命令行):

SELECt * from tbl  WHERe author LIKE '%com';
10、连接SELECt语句的结果组合到一个结果集合(UNIOn)

通用:

SELECT expression1, expression2, ... expression_n
FROM tables
[WHERe conditions]
UNIOn [ALL | DISTINCT]
SELECt expression1, expression2, ... expression_n
FROM tables
[WHERe conditions];

expression:要检索的列;
DISTINCT:默认值,删除结果集中重复的数据;ALL:保留重复数据

11、连接多个表(从多表中读取数据)

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

通用:SELECt a.id, a.author, b.count FROM tbl a INNER JOIN tcount_tbl b ON a.author = b.author;

例子(命令行):

1、INNER JOIN:
mysql> use ling;
Database changed
mysql> SELECt * FROM tcount_tbl;
+---------------+--------------+
| author | count |
+---------------+--------------+
| 菜鸟教程  | 10           |
| RUNOOB.COM    | 20           |
| Google        | 22           |
+---------------+--------------+
3 rows in set (0.01 sec)
 
mysql> SELECt * from tbl;
+-----------+---------------+---------------+-----------------+
| id | title  | 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      |
+-----------+---------------+---------------+-----------------+
5 rows in set (0.01 sec)

mysql> SELECt a.id, a.author, b.count FROM tbl a INNER JOIN tcount_tbl b ON a.author = b.author;
+-------------+-----------------+----------------+
| a.id | a.author | b.count |
+-------------+-----------------+----------------+
| 1           | 菜鸟教程    | 10             |
| 2           | 菜鸟教程    | 10             |
| 3           | RUNOOB.COM      | 20             |
| 4           | RUNOOB.COM      | 20             |
+-------------+-----------------+----------------+
4 rows in set (0.00 sec)

2、LEFT JOIN:
mysql> SELECt a.id, a.author, b.count FROM tbl a LEFT JOIN tcount_tbl b ON a.author = b.author;
+-------------+-----------------+----------------+
| a.runoob_id | a.runoob_author | b.runoob_count |
+-------------+-----------------+----------------+
| 1           | 菜鸟教程    | 10             |
| 2           | 菜鸟教程    | 10             |
| 3           | RUNOOB.COM      | 20             |
| 4           | RUNOOB.COM      | 20             |
| 5           | FK              | NULL           |
+-------------+-----------------+----------------+
5 rows in set (0.01 sec)
12、对查询数据进行排序(ORDER BY)

通用:

SELECt field1, field2,...fieldN FROM table_name1, table_name2...
ORDER BY field1 [ASC [DESC][默认 ASC]], [field2...] [ASC [DESC][默认 ASC]]

ASC:升序排列;DESC:降序排列
如果字符集采用的是utf8编码,需要先对字段进行转码然后排序:... ORDER BY ConVERT(fieldN using gbk);

13、对结果集进行分组(GROUP BY)

通用:

SELECt column_name, function(column_name)
FROM table_name
WHERe column_name operator value
GROUP BY column_name;

例子(命令行):

如果数据表employee_tbl如下:
+----+--------+---------------------+--------+
| id | name   | date                | signin |
+----+--------+---------------------+--------+
|  1 | 小明 | 2016-04-22 15:25:33 |      1 |
|  2 | 小王 | 2016-04-20 15:25:47 |      3 |
|  3 | 小丽 | 2016-04-19 15:26:02 |      2 |
|  4 | 小王 | 2016-04-07 15:26:14 |      4 |
|  5 | 小明 | 2016-04-11 15:26:40 |      4 |
|  6 | 小明 | 2016-04-04 15:26:54 |      2 |
+----+--------+---------------------+--------+

使用 GROUP BY 将数据表按名字进行分组,并统计每个人有多少条记录:
mysql> SELECt name, COUNT(*) FROM employee_tbl GROUP BY name;
+--------+----------+
| name   | COUNT(*) |
+--------+----------+
| 小丽 |        1 |
| 小明 |        3 |
| 小王 |        2 |
+--------+----------+
3 rows in set (0.01 sec)

WITH ROLLUP:可以实现在分组统计数据基础上再进行相同的统计(SUM,AVG,COUNT…)

例子(命令行):

mysql> SELECt name, SUM(signin) as signin_count FROM  employee_tbl GROUP BY name WITH ROLLUP;
+--------+--------------+
| name   | signin_count |
+--------+--------------+
| 小丽 |            2 |
| 小明 |            7 |
| 小王 |            7 |
| NULL   |           16 |
+--------+--------------+
4 rows in set (0.00 sec)

其中NULL表示所有人的总登录次数,可使用coalesce设置一个取代NULL的名称:select coalesce(a,b,c);

例子(命令行):

mysql> SELECT coalesce(name, '总数'), SUM(signin) as signin_count FROM  employee_tbl GROUP BY name WITH ROLLUP;
+--------------------------+--------------+
| coalesce(name, '总数') | signin_count |
+--------------------------+--------------+
| 小丽                   |            2 |
| 小明                   |            7 |
| 小王                   |            7 |
| 总数                   |           16 |
+--------------------------+--------------+
4 rows in set (0.01 sec)
14、NULL值的处理

当使用SELECt或WHERe等语句,若提供的查询条件字段为 NULL ,该命令可能就无法正常工作

三大运算符:IS NULL,IS NOT NULL,<=>(当比较的两值相等或均为NULL时返回true)

注意:NULL 值与任何其它值的比较(即使是 NULL)永远返回 NULL,即 NULL = NULL 返回 NULL,故不能使用 = NULL 或 != NULL 在列中查找 NULL 值

①例子(命令行):

假设数据表test_tbl如下:
+---------------+--------------+
| author        | count        |
+---------------+--------------+
| RUNOOB        | 20           |
| 菜鸟教程  | NULL         |
| Google        | NULL         |
| FK            | 20           |
+---------------+--------------+

= 运算符不起作用:
mysql> SELECT * FROM test_tbl WHERe count = NULL;
Empty set (0.00 sec)

使用IS NULL:
mysql> SELECt * FROM test_tbl WHERe count IS NULL;
+---------------+--------------+
| author        | count        |
+---------------+--------------+
| 菜鸟教程       | NULL         |
| Google        | NULL         |
+---------------+--------------+
2 rows in set (0.01 sec)

②例子(PHP脚本):

在 if...else 语句来处理变量是否为空,并生成相应的条件语句
作者登陆次数';
while($row = mysqli_fetch_array($retval, MYSQL_ASSOC))
{
    echo "".
         "{$row['author']}  ".
         "{$row['count']}  ".
         "";
}
echo '';
mysqli_close($conn);
?>
15、MySQL正则表达式匹配(REGEXP)

^:匹配输入字符串的开始位置(若设置了RegExp 对象的 Multiline属性,也匹配 ‘n’ 或 ‘r’ 之后的位置);
$:匹配输入字符串的结束位置(若设置了RegExp 对象的 Multiline 属性,也匹配 ‘n’ 或 ‘r’ 之前的位置);
.:匹配除 “n” 之外的任何单个字符。要匹配包括 ‘n’ 在内的任何字符,应使用像 ‘[.n]’ 的模式;
[…]:字符集合。匹配所包含的任意一个字符。例如, ‘[abc]’ 可以匹配 “plain” 中的 ‘a’;
[^…]:负值字符集合。匹配未包含的任意字符。例如, ‘[^abc]’ 可以匹配 “plain” 中的’p’;
p1|p2|p3:匹配 p1 或 p2 或 p3。例如,‘z|food’ 能匹配 “z” 或 “food”。’(z|f)ood’ 则匹配 “zood” 或 “food”;
*:匹配前面的子表达式零次或多次。例如,zo* 能匹配 “z” 以及 “zoo”。它等价于{0,};
+:匹配前面的子表达式一次或多次。例如,‘zo+’ 能匹配 “zo” 以及 “zoo”,但不能匹配 “z”。+ 等价于 {1,};
{n}:n 是一个非负整数。匹配确定的 n 次。例如,‘o{2}’ 不能匹配 “Bob” 中的 ‘o’,但是能匹配 “food” 中的两个 o;
{n,m}:m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次

例子(命令行):

查找name字段中以'st'为开头的所有数据:
mysql> SELECT name FROM person_tbl WHERe name REGEXP '^st';

查找name字段中包含'mar'字符串的所有数据:
mysql> SELECt name FROM person_tbl WHERe name REGEXP 'mar';
鉴于无法一次把MySQL所有 *** 作写完,本文章会不定时更新……

参考:
MySQL教程 | 菜鸟教程:https://www.runoob.com/mysql/mysql-tutorial.html

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4667409.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-06
下一篇 2022-11-06

发表评论

登录后才能评论

评论列表(0条)

保存