一,数据库的增删改查

1,插入记录

语法一:insert 表 values(值1,值2,值n);

insert user values(666,'张三‘,'女');  向user 表中插入值id为666,姓名为张三,性别女

语法二:insert into 表(字段1,字段2,字段n) values(值1,值2,值n);

insert into user(id,username,age) values(666,'学',25);

向user 表中插入id 为666,username 为学,age 为25

说明:

基本语法1和基本语法2的区别是:

基本语法1的插入语句,表中有多少个字段就必须要插入多少个值。一个不能多,一个也不能少。若有默认值,不想传,可以写上null。

基本语法2中,除非有必填字段必须要写入值外。如果有默认值的不想写可以忽略不写。mysql会自动补主默认值。

基本语法变形:一次插入多条记录

insert into user(username,password,sex)

values('黄晓明', 'abcdef', 1),

( 'angelababy', 'bcdeef', 0),

( '陈赫', '123456', 1),

('王宝强', '987654', 1);

2,基础查询

一,创建表的语句

create table if not exists money(

uid int(11) not null,

username varchar(30) not null,

password  char(32) not null,

age tinyint unsigned not null,

sex tinyint not null,

)engint =  InnoDB DEFAULT CHARSET=utf8;

二,查询表

select * from 表;

select * from money;   查询money表中所有字段中的所有结果

注:”*” 是一种正则表达式的写法,表示匹配所有,上面的查询语句和下面的是等价

3,指定字段查询

select 字段 from 表;

select  id,username,balance from money;  查询money 表中id,username,balance字段中的所有结果

4,查询单个字段不重复记录 distinct

select  distinct 字段 from 表;

select  distinct age  deptno from money;  查询money 表中age 唯一的所有结果

deptno  部门编号

5,条件查寻  where

select * from 表 where 条件;

select * from money  where  age = 25;  查询money表 中年龄为25的所有结果;

6,where 后接的条件

上面的例子中,where 后面的田间是一个字段的 ‘=’。

除此之外,还可以使用>、<、>=、<=、!=等比较运算符;

符号         说明

>       大于

<       小于

>=     大于等于

<=     小于等于

!=     不等于

=       等于

7,逻辑运算符

or      或者

and  并且

select * from money where id<10 and province="湖北";  查询money 里面id<10,并且province="湖北

8 ,结果集排序

select 字段 from 表 order by 字段  排序关键词;

select  id,username,balance  from money order by balance desc;

查询money表中的id,username,balance字段,按照余额进行降序排序

asc   升序排列,从小到大(默认)

desc 降序排列,从大到小

如果不写关键字默认升序排列

9,结果集限制

对于查询或者排序后的结果集,如果希望只显示一部分而不是全部,使用 limit 关键字结果机数量限制

select 字段  from 表 limit  数量;

select  id,username,balance  from money  limit 5;  显示money表里 id,username,balance字段的前五个用户

select * ffrom  money limit 5; 显示money表中的前五个用户

10,限制结果集并排序

select  字段 from  表 order by 字段 关键词 limit 数量;

select  id,username,balance from money order by balance  desc limit 5;

按照钱来排序,显示前五个最有钱的用户

11,统计类函数的使用

如果我们想知道总用户数怎么办?

查询谁是数据表里的首富怎么办?

如果我们想知道用户的平均金额怎么办?

如果我们想知道所有用户的总金额怎么办?

统计类函数最常用的我们有四个:

函数 说明
sum 求和
count 统计总数
max 最大值
min 最小值
avg 平均值
as 给字段取别名

select  函数(字段) form 表

select  count(id) from money;     查询money表中的id总数

select avg(balance) from money;      查询money表中平均金额

select count(balance) from money;   查询money表中总金额

select max(balance) from money;      查询money表中最大金额

select min(balance) from money;       查询money表中最小金额

select  count(id)  as  zongshu   from money;  把id 总数改名为zongshu

12,分组  group by

select  * from 表 group by 字段;

select  * from money  group by  province;    把money表中按地区进行分组,

select deptno,count(1) from  emp grop by deptno;  统计emp 表中的deptno的字段1的总数

统计省份数量后在进行分组显示

select count(province),province from money grop by province;   统计money表中的省份数量后再显示省份数量(显示每个省份的 数量)

在分组基础上进行统计

with rollup   用的比较少,了解就行

select * from 表 group by 字段 with rollup;

select count(province),province  from money group by province with rollup;

对分组的数再次进行总的统计(每个省份的数量最后还有个总合)

结果再过滤  having

having子句与where有相似之处但也有区别,都是设定条件的语句。

having 是筛选组 而where是筛选记录。

select * from 表 group by 字段 having 条件

select count(province) as result ,province  from money group by province having result >2;

对地区分组并统计总数,将分组结果中大于2的分组地区显示出来

整体使用sql

将语句进行整合,整体的sql 语句配合使用的语法结构

from 表名

[WHERE where条件]

[GROUP BY 字段]

[HAVING where_contition]

[order 条件]

[limit 条件]

注:上面的语句中可以[] 代表可选。最终的语法总结如下:

关键词     说明

select        选择的列

from          表

where        查询的条件

group by    分组属性  having 分组过滤的条件

order by     排序属性

limit            起始记录位置,取记录的条数

查询money表字段:id,username,balance,province 要求id>1 余额大于50,使用地区进行分组。我们使用用户id进行降序,要求只准显示3条;

select id,username,balance,province from money where id > 1 and balance > 50 group by province order by id desc limit 3;

二,mysql 多表联合查询

user表创建语句

show databases;       显示所有库

create database user; 创建user 库

use user;                      进入user库

1,CREATE TABLE IF NOT EXISTS user (

uid int(11) NOT NULL,

username varchar(30) NOT NULL,

password char(32) NOT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8;  创建user表,字段分为uid,username ,password,.

user表数据:   创建表中的内容

INSERT INTO user(uid,username,password) values('1','jintian','123456');

INSERT INTO user(uid,username,password) values('2','zhangsha','1234f56');

INSERT INTO user(uid,username,password) values('3','wangwu','1234fs56');

INSERT INTO user(uid,username,password) values('4','lisi','123s456');

INSERT INTO user(uid,username,password) values('5','xiaotian','123d456');

INSERT INTO user(uid,username,password) values('6','wangfei','123f456');

INSERT INTO user(uid,username,password) values('7','oldboy','123w456');

INSERT INTO user(uid,username,password) values('8','oldboyww','123w45ee6');

2,创建order_goods表,字段有oid,uid,name,buytiame,.

CREATE TABLE IF NOT EXISTS order_goods (

oid int(11) NOT NULL,

uid int(11) NOT NULL,

name varchar(50) NOT NULL,

buytime int(11) NOT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

order_goods数据如下:   表中的数据

INSERT INTO order_goods(oid,uid,name,buytime) values('1','7','opper','12345622');

INSERT INTO order_goods(oid,uid,name,buytime) values('2','2','iphone','1234356');

INSERT INTO order_goods(oid,uid,name,buytime) values('3','4','xieli','12342s56');

INSERT INTO order_goods(oid,uid,name,buytime) values('4','3','lisi','12322456');

INSERT INTO order_goods(oid,uid,name,buytime) values('5','5','juzi','12344456');

INSERT INTO order_goods(oid,uid,name,buytime) values('6','6','tianmiju','12322456');

INSERT INTO order_goods(oid,uid,name,buytime) values('7','1','xiangjiao','12311456');

注意:在上表order_goods表中uid是指user表中的uid字段。上表中oid为1的数据行,uid为7的用户。为user表中uid为7的用户:oldboy。该用户购买了商品为xiangjiao。购买时间buytime为一个unix时间戳。

mysql> select u.uid ,u.username as username,o.oid,o.uid,o.name as shopname from user u,order_goods o  where u.uid = o.uid;

外连接

select  表 1.字段 [as 别名], 表n.字段  from 表 1 left join 表n on  条件;

select  * from user  left jion order_goods  on user.uid = order_goods.uid;

以左边为主,查询哪些用户未购买过商品,并将用户信息显示出来

连接又分为左连接和右链接,具体定义如下。

左连接:包含所有的左边表中的记录甚至是右边表中没有和它匹配的记录

select *  from user left join order_goods  on  user.uid = order_goods.uid;

右连接:包含所有的右边表中的记录甚至是右边表中没有和它匹配的记录

select 表1.字段 [as 别名],表n.字段  from 表1 right join 表n on  条件;

select *  from user right join order_goods  on  user.uid = order_goods.uid;

查询商品表中哪些用户购买过商品,并将用户信息显示出来

子查询

有时候,当我们查询的时候,需要的条件是另外一个select语句的结果,这时就需要使用子查询。用于子查询的关键字包括in、not in、=、!=、exists、not exists等。

select  字段 from 表 where  字段  in(条件);

select * from user where uid in(1,3,4); 按照uid查询指定用户

select * from user where uid in(select uid from order_goods);  将购买过商品的用户信息显示出来

记录联合

使用 union 和 union all  关键字,将两个表的数据按照一定的查询条件查询出来以后,将结果合并到一起,union 是将 union all 后的结果进行一次distinct,去除重复记录后的结果。

select语句1 union[all] select语句2

select * from user where uid in(1,3,4); 按照uid查询指定用户

select uid from user union select uid from order_goods;

将商品表中的用户信息和用户表中的用户信息的结果组合在一起

三,增删改查之 更新记录

更新记录

更新数据我们已经说过。需要修改内容,修改银行卡余额,修改装备信息的时候都需要使用到update,修改语句

money表数据结构:     创建money表结构

CREATE TABLE IF NOT EXISTS money (

uid int(11) NOT NULL,

username varchar(30) NOT NULL,

balance DECIMAL(9,2) NOT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

money表数据:   增加money表数据

INSERT INTO money(uid,username,balance) values('1','zhangsai','15000.22');

INSERT INTO money(uid,username,balance) values('2','zhangsa','16000.22');

INSERT INTO money(uid,username,balance) values('3','lisi','17000.22');

INSERT INTO money(uid,username,balance) values('4','wangwu','18000.22');

更新语句的基本语法

update 表名 set 字段 1=值1,字段2=值2,字段n=值n  where 条件

update money set  balance=balance-500 where  uid=1;   修改money表,将balance余额减500。要求uid为1

select * from money where username='lisi';  查询money表中 username为lisi 的信息;

同时对两个表进行更新

update 表1,表2 set 字段1=值1,字段2=值2,字段n=值n where 条件

update money m,user u m.balance=m.balance*u.age where m.userid=u.id;修改money,将money表的别名设置为m;user表的别名设置为u;将m表的余额改为m表的balance*用户表的age。执行条件是:m.userid = u.id

使用 delete 删除记录

delete from 表 [where 条件];

delete from  user where  id>10;   删掉用户表中id大于10的所有用户

delete from  user where  uid=’1‘;删掉用户表中id等于1的所有用户

清空表记录

delete和truncate是一样的,但它们有一点不同,那就是deiete可以返回被删除的记录数,而truncate table返回的是0

如果一个表中有自增字段,使用truncate table 这个自增字段将起始值恢复成1,

truncate  table 表名;

truncate table user; 清空user表的数据,并且让自增的id从 1 开始自增

【切记】

删除时一定要记住加上where条件,不然会清空掉整个表的记录。

删除重要数据前一定要备份、备份、备份。

四,MySQL 权限操作

添加权限

grant 权限 on  库.表. to  '用户’@‘主机' identified by '密码';

grant  select,insert on test.* to'liwenkai'@'localhost' identified by '4331';

给予liwenkai用户,在本机连接test库所有表的权限。操作的这些表具有查询和写入权限

删除权限

revoke 权限 on 库.表 from '用户'@'主机';

revoke select, insert on test.* to 'liwenkai'@'localhost' identified by '4311';

删除liwenkai用户,在本机连接test库所有表的权限。删除查询和写入权限

参数说明

grant all   在grant后接all说明给予所有权限

revoke all 在revoke后接all说明删除所有权限

权限 on .         . 所明给予所有库所有表的操作权限

'用户'@'主机' 主机里面若为%。任意来源的主机均可以使用这个用户来访问

创建数据库用户liwenkai ,具有对test数据库中所有标的 select / insert 权限

mysql 之 增删改查相关推荐

  1. sqlalchemy 对 mysql 进行增删改查

    我其实还是喜欢原生的 sql 语句,sqlalchemy是对pymysql的封装,用的时候经常出各种错误.但是orm操作较简单,可以实现外键的关联操作. 视频 https://www.bilibili ...

  2. python操作mysql的增删改查_详解使用pymysql在python中对mysql的增删改查操作(综合)...

    这一次将使用pymysql来进行一次对MySQL的增删改查的全部操作,相当于对前五次的总结: 先查阅数据库: 现在编写源码进行增删改查操作,源码为: #!/usr/bin/python #coding ...

  3. 怎么用php操作mysql删除数据库代码_如何使用php操作mysql的增删改查?

    php操作mysql的增删改查方法:1.插入语句[insert into 数据表名(字段1,字段2,....) values("值1","值2",..)]:2. ...

  4. Mysql (一)Mysql 数据库增删改查

    mysql数据库增删改查增:create database DBname charset gbk; 删:drop database DBname; 改:alter database DBname ch ...

  5. Go操作mysql实现增删改查及连接池

    [-] 下载驱动 创建测试表 数据库连接 插入操作 查询操作 修改操作 删除操作 完整代码 小结 开启web服务 db对象初始化 请求方法 小结 golang本身没有提供连接mysql的驱动,但是定义 ...

  6. Java连接Mysql数据库增删改查实现

    Java连接Mysql数据库增删改查实现 时间比较赶,我这里只实现查询,有时间再添加另外两个 难度 : ⭐⭐⭐(全星5颗星的情况下) 新建一个动态的网站工程, 把jar包全部复制进去,主要要那个mys ...

  7. php对mysql进行增删改查,php对mysql进行增删改查

    php对mysql进行增删改查 /* 用户名 : MYSQL_USER 密 码 : MYSQL_PASS 域 名 : MYSQL_HOST 端 口 : MYSQL_PORT 数据库名 : MYSQL_ ...

  8. Node.js笔记-node.js连接MySQL与增删改查

    最近在看一个开源项目,项目用的是node.js,在此学习下他的连接mysql与增删改查. 安卓mysql包: npm install mysql 程序运行截图如下: D:\node\content\n ...

  9. mysql增错误_使用MySQL练习增删改查时因为版本问题出现连接错误

    使用MySQL练习增删改查时出现连接错误,错误提示如下: 2020-02-19 19:53:51.088 ERROR 16328 --- [reate-249798694] com.alibaba.d ...

  10. mfc连接mysql增删改查_java实现mysql数据库增删改查

    1.连接数据库: import java.sql.Connection; import java.sql.DriverManager; public class DBConnection { stat ...

最新文章

  1. 学界 | DeepMind想用IQ题测试AI的抽象思维能力,进展还不错
  2. 良田高拍仪集成vue项目
  3. 骑行广州大学城 外环十大校门
  4. 如何在网站上同步查看BCH数据
  5. 模拟usb设备_高速USB数据采集卡
  6. java calendar赋值_Java常用日期操作
  7. ZedGraph怎样在双击图形后添加箭头标记
  8. Azkaban与Oozie的区别及如何调度spark任务
  9. 关于ThreadLocal
  10. 演示JSP注释的使用
  11. 苹果公司为什么不给iPhone设计大容量电池和快充?
  12. GeoServer的安装与数据服务发布
  13. IIS下发布关于Excel导入导出时遇到的问题集锦
  14. delphi 获取硬盘序列号、cpu号、bios号、网卡号
  15. Ubuntu安装dos2unix命令
  16. 【从零开始学习YOLOv3】3. YOLOv3的数据加载机制和增强方法
  17. Spring的AspectJ包的下载及下载缓慢的解决方法
  18. 【Pandas总结】第六节 Pandas 添加列
  19. Web前端技术 Web学习资料 Web学习路线 Web入门宝典
  20. 电脑软件打不开,提示缺失某个.dll文件的原因及解决办法(亲测能用)

热门文章

  1. 百兆网络变压器原理图及网络变压器功能(附PDF工程图纸)
  2. CSS盒子模型、Boder基础
  3. CSS绝对定位使用left:50%实现水平居中偏左问题
  4. 电脑有必要安装杀毒软件吗?
  5. 微信小程序开发者账号注册以及开发者工具的使用
  6. 一个学生成绩管理系统c语言,一个学生成绩管理系统C语言源代码
  7. Python量化交易实战教程汇总
  8. 【BUG】【已解决】VS2019:应用程序无法正常启动(0x000007b)
  9. 免费、可商用的素材网站
  10. 每日英语--Week8