MySQL 基础操作-增删改查

1.数据库

1.数据库基本操作

常见数据库包括:MySQL,Oracle,SQL server,Redis …

1.定义

​ 存储数据的仓库,即按照数据结构来组织,存储和管理数据的仓库

选择 MySQL 的原因有:免费,开源,跨平台,支持事务…

2.链接数据库的步骤

​ 开启服务器——>设置主机IP——>用户名(默认root)——>密码(默认为空)

3.组成

​ 一个完整的数据库由库(database),表(table)和数据(data)组成,先有库,再有表,最后才有数据的增删改查,也就是说先使用库,才能使用表

4.基本语法

​ MySQL 的每一条数据都是以分号( ; ) 作为结束符

5.常用SQL命令

​ 打开命令窗口: F6

​ 使用数据库: use 库名;

​ 创建数据库: create database [if not exists] 库名 default charset 编码方式;

​ 删除数据库: drop database 库名;

​ 查询数据库结构: show databases; 注意:database需要加s,作为复数格式

​ 查询数据表: show tables; 注意:在使用库之前,无法使用表

​ 创建数据表:

1
2
3
4
5
6
7
8
9
10
create table if not exists 库名(

字段名 字段类型 字段属性,
字段名 字段类型 字段属性,
字段名 字段类型 字段属性,
...
字段名 字段类型 字段属性,
字段名 字段类型 字段属性

)engine=myisam|innodb default charset=utf8;

注意:每一组之间用逗号( , ) 隔开,最后一组字段不用加

​ 删除数据表: drop table 表名;

​ 查看表结构: desc 表名;

​ 查看建表语句: show create table 表名

