首页 > 技术文章 > mysql基础操作

night-rainy 2021-04-15 16:42 原文

第三章-使用mysql

3.1 登陆mysql

mysql -u [用户名] -h [主机名] -P [端口号] -p [密码] ;

ps: -h参数是你要登陆的mysql所在的主机名或ip地址,不写代表本机. -P参数代表端口号,不写默认为3306.

3.2 选择数据库

use [数据库名] ;

3.3 查询数据库,表,字段等的信息

  1. 查询数据库列表
show databases;
  1. 查询数据库建库信息
show create database [数据库名] ;
  1. 查询当前数据库中的表的列表信息
show tables;
  1. 查询表的建表信息
show create table [表名] ;
  1. 查询表中的字段信息
show columns from [表名] ;

第四章-检索数据

4.1 select关键字

mysql使用select关键字进行查询.

4.2 检索列

select [列字段名] , [列字段名] from [表名]

ps: 多个列字段名之间用逗号隔开,也可以使用 * 号代表查询所有的列.

4.3 检索结果去重

select distinct [列字段名],[列字段名] from [表名]

ps: 对多个字段去重时,只有多个字段的字完全相同,才会被识别为相同.

4.4 对数据的查询数目进行限制

  1. 方法一:
select * from [表名] limit [n1] offset [n2]

ps: n1 与 n2 参数都是数字,这句话代表从行号为n2的数据开始查询,查询n1条数据.mysql的行号是从0开始的.

  1. 方法二:
select * from [表名] limit n1,n2;

ps:n1与n2都是数字,代表从行号为n1的数据开始查询,查询n2条数据.n1参数可以省略,省略代表从行号为0的数据开始检索.

第五章-排序搜索结果

5.1 排序关键字order by

select * from [表名] order by [字段名]

5.2 对多个字段进行排序

select * from [表名] order by [字段名],[字段名]

ps:多个字段之间用逗号隔开,排序规则是先按照第一个字段排序,在此基础上在按照第二个字段进行二次排序

5.3 指定排序的方向

select * from [表名] order by [字段名] [desc | asc],[字段名] [desc | asc]

ps:asc是默认的升序,可以省略.desc则是降序排序,多个字段需要各自指明排序方式,互不干扰

第六章-数据过滤

6.1 数据过滤关键字 where

select * from [表名] where [字段名] [逻辑运算符] [自定义参数]

ps:逻辑运算符就是 > ,<,=等,如果是判断是否为null,则不能使用等号与不等号进行判断,应该使用 is [not] null,not是可选参数

6.2 范围查询

select * from [表名] where [字段名] between [自定义参数1] and [自定义参数2]

ps:该语句会搜索指定字段数据>=自定义参数1和<=自定义参数2的数据

6.3 组合查询条件

select * from [表名] where [字段名] [逻辑操作符] [自定义参数] [and | or] [字段名] [逻辑操作符] [自定义参数] 

ps: 当检索条件不唯一时可以使用and 或者 or关键字进行拼接查询的条件,and是两边的条件都满足是才能匹配成功,or是只要一边条件满足就会匹配成功.其中可以拼接任意多的查询条件,但计算顺序总是and优先,当查询条件超过2个时,最好使用()来讲条件进行分组

6.4 in关键字

select * from [表名] where [字段名] in (自定义参数1,自定义参数2.....)

ps:in关键字与or类似,比如name = "张三" or name = "李四"这个查询条件就等同于 name in ("张三","李四"),在两者都可以使用的情况下,应优先使用in关键字,它的查询效率一般比or快

6.5 not 关键字

ps:not关键字代表否定的意思,在其他的数据库管理系统中用处很多,但在mysql中只能用在 in,between,exists关键字前面来表示否定的意思,如not in 表示不包括in后面跟的参数列表,not between代表不再两个参数之间,not exists表示不存在.

第八章-用通配符进行匹配

8.1 like关键字

like关键字代表模糊搜索,它的查询效率比较低,除非有必要,否则应当放在查询条件的最后面.like关键字应该与通配符搭配进行使用

