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  python

 indenttified by password;mysql

相關文章
相關標籤/搜索