1. 程式人生 > >MySQL常用命令及pycharm連結MySQL

MySQL常用命令及pycharm連結MySQL

MySQL常用命令及pycharm連結MySQL
1.mysql 的基本使用命令
1.啟動mysql服務
1.windows中啟動服務
net start mysql
關閉: net stop mysql
2.linux啟動服務, 預設開啟的
service mysql start
關閉: service mysql stop
2.進入mysql
命令: mysql -u 使用者名稱 -p
然後輸入密碼即可進入, 如果看到 mysql> 則成功進入

**3.window與linux的資料庫命令一致
4.檢視資料庫的版本
select version();
5.檢視當前的時間
select now();
6.退出
exit 或者 quit

----增,刪,改,查

2.庫的操作
1.展示所有的資料庫
show databases;
展示所有的已經存在的資料庫
mysql預設會有管理自己的庫,表,使用者,配置的資料庫
2.建立一個數據庫
格式: create database 資料庫名 charset=“utf8”;
例: create database school charset=“utf8”;

3.刪除一個數據庫
   格式:  drop  database  資料庫名;
   例: drop  database  school;
 
4.改**

5.使用某個倉庫
  格式: use 資料庫名
  
6.檢視當前使用的資料庫:  
   格式: select  database();

3.表的操作
1.查詢當前庫中的所有的表
格式: show tables;
2.建立一個表
格式: create table 表名(欄位名 欄位描述,欄位名n 欄位描述,…);
例: create table student(id int primary key auto_increment,name varchar(20) not null,age int default 17,address varchar(20),sex bit default 1);

 例: create  table student(id int primary key auto_increment,name varchar(20)  not null,age int default 17,address varchar(20),sex bit default 1,data1 varchar(20),data2 varchar(20));
  1. 查看錶的結構
    1.格式: desc 表名;
    2.格式2: show create table 表名; 檢視建立表的sql語句

  2. 刪除一個表
    格式: drop table 表名;
    例: drop table student;

5.修改表
1.修改表名
格式1: rename table 舊錶名 to 新表名;
2.修改表結構:
格式: alter table 表名 add|drop|change
1.新增一個新的欄位
格式: alter table 表名 add 欄位名 欄位描述;
例: alter table student add phonenumber varchar(20);
2.刪除一個欄位
格式: alter table 表名 drop 欄位名;
例: alter table student drop phone;

      3.修改一個欄位
     格式: alter table 表名  change 要修改的欄位名 新的欄位名  新的欄位型別描述;
       例: alter table student change phonenumber  phone  varchar(20);
   **3.開發過程中儘量的不要修改已經有資料的欄位 ,
       設計表的時候儘量設計一些預留欄位

4.資料的操作
1.增加資料
1.插入一條資料
格式: insert into 表名 values(對應的值1,對應的值2,對應的值n)
例: insert into student values(0,“三胖胖”,38,“平壤”,1);
注意:插入的值要與表對應欄位一一對應
如果是自動增長的資料型別,將該值設定為 0即會自動的增長
2. 預設值插入
 格式: insert into 表名(欄位1,欄位2,欄位n,…) values(欄位1對應的值,欄位2對應的值,欄位n對應的值,…);
例: insert into student(name,age,sex) values(“三棒子”,74,0);
3. 插入多條資料
格式: insert into 表名 values(對應的值1,對應的值2,對應的值n),(對應的值1,對應的值2,對應的值n) ,(對應的值1,對應的值2,對應的值n) …;
例: insert into student values(0,“習大大”,66,“北京”,1),(0,“李克強”,55,“北京”,1),(0,“習書記”,67,“中南海”,1),(0,“朱鎔基”,78,“北京”,1);

2.刪除資料
格式: delete from 表名 where 條件
例1: delete from student where id =2;
delete from student where name =‘三棒子’;
注意:刪除一條資料後,該資料後的資料對應的id不會變