8.2 %通配符

select * from person where name like "张%"

ps:这句话代表查询name字段的值是以张开头的数据,%通配符可以匹配0到任意多的字符

8.3 _通配符

与%一样,区别是_只能匹配一个字符

第十章-自定义查询返回格式

10.1 对字符串的格式化返回值

当我们需要将多个字段的值拼接到一起当成一个属性来返回时,我们可以通过concat()函数进行操作

select concat([字段名或者一个字符串等],[字段名或者一个字符串等]) from [表名]

10.2 对数值的格式化返回值

当我们需要表中多个数值字段进行算术运算之后的值作为返回值时,我们可以直接在查询语句中进行字段与字段之间的算术运算.

select [字段名或者数值] [算术运算符] [字段名或者数值] from [表名]

10.3 as关键字

as关键字是用来给字段起别名使用的

select [字段名] as [自定义别名] from [表名]

第十一章-使用函数

11.1 常用的函数使用方法

select [函数]

直接在需要查询的字段位置使用函数,如第十章中的拼接字符串,使用的就是concat()函数.

select [字段名] from [表名] where [字段名] [逻辑运算符等] [函数]

11.2 文本处理函数

  • Concat() 拼接字符串
  • length() 返回字符串的长度
  • [L|R]trim() 如果前面加上l就是去除字符串左面的空格,如果加上r就是去除右面的空格,trim()是去除两端空格
  • upper() 将字符串全部转换成大写
  • lower() 将字符串全部转换成小写

11.3 日期处理函数

  • Now() 返回当前的日期时间
  • date() 返回日期时间中的日期部分
  • time() 返回日期时间中的时间部分
  • year() 返回年

ps:同year()函数,还有month(),day(),hour(),minute(),second().

11.4 日期的比较

ps:mysql中日期的默认格式是 yyyy-mm-dd hh:mm:ss,可以使用这种格式的字符串进行大于等于小于比较,也可以使用日期函数获取时间的某部分然后与数值进行比较

第十二章-数据汇总

12.1 聚集函数

聚集函数 说明
avg() 求平均值
min() 求最小值
max() 求最大值
count() 求数据的条数
sum() 求和

12.2 使用方法

select avg([distinct] [字段名]) from [表名]

求查询出的所有数据中[字段名]的数据的平均值,函数的参数字段前面可以加上distinct进行去重,也可以不加,其他的聚合函数用法相同,但是count()函数的参数可以是*,如果是*号,那么就包含null行,否则不包含null行。

第十三章-分组查询

13.1 数据分组关键字 group by

group by关键字是用来对数据进行分组的,常常与聚集函数一起使用,具体用法为:

select avg([字段名1]) from [表名] group by [字段名2]

这句sql的意思就是,将表中的数据按照[字段名2]进行分组,每组之间互不干扰,然后对每个分组中的数据求[字段名1]的平均值。

ps:分组看起来和distinct去重关键字很像,切不可搞混

select [字段1],group_count([字段2]) from [表名] group by [字段1]

这句sql的意思是通过字段1分组后,将字段2的数据拼接在一起并用逗号隔开。

13.2 having关键字

having关键字是为了进行分组过滤的,where关键字只能用于过滤数据行,having关键字则是为了过滤分组的.

select [字段名] from [表名] group by [字段名] having [过滤条件]

第十四章-子查询

14.1 作为查询条件的值

select [表名1.字段1] from [表名1] where [表名1.字段名2]  in (select [表名2.字段名1] from [表名2] where [表名2.字段名2] [逻辑运算符] [自定义值]);

ps:在上述的格式中,后面查询的结果会作为值传到第一个查询的in()之中当做参数,子查询可以无限嵌套下去,但非常影响性能。

14.2 作为查询的字段

select (select count(*) from [表名2] where [表名2.字段1] = [表名1.字段1]) from [表名1];

ps:在主查询中查询的每一条数据都会当做子查询的查询值进行子查询中的过滤查询.

第十五章-联结表

15.1 内联接