​ 注意:所有的库名,表名,字段名都需要加上反引号( ` ),所有的字符串需要加上单双引号

​ 反引号可以将库名,表名,字段名实体化,取消特殊意义

2.数据库数据操作

1.插入数据(增)

  1. 插入单条数据:

    格式:

    insert into 表名 values(值1,值2,值3,...);

    注意点:

    ​ 主键由于配合自增属性,所以不用主动设置,默认用null代替,值会自动根据最大记录+1;

    ​ 如果有默认值,可以用default代替

  2. 插入单条数据部分字段:

    格式:

    insert into 表名(字段1,字段2,字段3,....) vaules(值1,值2,值3,...);

    注意:

    ​ 表名后面填了多少个字段,values就对应填多少个值;

    ​ 如果字段具有not null属性,那么必须填写‘’

    使用场合:用户注册,不需要填写所有数据表单

  3. 插入多条数据:

    格式:

    insert into 表名 values(...),(...),(...), ... (...);

  4. 插入多条数据部分字段

    格式:

    insert into 表名(字段1,字段2,...)values(...),(...),(...), ... (...);

2.更新数据(改)

  1. 更新所有数据

    格式:

    update 表名 set 字段1=值1,字段2=值2,...;

  2. 条件更新

    格式:

    update 表名 set 字段1=值1,字段2=值2,... where 条件表达式

3.删除数据(删)

  1. 全部删除

    格式:

    delete from 表名;

    注意:该删除方式只会删除数据,不会删除曾经的数据记录

  2. 全部删除(不留记录)

    格式:

    truncate table 表名;

    注意:该删除方式会连着数据和记录一起删除,如果想清空表,推荐使用truncate

  3. 部分删除

    格式:

    delete from 表名 where 条件表达式;

  4. 排序删除

    格式:

    delete from 表名 [where 条件表达式] order by 字段 asc|desc limit 行数

    注意: asc为升序排序,desc为降序排序

3.函数

1.聚合函数

  • 统计总个数:count( )

    select count(id) from user; 统计user表中一共有几个id

  • 求和:sum( )

    select sum(age) from user; 统计user表中age的综合

  • 求平均值:avg( )

    select avg(age) from user; 统计user表中的平均年龄

  • 求最大值:max( )

    select max(age) from user; 获取user表中的最大年龄

  • 求最小值:min( )

    select min(age) from user; 获取user表中的最小年龄

2.字符串拼接函数

​ 格式:concat(s1,s2,s3,...)

​ 注意:s1,s2,s3可以代表字段名,也可以代表字符串值

select concat(id,'......',nickname,'......',address) from user;

3.数据库版本

select version();

4.当前时间

select now();

5.md5加密

md5('1234234');

6.当前时间戳

select unix_timestamp();

4.查询数据

1.整体结构

1
2
3
4
5
6
7
select  * | distinct | 字段名 | 字段名 as 别名 | 表名.字段名
from 表名 | 表名1,表名2,...
where 条件表达式
group by 字段
having 条件
order by 条件
limit 下标,行数

注意:以上为查询数据的基本结构,先后书序无法颠倒,但可以省略其中一部分

2.具体查询

  • 查询1:查询该表中的所有数据

    格式: select * from 表名;

    实例: select * from user;

    注意* 通配符代表所有的字段,查询所有的字段,推荐少用或不用

  • 查询2:查询该表中的指定字段

    格式: select 字段1,字段2,字段3,... from 表名;

    实例:select tel pwd from user;

  • 查询3:带条件查询

    格式:select *|字段名 from 表名 where 条件;

    • < 查询所有未成年的名字

      select name from user where age<18;

    • >= 查询所有成年的名字

      select name from user where age>=18;

    • = 精确查询刚好18岁的名单

      select name from user where age=18;

    • != 查询所有不是18岁的名单

      select name from user where age!=18;

    • between A and B 查询年龄在15到30之间的名单

      select name from user where age between 15 and 30;

    • not between A and B 查询年龄不在20~30岁之间的名单

      select name from user where age not between 20 and 30;

    • like 模糊查询 名字带有’小‘的名单

      select name like "小";

      select name like "%小%";

      注意% 通配符可匹配0个,1个或多个字符;

      _ 通配符可以匹配一个字符

    • in 查询来自于召唤师峡谷的名单

      select name,address from user where address in ('召唤师峡谷');

    • not in 查询地址信息不为空的名单

      select name,address from user where address not in ('null');


    • 逻辑:与 and | 或 or

      • 查询 来自于召唤师峡谷的女孩子

        select name,address,sex from user where address='召唤师峡谷' and sex=2;

      • 查询女孩子或者来自于xxx楼的名单

        select name,address,sex from user where address like "%楼" or sex=2;

    • 空与非空: is null is not null

      • 查询有住址的名单

        select name from user where address is not null;

      • 查询住址信息为空的名单

        select name from user where address id null;

    • group by 分组 :

      查询user中名单分别来自哪些地方

      select address from user group by address;

      注意:一旦分组,就不能查询单一数据,必须按照“组”为单位来查询

    • having 筛选:

      筛选人数多于一个的地址

      select address,count(id) from user group by address having count(id)>1;

      注意having一般都是配合group by来使用,先分组再筛选

    • order by 排序

      按照生日从大到小查看名单

      select nickname,birthday from user order by birthday desc;

      注意desc为降序排序,asc为升序排序

    • limit 前几个

      查询user表单中的前3个人信息

      select * from user limit 3;

      注意:标准格式为:limit 下标,行数,代表从下标开始的几行数据

5.多表查询

多张表同时查询

1.条件限制:

​ 多张表之间必须要求有联系

​ 多表有相同字段时,必须声明是哪张表中的字段(表名.字段名)

​ n张表之间的联系至少有 n-1 条

2.格式:

1
2
3
4
select 字段
from 表名1,表名2,表名3,...
where 表名1.字段1 = 表名2.字段1 ...
...

3.实例:

​ 查询每个人的昵称,住址,部门,薪资

1
2
3
select uid,nickname,address,dep,money
from user,salary
where user.id=salary.uid

6.嵌套查询

将一条sql语句的结果作为另一条sql的条件来使用

实例

​ 查询每个部门最高工资的uid

1
2
3
4
select uid,money,dep
from salary
where money in ( select max(money) from salary group by dep )

7.多表+嵌套

​ 查询每个部门最高工资的uid

1
2
3
4
5
6
7
select uid,s.money,s.dep
from salary as s,(
select dep,max(money) as money
from salary
group by dep ) as t
where s.dep=t.dep and s.money=t.money

8.别名

​ 给字段,表名取个别名 as

select dep,max(monry) as money from salary as s group bu dep;

9.取消重复

select distinct address from user;