设为首页 收藏本站
查看: 908|回复: 0

[经验分享] mysql 基础 增删改查语句

[复制链接]
发表于 2017-12-11 20:22:46 | 显示全部楼层 |阅读模式
  MySQL:众多关系型数据库中的一种
  仓库  --数据库
  箱子  --表
  数据库:
  进入mysql 命令行: mysql -uroot -p
  查看所有数据库:  show databases;
  创建数据库:  create database niu charset utf8;
  删除数据库: drop database niu;
  选择数据库: use databases;
  查看所有表:      show tables;
  查看创建数据库的语句:show create database databasename;
  查看创建表的语句:show create table tablename;
  查看表结构:desc tablenmae;
  表:
  约束
  #自增长
  auto_increment
  #非空
  not null
  #默认值
  default 'xx'
  #唯一
  unique
  #指定字符集
  charset
  #主键
  primary key
  #外键
  增加两个表之间的联系
  增:
  #学生表
  create table students(
  id int auto_increment primary key,
  name varchar(10) not null,
  sex varchar(3) default '女',
  address varchar(50),
  phone int not null unique,
  age,
  );
  #成绩表
  create table scores(
  id int auto_increnent primary key,
  s_id int not null,
  grade float not null,
  );
  删:
  drop table tablename;
  truncate tablename;#快速删除表
  改:
  alter table oldtable rename newtable; #改表名
  alter table tablename modify name varchar(20);#改表结构
  alter table tablename change name newname varchar(20);#改表结构
  alter (table tablename add age float
  after name;#新增字段的位置
  查:
  show create table tablename ;#查看新建表语句
  desc table;#查看表结构
  show tables ;#查看所有表
  数据:
  增
  insert into student (name,money,sex,phone) values ('hk',10000,'男',188);
  insert into student values('','小明',100,'',120);
  删
  turncate tablename;  #删除整表数据,自增长id从头再来,快速,从磁盘直接删除,不可恢复
  delete from student;
  #删除整个表的数据,自增长继续
  改
  update student set money=100;#不指定条件,修改所有
  update student set money=110 where name='hk';#只改hk
  自动提交
  取消自动提交   set @@autocommitt=0;
  select @@autocommitt=0;
  #自动提交取消后,当前会话显示已经成功执行,其实后台并没有执行
  查:
  select * from students limit 1,5;  #从第几条开始,下面的x条,不包含开始的那一条
  SELECT * from students limit 5;查询5条

  SELECT>  SELECT * from students;#查询所有的数据
  SELECT * from students where sex='男';#指定条件
  SELECT * from students where sex='男' and money>100; #多个条件,必须同时满足
  SELECT * from students where sex='男' or sex='未知' ; #多个条件,有一个满足即可
  SELECT * from students where sex !='男'; #<>也是不等于
  SELECT * FROM students where addr like '%东京%';#模糊匹配,%代表的是通配符,必须得用like
  SELECT * from students a where a.stu_name like '姚_';#_通配符表示任意一个单字符,姚字后面只能跟一个字
  SELECT a.stu_name '学生名称',a.phone '学生电话' from students as a where a.stu_name='姚远';#给表起别名,as可以省略
  SELECT * from students a where  a.stu_name in ('牛牛','林倩','姚远');# in
  SELECT * from students a where  a.money BETWEEN 1000 and 10000;#在什么什么之间的数据
  SELECT * from students ORDER BY money desc;
  #order by xxx desc,根据哪个字段继续排序,默认是升序,
  降序是desc,升序asc
  SELECT * from students a where a.addr = '' or a.addr is null; #查询字段为空的数据
  SELECT DISTINCT a.money from students a ;#去重
  SELECT COUNT(*) '学生人数' from students  where sex='女'; #统计行数
  SELECT MAX(a.money) 钱最多 from students a; #最大值
  SELECT min(money) 钱最少 from students;#最小值
  SELECT AVG(a.money) 平均多少钱 from students a; #平均数
  SELECT sum(a.money) 总共多少钱 from students a;#总和
  SELECT sex 性别,count(*) 人数 from students GROUP BY sex; #分组
  SELECT
  sex 性别,
  count(*) 人数,
  a.stu_name 名字
  FROM
  students a  WHERE a.money > 300 GROUP BY a.id HAVING a.stu_name LIKE '姚%';
  #如果group by后面有条件的话,必须得用having子句,having子句里面用到的字段必须出现在select后面,如果group by和order by一起用的话,order by必须写在group by后面
  SELECT *,COUNT(*) from students GROUP BY sex,class; #多个字段进行分组

  SELECT>  #用来合并两条select语句的结果,两条select语句字段数量要一致,并且数据类型也要一致
  union和union all的区别就是一个会去重一个不会
  多表关联:
  SELECT * FROM USER a, accounts b WHERE
  a.id = b.user_id
  AND a.username = 'niuhy';
  -- SELECT * from students a ,scores b where a.id=b.s_id; -- 多表关联
  -- 两个表里面都存在的数据查出来
  SELECT * from students a LEFT JOIN scores b on a.id=b.s_id;
  -- LEFT JOIN会把左边表所有的数据都查出来,右边表有匹配的就查出来
  SELECT * from students a RIGHT JOIN scores b on a.id=b.s_id;
  -- RIGHT JOIN会把右边表所有的数据都查出来,左边表有匹配的就查出来
  SELECT * from students a inner JOIN scores b on a.id=b.s_id;
  -- INNER JOIN两边表里都匹配的数据才查到
  子查询:
  把一条sql的结果,作为另一条sql的条件

  SELECT * from scores a where a.s_id = (SELECT>  把子查询当成一个表
  SELECT
  a.grade 成绩,
  b.stu_name 学生名称,
  b.id 学号
  FROM
  scores a,
  ( SELECT id,stu_name FROM students WHERE stu_name = '牛牛') b
  WHERE
  a.s_id = b.id;
  数据库权限:
  mysql数据的权限实质上都是在user表里控制的
  1、grant
  #所有的权限  所有数据库下面的所有表  用户 用户ip

  grant all on       *.* to 'andashu'@'localhost'>  密码       #有执行grant语句的权限

  grant all on       *.* to 'andashu'@'%'>  取消授权:
  Revoke select on *.* from dba@localhost;
  Revoke all on *.* from andashu@localhost;
  2、修改user表的数据
  对user表进行增加、修改和删除
  flush privileges;#刷新权限
  备份数据库:
  mysqldump -uroot -p123456 db > db.sql
  mysqldump -uroot -p123456 -A > all.sql
  恢复数据:
  mysql -uroot -p123456 db < db.sql
  存储过程:
  批量的造数据
  delimiter $$; #为了改结束符
  CREATE PROCEDURE big_data1(num int)#代表要造多少条数据 100
  BEGIN
  DECLARE i int;
  set i=0;
  WHILE i<num do
  insert into students (stu_name,money) VALUES (CONCAT('宋灏志',i),20000);
  #CONCAT的作用是连接不同类型的数据
  #把字符串和数字拼接到一起
  set i=i+1;
  end WHILE;
  End
  $$;
  delimiter;
  call big_data1(500); #调用

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-423128-1-1.html 上篇帖子: MySql 笔试题 下篇帖子: MySQL创建表的语句
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表