MySQL數據庫操作


MySQL 數據庫操作

數據庫操作

1.查看已有庫

  show databases;

2.創建庫(指定字符集)

  create database 庫名 character set utf8;

  create database 庫名 charset=utf8;

  create database 庫名 default charset utf8 collate utf8_general_ci;

案例:創建stu數據庫,編碼為utf8

  create database stu character set utf8;

  create database stu charset=utf8;

3.查看創建庫的語句(字符集)

  show create database 庫名;

案例:查看stu創建方法  show create database stu;

4.查看當前所在庫

  select database();

5.切換庫

  use 庫名;

案例:使用stu數據庫  use stu;

6.刪除庫

  drop database 庫名;

案例:刪除test數據庫   drop database test

 

7.庫名的命名規則

  • 數字、字母、下划線,但不能使用純數字
  • 庫名區分字母大小寫
  • 不能使用特殊字符和mysql關鍵字

庫管理

代碼

服務器狀態

status;

查看整個數據庫的編碼集

show variables like 'charavter%';

創建庫(制定字符集)

create database 庫名 character set utf8;

create database 庫名 charset=utf8;

create database 庫名 default charset utf8 collate utf8_general_ci;

查看已有庫

show databases;

切換庫

use 庫名;

查看創建庫的語句

show create database 庫名;

刪除庫

drop database 庫名;

 

數據表的管理

1.表結構設計初步

【1】 分析存儲內容
【2】 確定字段構成
【3】 設計字段類型

2.數據類型支持

數字類型:

  整數類型(精確值) - INTEGER,INT,SMALLINT,TINYINT,MEDIUMINT,BIGINT
  定點類型(精確值) - DECIMAL
  浮點類型(近似值) - FLOAT,DOUBLE
  比特值類型 - BIT

對於精度比較高的東西,比如money,用decimal類型提高精度減少誤差。列的聲明語法是DECIMAL(M,D)。

  M是數字的最大位數(精度)。其范圍為1~65,M 的默認值是10。
  D是小數點右側數字的數目(標度)。其范圍是0~30,但不得超過M。
  比如 DECIMAL(6,2)最多存6位數字,小數點后占2位,取值范圍-9999.99到9999.99。

比特值類型指0,1值表達2種情況,如真,假


字符串類型:

  • char和varchar類型
  • binary和varbinary類型
  • blob和text類型
  • enum類型和set類型

  • char 和 varchar

    char:定長,效率高,一般用於固定長度的表單提交數據存儲,默認1字符
    varchar:不定長,效率偏低

  • text 和blob

    text用來存儲非二進制文本
    blob用來存儲二進制字節串

  • enum 和 set

    enum用來存儲給出的一個值
    set用來存儲給出的值中一個或多個值


表的基本操作:

創建表(指定字符集)

create table 表名(
字段名 數據類型,
字段名 數據類型,
...
字段名 數據類型
);

  • 如果你想設置數字為無符號則加上 unsigned
  • 如果你不想字段為 NULL 可以設置字段的屬性為 NOT NULL, 在操作數據庫時如果輸入該字段的數據為NULL ,就會報錯。
  • DEFAULT 表示設置一個字段的默認值
  • AUTO_INCREMENT定義列為自增的屬性,一般用於主鍵,數值會自動加1。
  • PRIMARY KEY關鍵字用於定義列為主鍵。主鍵的值不能重復。

案例:創建班級表 

  create table class_1 (id int primary key auto_increment,name varchar(32) not null,age int not null,sex enum('w','m'),score float default 0.0);

案例:創建興趣班表

  create table interest (id int primary key auto_increment,name varchar(32) not null,hobby set('sing','dance','draw'),course char not null,price decimal(6,2),comment text)

查看數據表

  show tables;

查看已有表的字符集

  show create table 表名;

查看表結構

  desc 表名;

刪除表

  drop table 表名;

數據基本操作

插入(insert)

  insert into 表名 values(值1),(值2),...;

  insert into 表名(字段1,...) values(值1),...;

案例:insert into class_1 values (2,'Baron',10,'m',91),(3,'Jame',9,'m',90);

查詢(select)

  select * from 表名 [where 條件];

  select 字段1,字段名2 from 表名 [where 條件];

案例:select * from class_1;

案例:select name,age from class_1

where子句

  where子句在sql語句中扮演了重要角色,主要通過一定的運算條件進行數據的篩選

  MySQL 主要有以下幾種運算符:

    算術運算符
    比較運算符
    邏輯運算符
    位運算符

算數運算符

案例:select * from class_1 where age % 2 = 0;

比較運算符

案例:

  select * from class_1 where age > 8;

  select * from class_1 where between 8 and 10;

  select * from class_1 where age in (8,9);

邏輯運算符

