• 命令增删改查


    文章来自MySQL基本命令脚本

    连接数据库

    mysql -u 用户名 -p 回车
    密码 回车
    

    数据库操作

    # 创建数据库,带上字符集,可以说是固定写法
    create datebase 数据库名 charset=utf8;
    
    # 删除数据库:
    drop database 数据库名;
    
    # 切换数据库
    use 数据库名;
    
    # 查看当前选择的数据库
    select database();
    

    表操作

    # 查看当前数据库中所有表
    show tables;
    
    # 创建表,需要设置约束
    create table student(
      id int auto_increment primary key,  自增长&&主键
      name varchar(20) not null,  非空约束
      age int not null,   非空约束
      gender bit default 1,  默认约束
      address varchar(20) unique,   唯一约束
      isDelete bit default 0  默认约束
    ) CHARSET=utf8;;
    
     # 删除表
    drop table 表名;
    
    # 重命名表名
    rename table 原表名 to 新表名;
    
    # 修改表
    alter table 表名 add|change|drop 列名 类型;
    

    数据操作-增

    # 全列插入
    insert into student values(0,"tom",19,1,"北京",0);
    
    # 缺省插入
    insert into student(name,age,address)  values("lilei"19,"上海");
    
    # 同时插入多条数据:
    insert into student values  (0,"hanmeimei",18,0,"北京",0),(0,"poi",22,1,"海南",0),(0,"wenli",20,0,"石家庄",0);
    

    数据操作-删

    # 没有条件是全部删除,慎用
    delete from student where id=4;
    

    数据操作-改

    # 没有条件就是全部列都删除,慎用
    update student set age=16 where id=7;
    

    数据操作-查

    # 这个是核心下面细讲
    select * from student;
    

    # 比较运算符:
    等于  =
    大于  >
    小于  <
    大于等于  >=
    小于等于  <=
    不等于  !=或<>
    
    # 逻辑运算符:
    并且  and
    或者  or
    非  not
    
    # 需求:查询id值大于7的女同学    
    select * from student where id>7 and gender=0;
    
    # 模糊查询 like
    % 表示任意多个字符(类似于*)
    _表示任意一个字符(类似于?)
    
    # 需求:查询姓习的同学
    select * from student where name like "习%";
    select * from student where name like "习_";
    
    # 范围查询
    in  表示在一个非连续的范围内
    between...and...   表示在一个连续的范围内
    
    # 需求:查询编号为8、10、12的学生      
    select * from student where id in(8,10,12);
    
    # 需求:查询编号为6到8的学生
    select * from student where between 6 and 8;
    
    # 空判断,null与“”不同
    空:is null
    非空:is not null
    
    # 需求:查询没有地址的同学
    select * from student where address is null;
    
    # 需求:查询有地址的同学
    select * from student where address is not null;
    
    # 聚合,用于统计
    count(*)  表示计算总行数,括号中可以写*和列名
    max(列)  表示求此列的最大值
    min(列)  表示求此列的最小值
    sum(列)  表示求此列的和
    avg(列)  表示求此列的平均值
    
    # 需求:查询学生总数
    select count(1) from student;
    
    # 需求:查询女生的编号最大值
    select max(id) from student where gender=0;
    
    # 需求:查询女生的编号最小值
    select min(id) from student where gender=0;
    
    # 查询所有学生的年龄和
    select sum(age) from student;
    
    # 需求:查询所有学生的年历平均值
    select avg(age) from student;
    
    # 分组,按照字段分组,表示此字段相同的数据会被放到一个结合中。分组后,只能查询出相同的数据列,对于有差异的数据列无法显示正在结果集中。可以对分组后的数据进行统计,做聚合运算,可以有多个分组
    
    # 需求:查询男女生总数
    select gender,count(*) from student group by gender;
    
    # 分组后的数据筛选,having
    select gender,count(*) from student group by gender having gender='男';    
    
    # where与having的区别:
    where是对from后面指定的表进行筛选,属于对原始数据的筛选
    having是对group by的结果进行筛选
    
    # 排序,order by,可以有多个排序
    默认按照从小到大的顺序排序
    asc:升序
    desc:降序
    
    # 需求:将没有被删除的数据按年龄排序
    select * from student where isDelete=0 order by age desc;
    
    # 分页
    start索引从0开始
    select * from 表名 limit 0,10;
    select * from 表名 limit 10,10;
    
    # 表之间设定关联,这个现在应该不流行了,太乱了
    
    # 关联查询,虽然没有关联但是可以关联查询,是多表查询的一种
    表A inner join 表B:表A与表B匹配的行会出现在结果集中
    表A left join 表B:表A与表B匹配的行会出现在结果集中,外加表A中独有的数据,未对应的数据使用null填充
    表A right join 表B:表A与表B匹配的行会出现在结果集中,外加表B中独有的数据,未对应的数据使用null填充
    
    # 示例
    select students.name,class.name from class inner join students on class.id=students.classid;
    
    select students.name,class.name from class left join students on class.id=students.classid;
    
    select students.name,class.name from class right join students on class.id=students.classid;
    

    在哪里可以接上多表查询
    表可以加个空格使用别名
    字段也可以加个空格使用别名,因为多个表肯定会有某些字段的名字是一样的
    括号的使用很重要

    # 例子一,可以在from后面查询一个虚拟表
    select A.*,B.* from t_a A,(select * from t_b where id=id) B
    
    # 例子二,可以在where后面查询一个虚拟表,字段数量需要一样
    select * from t_a where id in (select id from t_b)
    
    # 例子二点一,上面是id对id,我要查两个怎么写呢
    select * from t_a where id in (select id from t_b) and id2 in (select id2 from t_b)
    # 例子二点二,这样写只能用等号
    select * from t_a where (id,id2) = (select id,id2 from t_b)
    
    # 例子三,可以在select后面查询一个虚拟表,但是只能肯定是返回一个值,比如count(1)
    select A.*,(select count(1) from t_b B where B.id=A.id) from t_a A
    
    # 例子四,可以在having后面查询一个虚拟表
    select secondaryId,count(1) from t_it GROUP BY secondaryId HAVING secondaryId = (SELECT secondaryId FROM t_it where id=id)
    
    # 可以理解为我在哪都能用个括号拼一个虚拟表上去,考虑虚拟表的字段数量对不对,字段的值的个数对不对就行,错了就改就是了,改到运行成功就行
    

    书写顺序
    image.png

    数据库的备份同步
    下载工具,命令行不会,错了问题就得跑路

  • 相关阅读:
    VirtualBox设置共享文件夹和镜像访问的方法
    虚拟机文件越来越大解决方案
    linux磁盘清理方法 Linux 下垃圾清理工具 BleachBit
    linux上怎么切换不同版本的arm-linux-gcc?只需改一行函数
    windows桌面添加右键环境
    各种机械键盘轴的差别,究竟什么轴好
    XML是什么,它能够做什么?——写给XML入门者
    MATLAB中导入数据:importdata函数
    理解ThreadLocal
    Leetcode:best_time_to_buy_and_sell_stock_II题解
  • 原文地址:https://www.cnblogs.com/pengdt/p/12240636.html
Copyright © 2020-2023  润新知