学习MySQL
- 显示数据表的属性,属性类型,主键信息,是否为NULL,默认值等其他信息
mysql> show columns from runoob_tbl; +-----------------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-----------------+------------------+------+-----+---------+----------------+ | runoob_id | int(10) unsigned | NO | PRI | NULL | auto_increment | | runoob_title | varchar(100) | NO | | NULL | | | runoob_author | varchar(40) | NO | | NULL | | | submission_date | date | YES | | NULL | | +-----------------+------------------+------+-----+---------+----------------+
- 显示数据表的详细索引信息,包括PRIMARY KEY(主键)
mysql> show index from runoob_tbl; +------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | +------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | runoob_tbl | 0 | PRIMARY | 1 | runoob_id | A | 0 | NULL | NULL | | BTREE | | | +------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
- 该命令将输出MySQL数据库管理系统的性能及统计信息
mysql> show table status from zyt_test; #显示数据库zyt_test中所有表的信息 +------------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------------+----------+----------------+---------+ | Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time | Update_time | Check_time | Collation | Checksum | Create_options | Comment | +------------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------------+----------+----------------+---------+ | runoob_tbl | InnoDB | 10 | Dynamic | 0 | 0 | 16384 | 0 | 0 | 0 | 2 | 2022-04-07 10:04:09 | NULL | NULL | utf8_general_ci | NULL | | | +------------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------------+----------+----------------+---------+ mysql> show table status from zyt_test like 'runoob%'; #表明以runoob开头的表的信息 +------------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------------+----------+----------------+---------+ | Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time | Update_time | Check_time | Collation | Checksum | Create_options | Comment | +------------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------------+----------+----------------+---------+ | runoob_tbl | InnoDB | 10 | Dynamic | 0 | 0 | 16384 | 0 | 0 | 0 | 2 | 2022-04-07 10:04:09 | NULL | NULL | utf8_general_ci | NULL | | | +------------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------------+----------+----------------+---------+ mysql> show table status from zyt_test like 'runoob%'\G; #加上\G查询结果按列打印 *************************** 1. row *************************** Name: runoob_tbl Engine: InnoDB Version: 10 Row_format: Dynamic Rows: 0 Avg_row_length: 0 Data_length: 16384 Max_data_length: 0 Index_length: 0 Data_free: 0 Auto_increment: 2 Create_time: 2022-04-07 10:04:09 Update_time: NULL Check_time: NULL Collation: utf8_general_ci Checksum: NULL Create_options: Comment:
创建数据表
mysql> 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; 实例解析: 如果你不想字段为 NULL 可以设置字段的属性为 NOT NULL, 在操作数据库时如果输入该字段的数据为NULL ,就会报错。 AUTO_INCREMENT定义列为自增的属性,一般用于主键,数值会自动加1。 PRIMARY KEY关键字用于定义列为主键。 您可以使用多列来定义主键,列间以逗号分隔。 ENGINE 设置存储引擎,CHARSET 设置编码。
插入数据表
mysql> insert into runoob_tbl -> (runoob_title,runoob_author,submission_date) -> values -> ("学习PHP","菜鸟教程",NOW()); Query OK, 1 row affected, 1 warning (0.01 sec) mysql> insert into runoob_tbl -> (runoob_title,runoob_author,submission_date) -> values -> ("学习Mysql","菜鸟教程",NOW()); Query OK, 1 row affected, 1 warning (0.01 sec) mysql> insert into runoob_tbl -> (runoob_title,runoob_author,submission_date) -> values -> ("JAVA教程","RUNOOB.COM",'2022-04-25'); Query OK, 1 row affected (0.01 sec) 注意: 使用箭头标记 -> 不是 SQL 语句的一部分,它仅仅表示一个新行,如果一条SQL语句太长,我们可以通过回车键来创建一个新行来编写 SQL 语句,SQL 语句的命令结束符为分号 ;。 在以上实例中,我们并没有提供 runoob_id 的数据,因为该字段我们在创建表的时候已经设置它为 AUTO_INCREMENT(自动增加) 属性。 所以,该字段会自动递增而不需要我们去设置。实例中 NOW() 是一个 MySQL 函数,该函数返回日期和时间。
查询数据
mysql> select * from runoob_tbl; +-----------+--------------+---------------+-----------------+ | runoob_id | runoob_title | runoob_author | submission_date | +-----------+--------------+---------------+-----------------+ | 1 | 学习PHP | 菜鸟教程 | 2022-04-25 | | 2 | 学习Mysql | 菜鸟教程 | 2022-04-25 | | 3 | JAVA教程 | RUNOOB.COM | 2022-04-25 | +-----------+--------------+---------------+-----------------+
where子句
语法
以下是 SQL SELECT 语句使用 WHERE 子句从数据表中读取数据的通用语法:
SELECT field1, field2,...fieldN FROM table_name1, table_name2...
[WHERE condition1 [AND [OR]] condition2.....
- 查询语句中你可以使用一个或者多个表,表之间使用逗号, 分割,并使用WHERE语句来设定查询条件。
- 你可以在 WHERE 子句中指定任何条件。
- 你可以使用 AND 或者 OR 指定一个或多个条件。
- WHERE 子句也可以运用于 SQL 的 DELETE 或者 UPDATE 命令。
- WHERE 子句类似于程序语言中的 if 条件,根据 MySQL 表中的字段值来读取指定的数据。
以下为操作符列表,可用于 WHERE 子句中。
下表中实例假定 A 为 10, B 为 20
| 操作符 | 描述 | 实例 |
|---|---|---|
| = | 等号,检测两个值是否相等,如果相等返回true | (A = B) 返回false。 |
| <>, != | 不等于,检测两个值是否相等,如果不相等返回true | (A != B) 返回 true。 |
| > | 大于号,检测左边的值是否大于右边的值, 如果左边的值大于右边的值返回true | (A > B) 返回false。 |
| < | 小于号,检测左边的值是否小于右边的值, 如果左边的值小于右边的值返回true | (A < B) 返回 true。 |
| >= | 大于等于号,检测左边的值是否大于或等于右边的值, 如果左边的值大于或等于右边的值返回true | (A >= B) 返回false。 |
| <= | 小于等于号,检测左边的值是否小于或等于右边的值, 如果左边的值小于或等于右边的值返回true | (A <= B) 返回 true。 |
如果我们想在 MySQL 数据表中读取指定的数据,WHERE 子句是非常有用的。
使用主键来作为 WHERE 子句的条件查询是非常快速的。
如果给定的条件在表中没有任何匹配的记录,那么查询不会返回任何数据。
mysql> select * from runoob_tbl where runoob_author='菜鸟教程'; +-----------+--------------+---------------+-----------------+ | runoob_id | runoob_title | runoob_author | submission_date | +-----------+--------------+---------------+-----------------+ | 1 | 学习PHP | 菜鸟教程 | 2022-04-25 | | 2 | 学习Mysql | 菜鸟教程 | 2022-04-25 | +-----------+--------------+---------------+-----------------+
BINARY关键字 实例中使用了 BINARY 关键字,是区分大小写的,所以 runoob_author='runoob.com' 的查询条件是没有数据的。 mysql> select * from runoob_tbl where binary runoob_author='runoob.com'; Empty set (0.01 sec) mysql> select * from runoob_tbl where binary runoob_author='RUNOOB.COM'; +-----------+--------------+---------------+-----------------+ | runoob_id | runoob_title | runoob_author | submission_date | +-----------+--------------+---------------+-----------------+ | 3 | JAVA教程 | RUNOOB.COM | 2022-04-25 | | 4 | 学习Python | RUNOOB.COM | 2022-04-25 | +-----------+--------------+---------------+-----------------+
更新数据
UPDATE table_name SET field1=new-value1, field2=new-value2
[WHERE Clause]
mysql> update runoob_tbl set runoob_title='学习JAVA',submission_date='2022-04-25' where runoob_id=3; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> select * from runoob_tbl where runoob_id=3; +-----------+--------------+---------------+-----------------+ | runoob_id | runoob_title | runoob_author | submission_date | +-----------+--------------+---------------+-----------------+ | 3 | 学习JAVA | RUNOOB.COM | 2022-04-25 | +-----------+--------------+---------------+-----------------+
删除数据
DELETE FROM table_name [WHERE Clause]
mysql> delete from runoob_tbl where runoob_id=3;
模糊查询
语法
以下是 SQL SELECT 语句使用 LIKE 子句从数据表中读取数据的通用语法:
SELECT field1, field2,...fieldN
FROM table_name
WHERE field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue'
- 你可以在 WHERE 子句中指定任何条件。
- 你可以在 WHERE 子句中使用LIKE子句。
- 你可以使用LIKE子句代替等号 =。
- LIKE 通常与 % 一同使用,类似于一个元字符的搜索。
- 你可以使用 AND 或者 OR 指定一个或多个条件。
- 你可以在 DELETE 或 UPDATE 命令中使用 WHERE...LIKE 子句来指定条件。
mysql> select * from runoob_tbl where runoob_author like '%COM'; +-----------+--------------+---------------+-----------------+ | runoob_id | runoob_title | runoob_author | submission_date | +-----------+--------------+---------------+-----------------+ | 3 | 学习JAVA | RUNOOB.COM | 2022-04-25 | | 4 | 学习Python | RUNOOB.COM | 2022-04-25 | +-----------+--------------+---------------+-----------------+
UNION
MySQL UNION 操作符
描述
MySQL UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。多个 SELECT 语句会删除重复的数据。
语法
MySQL 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: 可选,返回所有结果集,包含重复数据。
演示数据库内容 Websites +----+---------------+---------------------------+-------+---------+ | id | name | url | alexa | country | +----+---------------+---------------------------+-------+---------+ | 1 | 淘宝 | https://www.taobao.cm/ | 13 | CN | | 2 | Google | https://www.google.cm/ | 1 | USA | | 3 | 菜鸟教程 | https://www.runoob.cm/ | 4689 | CN | | 4 | 微博 | https://www.weibo.cm/ | 20 | CN | | 5 | Facebook | https://www.facebook.com/ | 3 | USA | | 7 | stackoverflow | http://stackoverflow.com/ | 0 | IND | +----+---------------+---------------------------+-------+---------+ apps +----+------------+-------------------------+---------+ | id | app_name | url | country | +----+------------+-------------------------+---------+ | 1 | QQ APP | https://im.qq.cm/ | CN | | 2 | 微博 APP | https://www.weibo.com/ | CN | | 3 | 淘宝 APP | https://www.taobao.com/ | CN | +----+------------+-------------------------+---------+
-
sql union
下面的 SQL 语句从 "Websites" 和 "apps" 表中选取所有不同的country(只有不同的值):
mysql> select country from Websites union select country from apps order by country; +---------+ | country | +---------+ | CN | | IND | | USA | +---------+
注释:UNION 不能用于列出两个表中所有的country。如果一些网站和APP来自同一个国家,每个国家只会列出一次。UNION 只会选取不同的值。请使用 UNION ALL 来选取重复的值!
-
sql union all
下面的 SQL 语句使用 UNION ALL 从 "Websites" 和 "apps" 表中选取所有的country(也有重复的值):
mysql> select country from Websites -> union all -> select country from apps -> order by country; +---------+ | country | +---------+ | CN | | CN | | CN | | CN | | CN | | CN | | IND | | USA | | USA | +---------+
-
带有wehere的sql union all
下面的 SQL 语句使用 UNION ALL 从 "Websites" 和 "apps" 表中选取所有的中国(CN)的数据(也有重复的值): mysql> select country,name from Websites where country='CN' union all select country,app_name from apps order by name; +---------+--------------+ | country | name | +---------+--------------+ | CN | QQ APP | | CN | 微博 | | CN | 微博 APP | | CN | 淘宝 | | CN | 淘宝 APP | | CN | 菜鸟教程 | +---------+--------------+
浙公网安备 33010602011771号