3.修改資料
格式: update 表名 set 欄位名 = 值1,欄位名2 = 值2 where 條件
例2: update student set name = ‘金三胖胖’, address = ‘中國’ where id =1;

4.查詢資料庫的表中的所有資料
查詢所有資料 格式: select * from 表名;
例: select * from student;

5.查詢語句
1.格式1: select 欄位名1,欄位名n,… from 表名 where 查詢條件
格式2: select 欄位名1 as 別名,欄位名n,… from 表名 where 查詢條件

  1.select表示查詢
  2.select 後面是查詢結果要顯示的欄位名
         例: select name,age  from student; 
      3. * 表示顯示所有欄位的資料    
  4.from 後面是表名,表示從那個表中查詢
  5.where 條件  表示以某個條件進行篩選
  6.如果沒有where條件,表示查詢所有
      7.欄位名1 as 別名   可以給顯示的欄位名取個別名,方便檢視

  需求: 展示所有的學生的姓名和年齡?
      select name as '姓名',age as '年齡'  from student;
      
   
   查詢所有:  select * from 表名
2.查詢條件 表示式    
   1.比較運算子
     >   大於
 <   小於
 >=  大於等於
 <=   小於等於
 =    等於 
 !=   不等於
    需求: 查詢班上大於60歲的學生 ?
  例: select *  from student where age > 60;
     需求: 查詢班上小於等於55歲的學生 ?
	select *  from student where age <= 55;
      需求: 查詢班上不等於55歲的學生 ? 
	select *  from student where age != 55;

  2.邏輯運算子 
 且   and
 或   or  
 非   not 
      
 需求: 查詢班上大於55歲且小於70歲的學生 ?
       select * from student where age>55 and age < 70;
 需求: 查詢班上除了北京的學生
   select * from student where not address = '北京';
   3.模糊運算子
     格式:  ..... where 欄位名  like  '字串'
 任意字元: % 任意多個任意字元
           _ 一個任意字元
      
   需求:  查詢姓習的同學?
select * from student where name  like '習%';
   需求: 查詢姓習的同學,且只有2個字?    	
       select * from student where name  like '習_';
   需求:  查詢名字中包含  胖  字的同學
     insert into student values(0,"大胖胖",66,"北京",1),(0,"三胖子",55,"北京",1),(0,"胖胖胖",67,"中南海",1),(0,"胖娃娃",78,"北京",1);
       select * from student where name like '%胖%';
   
   4.範圍運算子
       成員運算子 
      格式1:  .... where 欄位名  in  (值1,值2,值3)
        是否等於 () 中的某一個值

     格式2:   ... where  欄位名  between 值1 and 值2   

      需求: 查詢出住在北京或者 中南海或者.. 的同學 ?
       select * from student where address in  ('北京','中南海');
   
   5.空值判斷
     格式1:   .... where  欄位名 is null;
 需求:將address為空的所有資料篩選出來?
      .. where  address is null;

     格式2:   .... where  欄位名 is not null;
 需求:將address不為空的所有資料篩選出來? 
          ...where  address is not null;
     
   6.運算子的優先順序
      1.以上運算子可以綜合使用
  2. 加上() 

3.聚合函式
count(*) 統計查詢結果的數量
max(欄位名) 統計某個欄位的最大值
min(欄位名) 統計某個欄位的最小值
avg(欄位名) 統計某個欄位的平均值
sum(欄位名) 統計某個欄位的總和

格式: select 聚合函式  from  表名 where 條件
需求: 查詢該表總共有多少學生
      select count(*)  from student;
需求: 獲取學生的最大年齡?
      select max(age)  from student;
需求: 統計年齡的平均值 ?
      select avg(age) from student;

4.分組 group by
格式: select … from 表名 where 條件 group by 欄位名

 **統計某個欄位有多少種值
需求: 檢視有多少種地址 ? 
    select address  from student group by address;
需求:查詢每個地址有多少人?   
      select address,count(*)  from student group by address;

需求: 再查詢出中南海有多少人 ?
    select address,count(*)  from student  group by address having address = '中南海';
   


    having  條件   表示在某個結果集上繼續篩選

