MySQL数据库基础

一、数据库

1.创建数据库

create database 数据库名;

2.删除数据库

drop database 数据库名;

3.选择数据库

use 数据库名;

二、数据表

1.数据类型

1)数值型

类型 用途
tinyint 小整数值
smallint 大整数值
mediumint 大整数值
int或integer 大整数值
bigint 极大整数值
float 单精度浮点型
double 双精度浮点型
decimal 小数值

2)日期和时间类型

类型 用途
date 日期值
time 时间值或持续时间
year 年份值
datetime 混合日期和时间值
timestamp 混合日期和时间值,时间戳

3)字符串类型

类型 用途
char 定长字符串
varchar 变长字符串
tinyblob 不超过255个字符的二进制字符串
tinytext 短文本字符串
blob 二进制形式的长文本数据
text 长文本数据
mediumblob 二进制形式的中等长度文本数据
mediumtext 中等长度文本数据
longblob 二进制形式的极大文本数据
longtext 极大文本数据

2.创建数据表

create table 数据表名 (列名 列类型 auto_increment primary_key,列名 列类型);

3.删除数据表

drop table 数据表名;

4.数据表操作

1)插入数据

insert into 数据表名 (列1名,列2名,列3名)
values (列1数据,列2数据,列3数据,),(列1数据,列2数据,列3数据),(列1数据,列2数据,列3数据);

2)删除数据

delete from 数据表名 [where 条件]

3)更新数据

update 数据表名 set 列1=新数据,列2=新数据
[where 条件]

4)查询数据

select 查询列1,查询列2
from 表名
[where 查询条件]
[limit 查询条数]
[offset 数据偏移量]
[order 排序方式]

5.单表查询

1)where子句

在where中写入查询的条件,可以使用and或者or来连接多个查询条件。

操作符 描述
= 两边值相等
<>,!= 两边值不相等
> 左边值大于右边值
< 左边值小于右边值
>= 左边值大于等于右边值
<= 左边值小于等于右边值

操作实例:查询用户表中名称为“张三”的用户

select * from user where username='张三'

2)like子句

在like子句中使用%来表示任意字符,如果没有%,like子句与符号=的效果是一样的。

操作实例:查询用户表中姓“”的用户数据

select * from user where username='张%'

3)union 操作符

union操作符用于连接两个select语句的结果,将结果放到一个结果集合中。多个select语句会删除重复的数据。

数据表Websites

id name url alexa country
1 Google https://www.gogole.cm/ 1 USA
2 淘宝 https://www.taobao.com/ 13 CN
3 菜鸟教程 http://www.runoob.com/ 4689 CN
4 微博 http://weibo.com 20 CN
5 Facebook https://www.facebook.com/ 3 USA
7 * http://*.com/ 0 IND

数据表apps

id app_name url country
1 QQ_APP http://im.qq.com/ CN
2 微博APP http://weibo.com/ CN
3 淘宝APP https://www.taobao.com/ CN

union实例:去除重复查询结果

select country from Websites
union
select country from apps
order by country;

查询结果

country
CN
IND
USA

union all 实例:保留重复查询结果

select country from Websites
union all
select country from apps
order by country;

带有where的union all 实例:选出两张表中为“CN”的数据

select country,name from Websites
where country='CN'
union all
select country,app_name from apps
where country='CN'
order by country;

查询结果

country name
CN 淘宝
CN QQ APP
CN 菜鸟教程
CN 微博 APP
CN 微博
CN 淘宝 APP

4)order by排序

排序方式有两种ascdesc默认排序方式asc

select 列1,列2,列3 from 表1,表2
order by 列1[asc [desc]],[列2,[asc [desc]]]

5)group by分组

select column_name,function(column_name)
from table_name
where coulmn_name operator value
group by column_name;

function:可选count计数、sum求和、avg平均值

数据表employee_tbl

id name date singin
1 小明 2021-04-22 1
2 小王 2021-04-20 3
3 小丽 2021-04-19 2
4 小王 2021-04-07 4
5 小明 2021-04-11 4
6 小明 2021-04-04 2

执行查询

select name,count(*) from emplpyee_tbl
group by name;

查询结果

name count(*)
小丽 1
小明 3
小王 2

执行查询

select name,count(singin) as singin_count
from employee_tbl
group by name with rollup;

查询结果

name singin_count
小丽 2
小明 7
小王 7
NULL 16

6.多表查询

1)join连接的使用

  • inner join(内连接,或等值连接):获取里那个表中字段匹配关系的记录。
  • left join(左连接):获取左表所有记录,即使右表没有相对应匹配的记录。
  • right join(右连接):与left join相反,用于获取右表所有记录,即使左表没有对应匹配的记录

数据表tcount_tb1

runoob_author runoob_count
菜鸟教程 10
RUNOOB.COM 20
Google 22

数据表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-04

执行操作

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

以上SQL等价于

select a.runoob_id,a.runoob_author,b.runoob_count
from runoob_tbl a,tcount_tbl b
where a.runoob_author = b.runoob_author;

7.NULL值处理

当比较当前字段是否为NULL时,=!=操作符是无效的,所以我们采用以下方式比较字段是否为NULL。

  • is null:当前列的值是否是NULL,运算符返回true
  • is not null:当列的值不为NULL,运算符返回true
  • <=>:比较操作符(不同于=运算符),当比较的两个值相等或者都为NULL时返回true。

8.正则表达式

MySQL中使用regexp操作符来进行正则表达式匹配

模式 描述
^ 匹配输入字符串的开始位置。
如果设置了RegExp对象的Multline属性,^也匹配’\n’或‘\r’之后的位置。
$ 匹配输入字符串的结束位置。
如果设置了RegExp对象的Multline属性,$也匹配’\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次。

实例操作

匹配st开头的所有数据

select name from person_tbl where name regexp '^st'

匹配ok结尾的所有数据

select name from person_tbl where name regexp 'ok$'

查找name字段中以元音字符开头或以’ok’字符串结尾的所有数据:

SELECT name FROM person_tbl WHERE name REGEXP '^[aeiou]|ok$';
上一篇:VS Code 批量处理文本内容


下一篇:《跟热饭一起学习vue吧》Part.21 组件 component