注意:除了连接的其他命令行都应该在最后加英文的 ; 做结尾
1、连接/退出mysql服务器:①命令行:
连接:mysql -u root -p 然后根据提示输入密码(登录成功后出现mysql>命令提示即为成功)
退出:exit
②PHP脚本:
连接:$ conn=mysqli_connect(host,username,password,dbname,port,socket);(括号内均为可选项)
退出:mysqli_close ($conn);
①命令行:
创建: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 '5.2查询数据(WHERe)ID标题作者提交日期 '; while($row = mysqli_fetch_array($retval, MYSQLI_ASSOC)) { echo "{$row['id']} ". "{$row['title']} ". "{$row['author']} ". "{$row['submission_date']} ". " "; } echo ''; mysqli_close($conn);
通用: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:保留重复数据
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);
通用:
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 "15、MySQL正则表达式匹配(REGEXP)". "{$row['author']} ". "{$row['count']} ". " "; } echo ''; mysqli_close($conn); ?>
^:匹配输入字符串的开始位置(若设置了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教程 | 菜鸟教程:https://www.runoob.com/mysql/mysql-tutorial.html
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)