注意: where 與having 後面都是跟一個條件表示查詢,
      但是where是先篩選, having是在where的結果後再篩選

5.排序 order by
格式: select … from 表名 where 條件 order by 欄位名 排序規則;
需求:查詢所有學生,並按年齡排序(升序,預設的) ?
select * from student order by age desc;
降序: desc
升序asc 預設的

  需求: 多個欄位排序
    格式: select ..... from 表名  where 條件  order by 欄位名 排序規則,欄位名2 排序規則;

6.分頁:
格式: select … from 表名 where 條件 limit 值1,值2;
例: select * from student limit 1,4;

  值1 表示的是分頁的起始位置,  注意: 從 0 開始  
  值2 表示的是每一頁的結果數量 
   
 獲取第n頁資料,  每一頁4條資料
  select * from student limit  4(n-1),4;

pycharm連結MySQL

#pip 安裝 pymysql模組
#匯入pymysql模組,用來幫助操作mysql資料庫
import  pymysql

連線mysql資料庫
使用者名稱, 密碼, 主機名,埠號
host = None, con 指定主機名, ip地址, 127.0.0.1和localhost代表主機
user = None, 指定使用者名稱
password = “”, 指定密碼
database = None, 指定連線的資料庫
port = 0, 指定資料庫埠號 預設是3306
charset = ‘’, 指定編碼

connect = pymysql.Connect(host="10.31.160.135",user="hz1805",password = "123456",database="school",charset='utf8')

# 執行sql語句
# 獲得cursor物件,cursor物件是用來執行sql語句的
cursor = connect.cursor()
# 執行sql語句 獲得MySQL版本
cursor.execute("select version();")

# 獲得執行後的結果
res = cursor.fetchone()
print(res)

1、建立一個表

# 如果該表已經存在,則刪除該使用者
sqlFood = "drop table if EXISTS  food"

cursor.execute(sqlFood)

# 建立一個表
createSql = "CREATE TABLE food(id INT PRIMARY  KEY  auto_increment,name VARCHAR(20),price INT)"

cursor.execute(createSql)

2、 資料新增

# 增 刪 改 需要用到回滾 --------查
try:
    sqlInsert = "insert into food values(0,'麻辣香鍋',99);"
    sqlInsert2 = "insert into food values(0,'6塊錢的麻辣燙',6);"
    # sqlInsert2 = "insert into food values(0,'xxxxxxxx','6塊錢的麻辣燙',6);"
    sqlInsert = "insert into food values(0,'傳奇冒菜',9);"
    sqlInsert2 = "insert into food values(0,'麻辣小龍蝦',64);"
    sqlInsert = "insert into food values(0,'紅燒大肘子',91);"
    sqlInsert2 = "insert into food values(0,'麻辣火鍋',66);"
    cursor.execute(sqlInsert)
    cursor.execute(sqlInsert2)
#     commit提交
    connect.commit()

except:  #只要出現異常就回滾sql
    # 用sql進行資料操作的時候,通常需要保證資料的完整性,當需要同時執行多條sql語句時, 其中的任意一條執行出錯,就可能導致所有資料出錯,
    #   所以,當其他中的某一條sql出錯時,則回滾到執行這些sql語句之前的狀態
    connect.rollback()

3、資料刪除

# 增 刪 改 需要用到回滾 --------查
try:
    # 刪除sql
    sqlDel  = "delete from food where id = '1'"
    cursor.execute(sqlDel)

    connect.commit()

except:
    connect.rollback()

4、資料修改

# 增 刪 改 需要用到回滾 --------查
try:
    # 刪除sql
    sqlDel  = "update food set name='傳奇冒菜' where id = 2;"
    cursor.execute(sqlDel)

    connect.commit()

except:
    connect.rollback()

5、資料查詢

selectSql = "select * from food"
cursor.execute(selectSql)

關閉連線

cursor.close()
connect.close()