案例:select * from class_1 where sex='m' and age>9;

位運算符

更新表記錄(update)

  update 表名 set 字段1=值1,字段2=值2,... where 條件;

案例:update class_1 set age=11 where name='Abby';

刪除表記錄(delete)

  delete from 表名 where 條件;

  注意:delete語句后如果不加where條件,所有記錄全部清空

案例:delete from class_1 where name='Abby';

表字段的操作(alter)

  語法 :alter table 表名 執行動作;

* 添加字段(add)
  alter table 表名 add 字段名 數據類型;
  alter table 表名 add 字段名 數據類型 first;
  alter table 表名 add 字段名 數據類型 after 字段名; * 刪除字段(drop) alter table 表名 drop 字段名; * 修改數據類型(modify) alter table 表名 modify 字段名 新數據類型; * 修改字段名(change) alter table 表名 change 舊字段名 新字段名 新數據類型; * 表重命名(rename) alter table 表名 rename 新表名;

案例:alter table interest add date Date after course;

表管理

代碼

創建表

create table 表名(
  字段名 數據類型,
  字段名 數據類型,
  ...
  字段名 數據類型
);

查看數據表

show tables;

查看已有表的字符集

show create table 表名;

查看表結構

desc 表名;

插入(insert into)

insert into 表名 values(值1,值2,...),(值1,值2,...);

 

insert into 表名 (字段1,...) values(值1,...);

查詢(select)

select 字段1,... from 表名 where 條件;

 

select 字段,字段2,... from 表名;(千萬別用*)

更新表記錄(update)修改

update set 字段1=值1,... where 條件;

刪除表記錄(delete)

delete from 表名 where 條件;

刪除表(drop)

drop table 表名;

表字段的操作(alter)

 

添加字段(add)  默認末尾添加

alter table 表名 add 字段名 數據類型;

           第一處添加first

alter table 表名 add 字段名 數據類型 first;

     在哪個字段名后面添加after

alter table 表名 add 字段名 數據類型 after 字段名;

刪除字段(drop)

alter table 表名 drop 字段名;

修改數據類型(modify)

alter table 表名 modify 字段名 新數據類型;

修改字段名(change)

alter table 表名 change 舊字段名 新字段名 新數據類型

(新舊字段名相同也可以修改數據類型)

表重命名(rename)

alter table 表名 rename 新表名;

 

時間類型數據

時間和日期類型:

  DATE,DATETIME和TIMESTAMP類型
  TIME類型
  年份類型YEAR

時間格式

  date :"YYYY-MM-DD"
  time :"HH:MM:SS"
  datetime :"YYYY-MM-DD HH:MM:SS"
  timestamp :"YYYY-MM-DD HH:MM:SS"
  注意
  1、datetime :不給值默認返回NULL值
  2、timestamp :不給值默認返回系統當前時間

日期時間函數

  • now() 返回服務器當前時間
  • curdate() 返回當前日期
  • curtime() 返回當前時間
  • date(date) 返回指定時間的日期
  • time(date) 返回指定時間的時間

時間操作

  • 查找操作

    select * from timelog where Date = "2018-07-02";

    select * from timelog where Date>="2018-07-01" and Date<="2018-07-31";

  • 日期時間運算

    • 語法格式

      select * from 表名 where 字段名 運算符 (時間-interval 時間間隔單位);

    • 時間間隔單位: 1 day | 2 hour | 1 minute | 2 year | 3 month

    案例:select * from timelog where shijian > (now()-interval 1 day);

高級查詢語句

模糊查詢和正則查詢

LIKE用於在where子句中進行模糊查詢,SQL LIKE 子句中使用百分號 %字符來表示任意字符。

  使用 LIKE 子句從數據表中讀取數據的通用語法:

    select field1, field2,...fieldN

    from table_name

    where field1 LIKE condition1

  案例:mysql> select * from class_1 where name like 'A%';

  mysql中對正則表達式的支持有限,只支持部分正則元字符

    select field1, field2,...fieldN   

    from table_name   

    where field1 REGEXP condition1

  案例:select * from class_1 where name regexp 'B.+';

排序

ORDER BY 子句來設定你想按哪個字段哪種方式來進行排序,再返回搜索結果。

使用 order by 子句將查詢數據排序后再返回數據:

  select field1, field2,...fieldN from table_name1 where field1
  order by field1 [ASC [DESC]]

默認情況ASC表示升序,DESC表示降序

  select * from class_1 where sex='m' order by age;

分頁

LIMIT 子句用於限制由 SELECT 語句返回的數據數量 或者 UPDATE,DELETE語句的操作數量

  帶有 LIMIT 子句的 SELECT 語句的基本語法如下:

  select column1, column2, columnN   

  from table_name   

  where field   

  limit [num]

聯合查詢

