zoukankan      html  css  js  c++  java
  • 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;

  • 相关阅读:
    WDSL文件中的XML元素
    Cookie跨域setDomain和setPath
    Cookie/Session机制详解
    Java服务端对Cookie的简单操作
    Nginx配置详解 http://www.cnblogs.com/knowledgesea/p/5175711.html
    如何在mac里面,把xcode代码同步到 tfs 的 git库(新git库)
    如何在mac里面,把xcode代码同步到 tfs 的 git库(克隆git篇)
    Centos7 安装 MySql
    如何在Centos里面,把.net core程序设为开机自启动
    Typescript编译设置
  • 原文地址:https://www.cnblogs.com/xiao-xue-di/p/9673974.html
Copyright © 2011-2022 走看看