• MySQL基本命令总结


    一. 基本命令
    1. 启动服务
        windows: net start mysql
        linux: service mysqld start
        mac: /usr/local/mysql/support-files/mysql.server start  (gz解压包方式安装,路径按照解压安装时的目录查找)
             brew services start mysql  (brew install mysql方式安装启动方式)
        为了方便操作,可以自定义启动命令,修改~/.bash_profile文件,添加以下内容:
        
        # mysql快捷命令
        alias mysqlstart='sudo /usr/local/mysql/support-files/mysql.server start'  # 启动服务
        alias mysqlstop='sudo /usr/local/mysql/support-files/mysql.server stop'  # 停止服务
        alias mysqlstatus='sudo /usr/local/mysql/support-files/mysql.server status'  # 查看状态
        alias mysqlrestart='sudo /usr/local/mysql/support-files/mysql.server restart'  # 重启服务
        添加完成后,可以直接执行mysqlstart,mysqlstop命令启动停止服务.
    2. 停止服务
        windows: net stop mysql
        linux: service mysqld stop
        mac: /usr/local/mysql/support-files/mysql.server stop
             brew services stop mysql
    3. 连接数据库
        mysql -u root -p
    4. 退出登录
        exit;
    5. 查看数据库版本
       select version();
    6. 查看当前时间
       select now();
    7. 远程链接
       mysql -h 远程ip -u 用户名 -p 密码
    8. 更改密码
        下面几种方法都可以:
        SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpass');
        mysqladmin -u root password "newpass";  # 更改前root密码为空时使用此命令
        mysqladmin -u root password "oldpass" "newpass";  # 更改前root已经设置过密码
        update mysql.user set authentication_string=password('新密码') where User='root'; 
        UPDATE mysql.user SET Password = PASSWORD('newpass') WHERE user = 'root';
    
    
    二. 数据库操作
    1. 创建数据库
        格式: create database 数据库名 charset=utf8;
    2. 删除数据库
        格式: drop database 数据库名;
    3. 切换数据库
        格式: use 数据库名;
    4. 查看当前选择的数据库
        格式: select database();
    
    
    三. 表操作
    1. 查看数据库中所有表
        show tables;
    2. 创建表
        格式: create table 表名(列及类型);
        示例: create table student(id int auto_increment primary key, name varchar(20) not null, age int not null, gender bit default 1, address varchar(64), isDelete bit default 0);
        1) 创建表时,直接引用其他数据库中的表结构及数据:
        create table tablename select * from otherdb.othertable;
        2) 创建表时,直接引用其他数据库中的表结构,不引入表中数据:
        reate table tablename select * from otherdb.othertable where 1>2;  # 指定一个为假的条件,则只引用表结构
    3. 删除表
        格式: drop table 表名;
        示例: drop table student;
    4. 查看表结构
        desc 表名;
        desc student;
    5. 查看建表语句
        格式: show create table 表名;
        示例: show create table student;
    6. 重命名表名
        格式: rename table 原表名 to 新表名;
        示例: rename table student to newstudent;
    7. 修改表结构
        格式: alter table 表名 add|change|drop 列名 类型;
              alter table 表名 add|change|drop 列名 类型 default 默认值;  (有默认值方式)
    
    
    四. 数据操作
    1. 增
        a. 全列插入
            格式: insert into 表名 values(...);
            说明: 主键列是自动增长的,但是在全列插入时需要占位,通常使用0,插入成功后以实际数据为准
            示例: insert into student values(0,"jason",20,1,"BJ",0);
        b. 缺省插入
            格式: insert into 表名(列1,列2...) values(值1,值2...);
            示例: insert into student(name,age,address) values("tom",18,"上海");
        c. 同时插入多条数据
            格式: insert into 表名 values(...),(...),(...)...
            示例: insert into student values(0,"jackson",22,1,"SH",0), (0,"lily",20,0,"GZ");
    2. 删
        格式: delete from 表名 where 条件;
        示例: delete from student where id=2;
        注意: 没有条件是全部删除,谨慎使用
    3. 改
        格式: update 表名 set 列1=新值,列2=新值 where 条件;
        示例: update student set age=25 where name="jason";
        注意: 没有条件是全部列都修改,谨慎使用
    4. 查
        说明:查询表中的全部数据
        格式: select * from 表名;
        示例: select * from student;
    
    
    五. 查
    1. 基本语法
        格式: select * from 表名;
        说明:
            1) from关键字后面是表名,表示数据来源于这张表
            2) select后面写表中的列名,如果是*表示在结果集中显示表中的所有列
            3) 在select后面的列名部分,可以使用as为列名起别名,这个别名显示在结果集中
            4) 如果要查询多个列,中间使用逗号分隔
        示例:
            select * from student;
            select name, age from student;
            select name, address as addr from student;
    2. 消除重复行
        在select后面列前面使用distinct可以消除重复的行
        示例:
            select gender from student;
            select distinct gender from student;   
    3. 条件查询
        a. 语法
            格式: select * from 表名 where 条件;
        b. 比较运算符
            等于              =
            大于              >
            小于              <
            大于等于          >=
            小于等于          <=
            不等于            !=<>
            需求: 查询id大于5的所有学生
            示例: select * from student where id>5;
        c. 逻辑运算符
            and    并且
            ornot    非
            需求: 查询id大于5的男同学
            示例: select * from student where id>5 and gender=1;
        d. 模糊查询
            like
            % 表示任意多个任意字符
            _ 表示任意一个任意字符
        e. 范围查询
            in                  表示在一个非连续的范围内
            between...and...    表示在一个连续的范围内
            需求: 查询编号为8,10,12的学生
            示例: select * from student where id in (8,10,12);
            需求: 查询编号为6到10的学生
            示例: select * from student where id between 6 and 10;
        f. 空判断
            注意: null与""不同
            判断空: is null
            判断非空: is not null
        g. 优先级
            小括号, not 比较运算符, 逻辑运算符
            and比or优先级高,如果同时出现并希望先执行or,需要配合小括号使用
    4. 聚合
        为了快速得到统计数据,提供了5个聚合函数
        a. count(*)     表示计算总行数,括号中可以写*或列名
        b. max(列)       表示求此列的最大值 
        c. min(列)       表示求此列的最小值
        d. sum(列)       表示求此列的和
        e. avg(列)       表示求此列的平均值
        需求: 查询学生总数
        示例: select count(*) from student;
        需求: 查询女生编号的最大值
        示例: select max(id) from student where gender=0;
        需求: 查询所有学生的年龄和
        示例: select sum(age) from student;
        需求: 查询所有学生的年龄平均值
        示例: select avg(age) from student();
    5. 分组
        按照字段分组,表示此字段相同的数据会放到一个集合中.
        分组后,只能查询出相同的数据列,对于有差异的数据列无法显示在结果中.
        可以对分组后的数据进行统计,做聚合运算
        语法: select 列1,列2,聚合... from 表名 group by 列1,列2...
        需求: 查询男女生总数
        示例: 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的结果进行筛选
    6. 排序
        语法: select * from 表名 order by 列1 asc|desc, 列2 asc|desc, ...
        说明:
            a. 将数据按照列1进行排序,如果某些列1的值相同,则按照列2进行排序
            b. 默认按照从小到大的顺序排序
            c. asc 升序
            d. desc 降序
        需求: 将没有被删除的数据按照年龄排序
        示例: 
            select * from student where isDelete=0 order by age desc; 
            select * from student where isDelete=0 order by age desc, id desc;
    7. 分页
        语法: select * from 表名 limit start,count;
        说明: start 索引从0开始; count 结果集中显示个数
        示例:
            select * from student limit 0,3;
            select * from student limit 3,3;
            select * from student where gender=0 limit 0,3;
    
    
    六. 关联
        一对多示例
        建表语句:
        1. create table class(id int auto_increment primary key, name varchar(20) not null, stuNum int not null);
        2. create table students(id int auto_increment primary key, name varchar(20) not null, gender bit default 1, classid int not null, foreign key(classid) references class(id));
        # 使用外键关联班级表的主键. 注: 表的外键必须是另一张表的主键
        
        插入一些数据:
        insert into class values(0, "python01", 45), (0, "python02", 50), (0, "python03", 60);
        insert into students values(0, "jason", 1, 1);
        insert into students values(0, "lily", 1, 10);  # 此条语句报错
        insert into students values(0, "curry", 1, 2);
        关联查询:
        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;
        
        分类:
        1. 表A inner join 表B
            表A与表B匹配的行会出现在结果集中
        2. 表A left join 表B
            表A与表B匹配的行会出现在结果集中,外加表A中独有的数据,未对应的数据使用null填充
        3. 表A right join 表B
            表A与表B匹配的行会出现在结果集中,外加表B中独有的数据,未对应的数据使用null填充
    
    
    七. 数据备份,恢复
    1. 数据备份
        1) 备份表结构+数据
            mysqldump -u root -p test > test.dump  # 备份test数据库
        2) 只备份表结构
            mysqldump --no-data --databases db1 db2 eb3 > test.dump  # 备份db1,db2,db3的表结构
            或
            mysqldump -u root -p -d test > test.dump  # 备份test的表结构
        3) 备份所有数据库
            mysqldump --all-databases > test.dump
    2. 数据恢复
        1) 系统命令行恢复
            mysqldump -u root -p test > test.dump  # 执行这条语句备份(有问题,暂时情况是终端没报错,但数据没有恢复到db2中)
            mysqldump -uroot -p -d db2 < test.dump  # 将备份的数据恢复到本地的db2数据库(db2已经存在且为空,新建的即可)
        2) mysql命令行恢复
            mysqldump -u root -p test > test.dump # 执行这条语句备份
            mysql> use db1;
            Database changed
            mysql> show tables;
            Empty set (0.00 sec)
            mysql> source test.dump;  # source后可以接绝对路径,如果不用绝对路径,那么要先切换到test.dump所在的目录
            mysql> show tables;  # 可以看到备份文件中的表已经恢复
            +---------------+
            | Tables_in_db1 |
            +---------------+
            | class         |
            | juniorStus    |
            | student       |
            +---------------+
            3 rows in set (0.00 sec)
    
    
    八. 补充内容
        1. 重置密码
        1)windows
            net stop mysql  # 停止服务
            mysqld --skip-grant-tables  # 以跳过授权表的方式启动服务
            mysql -uroot -p  # 直接回车登录不需要输入密码
            update mysql.user set authentication_string =password('新密码') where User='root';  # 设置新密码
        2)linux/mac
            ./mysqld_safe --skip-grant-tables  # 安装mysql的bin目录下执行
            mysql -uroot -p  # 直接回车登录
            update mysql.user set authentication_string =password('新密码') where User='root';
        2. 创建用户and授权
        root身份登录,然后进入mysql数据库下操作
        mysql> use mysql
        Database changed
        1)新用户的增删改
            新增: create user '用户名'@'ip地址' identified by '用户密码';
            删除: drop user '用户名'@'ip地址';
            修改: 
                rename user '用户名'@'IP地址' to '新用户名'@'IP地址';
                set password for '用户名'@'IP地址'=Password('新密码');
            示例:
            # 指定允许ip:192.118.1.1的jason用户登录
            create user 'jason'@'192.168.1.10' identified by '123';
            # 指定允许ip:192.118.1.开头的jason用户登录
            create user 'jason'@'192.168.1.%' identified by '123';
            # 指定允许任何ip的jason用户登录
            create user 'jason'@'%' identified by '123';
        2)用户权限管理
            新增用户默认是没有任何权限的,不能查看数据库,表...
            查看权限: show grants for '用户名'@'ip地址';
            授予权限: grant operation on dbname.tablename to '用户名'@'ip地址';
            取消权限: revoke operation on dbname.tablename from '用户名'@'ip地址';
      
           示例: # 授权jason用户仅对test.students文件有查询、插入和更新的操作
    grant select,insert,update on test.students to "jason"@'%'; # 表示有所有的权限,除了grant这个命令,这个命令是root才有的. jason用户对test下的students文件有任意操作 grant all privileges on test.students to "jason"@'%'; # jason用户对test数据库中的文件执行任何操作 grant all privileges on test.* to "jason"@'%'; # jason用户对所有数据库中文件有任何操作 grant all privileges on *.* to "jason"@'%'; # 取消权限 # 取消jason用户对test的students文件的任意操作 revoke all on test.students from 'jason'@"%"; revoke all on test.* from 'jason'@"%"; revoke all on *.* from 'jason'@"%";
      
      刷新权限:
      flush privileges;



    grant all privileges  on *.*  to "root"@'%' indenttified by '123456'; # 远端登录用123456就算用户主机改了密码,远端登录也是123456  

     indenttified by password;

  • 相关阅读:
    hdu 5646 DZY Loves Partition
    bzoj 1001 狼抓兔子 平面图最小割
    poj 1815 Friendship 最小割 拆点 输出字典序
    spoj 1693 Coconuts 最小割 二者取其一式
    hdu 5643 King's Game 约瑟夫环变形
    约瑟夫环问题
    hdu 5642 King's Order
    CodeForces 631C Report
    1039: C语言程序设计教程(第三版)课后习题9.4
    1043: C语言程序设计教程(第三版)课后习题10.1
  • 原文地址:https://www.cnblogs.com/xiao-xue-di/p/9673974.html
Copyright © 2020-2023  润新知