UNION 操作符用於連接兩個以上的 SELECT 語句的結果組合到一個結果集合中。多個 SELECT 語句會刪除重復的數據。

  UNION 操作符語法格式:  

  SELECT expression1, expression2, ... expression_n

  FROM tables

  [WHERE conditions]

  UNION [ALL | DISTINCT]

  SELECT expression1, expression2, ... expression_n

  FROM tables

  [WHERE conditions];

 

  expression1, expression2, ... expression_n: 要檢索的列。

  tables: 要檢索的數據表。

  WHERE conditions: 可選, 檢索條件。

  DISTINCT: 可選,刪除結果集中重復的數據。默認情況下 UNION 操作符已經刪除了重復數據,所以 DISTINCT 修飾符對結果沒啥影響。

  ALL: 可選,返回所有結果集,包含重復數據。

  要求查詢的字段必須相同

  案例:select * from class_1 where sex='m' UNION ALL select * from class_1 where age > 9;

多表查詢

多個表數據可以聯合查詢,語法格式如下

  select 字段1,字段2... from 表1,表2... [where 條件]

案例:

select class_1.name,class_1.age,class_1.sex,interest.hobby from class_1,interest where class_1.name = interest.name;

功能

代碼

模糊查詢

(like 'a%','_')

select * from 表名 where 字段名 like 'a%';

例句:select * from class_1 where name like 'A%';(查找class_1表中名字A開頭的名字)

例句:select * from class_1 where name like '__';(一個'_'代表一個字符,查找class_1表中兩個字符的名字)

正則查詢(regexp)

例句:select * from class_1 where name regexp 'B.+';(regexp正則查詢)

排序

(升序order by)

(降序order by  desc)

select * from 表名 where 條件 order by 字段名;

例句:select * from class_1 where sex='男' order by age;(查找class_1表中男性按年齡升序排序)

例句:select * from class_1 where sex='男' order by age desc;(查找class_1表中男性按年齡降序排序)

分頁(limit)

select 字段名 from 表名 where 條件 order by 字段 limit offset,num;

條件:1.當前要看第多少頁set @current=2(多少頁)   2.每頁顯示多少條數據,@pageSize=2(頁的條數)

select id,name,age,email from users limit (@current-1)*@pageSize,@pageSize;等於第二頁第二條

select id,name,age,email from users limit 2,2;

例句:select * from class_1 where sex='男' order by age desc limit 1; (查找class_1表中男性按年齡降序排列  **顯示一行**)

例句:select * from class_1 where sex='男' order by age desc limit 1; (查找class_1表中男性按年齡降序排列  **顯示兩行**)

聯合查詢

(union)

(union all)

例句:select * from student where sex='女' union select * from student where score >85;

(默認是或的意思 查找女生或85分以上的學生,默認去掉重復的數據)

例句:select * from student where sex='女' union all select * from student where score >85;

(查找女生和85分以上的學生,兩次查找無關聯,第二次會重新查找)

多表查詢

select 表名.字段1,表名.字段2,... from 表1,表2,... where 條件;

select class_1.name,class_1.age,class_1.sex,interest.hobby from class_1,interest where class_1.name=interest.name;

(查找class_1表中的姓名,年齡,性別,interest表中的愛好 姓名相同的數據)

  

數據備份

