一. 基本命令 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 而且 or 或 not 非 需求: 查詢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