select * from [表1] inner join [表2] on [表1.字段1] = [表2.字段1]

查询出表1与表2各自字段相等的交集。

15.2 外连接

select * from [表1] left join [表2] on [表1.字段1] = [表2.字段1]

先把表1的数据全部拿出来,然后把表2中与表1字段相等的数据联结起来。

select * from [表1] right join [表2] on [表1.字段1] = [表2.字段1]

先把表2的数据全部拿出来,然后把表1中与表2字段相等的数据联结起来。

第十七章-组合查询

17.1 介绍

组合查询是用来将多个查询的结果合并到一个返回中,如不同的数据库中有同一张表或者需要查询的字段的数据类型兼容,就可以使用组合查询将两张表的返回结果合并成一个,使用的关键字是union。

17.2 union关键字用法

select * from [表1]
union
select * from [表2];
union
select ..........

这样就会将多个查询的结果合并成一个,但需要注意的是,多张表中相对应的字段数据类型必须兼容,如char与varchar。

ps:组合查询会自动去重,即如果查询到两次查询中有相同的行,只显示一行,如果想要全部显示需要使用 union all 关键字进行组合。另外如果要使用order by关键字进行排序必须写在最后的查询中。

第十九章-数据插入

19.1 用法

  • 插入一条数据
insert into [表名](表中的字段列表) values(插入数据的值的列表)

ps:表中字段的列表顺序需要与插入数据的值的列表一直。另外,表中的字段列表可以省略,那么插入数据的值的列表就必须要按照表中字段的顺序来填写。

  • 插入多条数据
insert into [表名](表中的字段列表) values(插入数据的值的列表),(插入数据的值的列表),(插入数据的值的列表)........

多条数据值列表只需要用逗号隔开就好。

  • 插入查询的数据
insert into [表1] select * from [表2];

将从表2中查询的数据插入到表1中。

第二十章-更新与删除数据

20.1更新数据

update [表名] set [字段1] = [自定义值],[字段2] = [自定义值].... where [过滤条件];

ps:一定要记得加上过滤条件,否则会将此更新作用到表中的全部数据上。

20.2删除数据

delete from [表名] where [查询条件] 

ps:一定要记得加上过滤条件,否则会删除整张表的数据。如果想从表中删除所有行,不要使用DELETE。可使用TRUNCATE TABLE语句。

第二十一章-表与视图

21.1创建表

create table [表名](
[字段名] [数据类型] [not null] [default value] [auto_increment] [primary key],
  .....
)engine = innodb;

ps: 除了字段名与数据类型之外,其他的都是可选项。engine是表的模式

21.2 更新表

  • 添加字段
alter table [表名] add [字段名] [数据类型] [其他可选项];
  • 删除字段
alter table [表名] drop column [字段名];
  • 添加外键
alter table [表名1] add constraint [自定义外键名] foreign key([表名1.字段名1]) references [表名2] ([表名2.字段名1])

ps:将表1的字段设置成外键,它引用了表2的字段1。

21.3 删除表

drop table [表名];

21.4 重命名表

rename table [原表名] to [新表名];

21.5 创建视图

create view [视图名] as [查询语句];

第二十六章-事务管理

26.1 事务使用

start transaction;
执行操作....
[commit | rollback];

26.2 带保留点的事务

start transaction;
savepoint point1;
操作1;
savepoint point2;
操作2;
.......
rollback to [保留点名];

ps:会将操作回退到指定的保留点上.

第二十八章-权限管理

28.1创建用户

create user [用户名] identified by "[自定义的密码]";

28.2 删除用户

drop user [用户名];

28.3 设置用户权限

  • 查看用户权限
show grants for [用户名];
  • 添加用户权限
grant [权限1],[权限2]... on [数据库名].[表名] to [用户名];
  • 删除用户权限
revoke [权限1],[权限2]... on [数据库名].[表名] from [用户名];
  • 权限表

权限表1

权限表2

28.4 更改用户密码

set password for [用户名] = password("自定义密码");

更改指定用户密码

set password = password("自定义密码");

更改自己的密码

推荐阅读