1.備份命令格式

  mysqldump -u用戶名 -p 源庫名 > ~/***.sql     (要備份的庫名  ***.sql 備份起的名 )

    --all-databases 備份所有庫
    庫名 備份單個庫
    -B 庫1 庫2 庫3 備份多個庫
    庫名 表1 表2 表3 備份指定庫的多張表

2.恢復命令格式

  mysql -uroot -p 目標庫名 < ***.sql    (目標庫名是恢復到的庫  ***.sql 備份的庫 )
  從所有庫備份中恢復某一個庫(--one-database)

    mysql -uroot -p --one-database 目標庫名 < all.sql

Python操作MySQL數據庫

pymysql安裝

  sudo pip3 install pymysql

pymysql使用流程

  1. 建立數據庫連接(db = pymysql.connect(...))
  2. 創建游標對象(c = db.cursor())
  3. 游標方法: c.execute("insert ....")
  4. 提交到數據庫 : db.commit()
  5. 關閉游標對象 :c.close()
  6. 斷開數據庫連接 :db.close()

常用函數

db = pymysql.connect(參數列表)

  host :主機地址,本地 localhost
  port :端口號,默認3306
  user :用戶名
  password :密碼
  database :庫
  charset :編碼方式,推薦使用 utf8

數據庫連接對象(db)的方法

  db.commit() 提交到數據庫執行
  db.rollback() 回滾
  cur = db.cursor() 返回游標對象,用於執行具體SQL命令
  db.close() 關閉連接

游標對象(cur)的方法

  cur.execute(sql命令,[列表]) 執行SQL命令
  cur.close() 關閉游標對象
  cur.fetchone() 獲取查詢結果集的第一條數據 (1,100001,"河北省")
  cur.fetchmany(n) 獲取n條 ((記錄1),(記錄2))
  cur.fetchall() 獲取所有記錄

 1 import pymysql
 2 
 3 # 連接數據庫
 4 db = pymysql.connect(host='localhost',
 5                      port=3306,
 6                      user='root',
 7                      passwd='123456',
 8                      database='stu',
 9                      charset='utf8')
10 
11 # 獲取游標(用於進行數據操作的對象,承載操作結果)
12 cur = db.cursor()
13 
14 # 執行sql語句
15 sql = "insert into student \
16 (name,age,gender,score) values \
17 ('Lily',14,'w',79.5);"
18 cur.execute(sql)
19 
20 db.commit() # 將寫操作提交到數據庫
21 
22 # 關閉數據庫
23 cur.close()
24 db.close()
操作數據庫基本流程
 1 import pymysql
 2 
 3 # 連接數據庫
 4 db = pymysql.connect(host='localhost',
 5                      port=3306,
 6                      user='root',
 7                      passwd='123456',
 8                      database='stu',
 9                      charset='utf8')
10 
11 # 獲取游標(用於進行數據操作的對象,承載操作結果)
12 cur = db.cursor()
13 
14 # 存儲文件
15 # with open('boy.jpg','rb') as fd:
16 #   data = fd.read()
17 #
18 # try:
19 #   sql="insert into Image values (1,'boy.jpg',%s)"
20 #   cur.execute(sql,[data])
21 #   db.commit()
22 # except Exception as e:
23 #   print(e)
24 #   db.rollback()
25 
26 # 獲取圖片
27 sql = "select * from Image \
28       where filename='boy.jpg'"
29 cur.execute(sql)
30 
31 # (1,name,xxxxx)
32 img = cur.fetchone()
33 with open(img[1],'wb') as f:
34   f.write(img[2])
35 
36 # 關閉數據庫
37 cur.close()
38 db.close()
存儲和獲取二進制文件
 1 """
 2 select語句
 3 """
 4 
 5 import pymysql
 6 
 7 # 連接數據庫
 8 db = pymysql.connect(host='localhost',
 9                      port=3306,
10                      user='root',
11                      passwd='123456',
12                      database='stu',
13                      charset='utf8')
14 
15 # 獲取游標(用於進行數據操作的對象,承載操作結果)
16 cur = db.cursor()
17 
18 # 執行sql語句
19 sql = "select * from student where gender='m'"
20 cur.execute(sql) #執行查詢后cur便會擁有查詢結果
21 
22 # 獲取一個查詢結果
23 one_row = cur.fetchone()
24 print(one_row)
25 
26 # 獲取多個查詢結果
27 many_row = cur.fetchmany(2)
28 print(many_row)
29 
30 # 獲取全部查詢結果
31 all_row = cur.fetchall()
32 print(all_row)
33 
34 # 關閉數據庫
35 cur.close()
36 db.close()
mysql數據庫讀操作演示
 1 """
 2 增刪改為寫操作
 3 """
 4 
 5 import pymysql
 6 
 7 # 連接數據庫
 8 db = pymysql.connect(host='localhost',
 9                      port=3306,
10                      user='root',
11                      passwd='123456',
12                      database='stu',
13                      charset='utf8')
14 
15 # 獲取游標(用於進行數據操作的對象,承載操作結果)
16 cur = db.cursor()
17 
18 # 執行sql語句
19 try:
20   # 插入數據
21   # name = input("name:")
22   # age = int(input('age:'))
23   # gender = input('gender:')
24   # score = float(input('score:'))
25 
26   # sql = "insert into student (name,age,gender,score) \
27   #       values ('%s',%d,'%s',%f)"%(name,age,gender,score)
28 
29   # sql = "insert into student (name,age,gender,score) \
30   #         values (%s,%s,%s,%s)"
31 
32 #   sql = "insert into interest values \
33 # (3,'Joy','draw','B',5488.0,'畫的雞蛋還行')"
34 #   cur.execute(sql,[name,age,gender,score])
35 
36   # 修改操作
37 #   sql = "update student set age=22 \
38 # where name = 'Lily'"
39 #   cur.execute(sql)
40 
41   # 刪除操作
42   sql = "delete from student where score<60"
43   cur.execute(sql)
44 
45   db.commit()  # 可以執行多個sql語句一同提交
46 except Exception as e:
47   db.rollback() # 退回到commit之前的狀態
48   print(e)
49 
50 # 關閉數據庫
51 cur.close()
52 db.close()
mysql數據庫寫操作練習

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM