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 | create table if not exists 库名( |
注意:每一组之间用逗号( , ) 隔开,最后一组字段不用加
删除数据表: drop table 表名;
查看表结构: desc 表名;
查看建表语句: show create table 表名
注意:所有的库名,表名,字段名都需要加上反引号( ` ),所有的字符串需要加上单双引号
反引号可以将库名,表名,字段名实体化,取消特殊意义
2.数据库数据操作
1.插入数据(增)
插入单条数据:
格式:
insert into 表名 values(值1,值2,值3,...);注意点:
主键由于配合自增属性,所以不用主动设置,默认用
null代替,值会自动根据最大记录+1; 如果有默认值,可以用
default代替插入单条数据部分字段:
格式:
insert into 表名(字段1,字段2,字段3,....) vaules(值1,值2,值3,...);注意:
表名后面填了多少个字段,values就对应填多少个值;
如果字段具有not null属性,那么必须填写‘’
使用场合:用户注册,不需要填写所有数据表单
插入多条数据:
格式:
insert into 表名 values(...),(...),(...), ... (...);插入多条数据部分字段
格式:
insert into 表名(字段1,字段2,...)values(...),(...),(...), ... (...);
2.更新数据(改)
3.删除数据(删)
全部删除
格式:
delete from 表名;注意:该删除方式只会删除数据,不会删除曾经的数据记录
全部删除(不留记录)
格式:
truncate table 表名;注意:该删除方式会连着数据和记录一起删除,如果想清空表,推荐使用truncate
部分删除
格式:
delete from 表名 where 条件表达式;排序删除
格式:
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 | select * | distinct | 字段名 | 字段名 as 别名 | 表名.字段名 |
注意:以上为查询数据的基本结构,先后书序无法颠倒,但可以省略其中一部分
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 | select 字段 |
3.实例:
查询每个人的昵称,住址,部门,薪资
1 | select uid,nickname,address,dep,money |
6.嵌套查询
将一条sql语句的结果作为另一条sql的条件来使用
实例
查询每个部门最高工资的uid
1 | select uid,money,dep |
7.多表+嵌套
查询每个部门最高工资的uid
1 | select uid,s.money,s.dep |
8.别名
给字段,表名取个别名 as
select dep,max(monry) as money from salary as s group bu dep;
9.取消重复
select distinct address from user;