前言:mysql數據庫管理系統,由瑞典MySQL AB 公司開發,目前屬于 Oracle 旗下公司。MySQL 最流行的關MySQL是一個開源免費的關系型數據庫管系型數據庫管理系統,在 WEB 應用方面ySQL是最好的 RDBMS (Relational Database Management System,關系數據庫管理體積小且開放源代碼等優點。系統應用軟件之一,具有成本低、速度快
1?安裝

命令行中輸入Mysql -uroot -p,回車,輸入你之前設置的密碼,回車,出現Mysql的版本信息即連接成功
1.2 基本操作
;允許連接失敗的個數
max connect errors=10;
;服務端使用的字符集默認為utf8mb4
character-set-server=utf8mb4
;創建新表時將使用的默認存儲引擎
default-storage-engine-INNODB
;默認使用"mysql native_password"插件認證,mysql native _passworddefault authentication plugin=mysgl native password[mysql]
;設置mysq1網絡通信的默認字符集default-character-set=utf8mb4[client]
;設置mysq1客戶端連接服務端時默認使用的端口port=3306
;設置mysg1客戶端的默認字符集
default-character-set=utf8mb4初始化數據庫
重新打開一個cmd黑窗口,輸入以下命令,讓數據庫完成初始化操作。
mysqld --initialize--console
1.3 SQL規范
1,在數據庫管理系統中,SQL語句關鍵字不區分大小寫(但建議用大寫),參數區分大小寫。建議命令大寫,數據庫名、數據表名、字段名統一小寫,如數據庫名、數據表名、字段名與關鍵字同名,使用反引號圈起來,避免沖突。
2,SQL語句可單行或多行書寫,默認以英文分號(;)結尾,關鍵詞不能跨多行或簡寫。
3,字符串跟日期類型的值都要以 單引號括起來,單詞之間需要使用半角的空格隔開。
4,用空格和縮進來提高SQL語句的可讀性。
SELECT *FROM table_name
WHERE name="moluo";
注釋
注釋
第一種:
-- 單行注釋
第二種:/*
多行注釋*/
第三種:
# mysql支持單行注釋
常見指令
數據庫操作
--1.創建數據庫(在磁盤上創建一個對應的文件夾)
create database [if not exists] db name [character set xxx];
--2.查看數據庫
show databases;--查看所有數據庫
SHOW DATABASESLIKE'$test名';--查看名字中包含 test 的數據庫
show create database db name;-- 查看數據庫的創建方式
--3.修改數據庫
alter database db name[character set xxx]
--4.刪除數據庫
drop database[if exists]db name;
--5.使用數據庫
use db name;--切換數據庫 注意:進入到某個數據庫后沒辦法再退回之前狀態,但可以通過use進行切換select database();--查看當前使用的數據庫
數據表操作
數據表就相當于存儲數據的特殊文件,數據表中的一條記錄就相當于普通文件的一行內容。
moluo,True,18,2000,廣東,計算機科學與技術,python開發
xiaohong,False,17,2001,廣西,舞蹈學,音樂老師
與普通文件不同的是,數據表是二維的表格結構

(1)創建數據表
數據表就相當于文件,文件有文件名,自然地,數據表也要有表名。同樣道理,數據表中的一條記錄就相當于文件的一行內容。只是不同的是,數據表需要定義表頭(上圖中的首行),稱為表的字段名。而且因為數據庫的存儲數據更加科學、嚴謹,所以需要創建表時要給每一個字段設置數據類型以及字段約束(完整性約條件)。

1,上面SQL語句中,小括號中的定義字段語句后面必須以英文逗號結尾,而最后一個字段的定義語句不能有英文逗號出現否則報錯。2,在同一張數據表中,字段名是不能相同,否則報錯!
3,創建數據表的SQL語句中,存儲空間和字段約束是選填的,而字段名和數據類型則是必須填寫的。
(2)查看數據表
查看所有數據表
列出當前數據庫中所有的數據表,語法:
show tables;
查看表結構
以表格形式列出當前數據表的結構信息。語法:
-- 方式1:簡單查看
describe 表名;
desc 表名; --desc是describe的縮寫
--方式2:詳細查看
describe 表名;
desc 表名;
查看建表語句
show createtable 表名 \G;
(3)刪除數據表
刪除表結構,并把數據一并刪除,使用需謹慎,強烈建議先備份后刪除,或者直接改表名來代替刪除操作。
drop table 表名;
重置表信息
保留數據表結構,但是把數據表存儲的數據以及數據表的狀態回滾,相當于刪除原表,并新建一張一模一樣的空數據表。
TRUNCATE table 表名:
表記錄操作
【1】添加記錄
INSERT 語句有兩種語法形式,分別是INSERT...VALUES 語句和 INSERT...SET 語句

【2】查詢記錄


limit:記錄條數限制
SELECT emp limit 1
SELECT* from emp limit 2,5; --跳過前兩條顯示接下來的五條紀錄
SELECT*from emp limit 2,2
distinct:查詢去重
SELECT distinct salary from emp order by salary
【3】更新記錄
UPDATE<表名>SET字段1-值1,字段2-值2..][WHERE 子句]
【4】刪除記錄
DELETE FROM表名>[WHERE子][ORDERBY子][LIMIT子]
<表名>:指定要刪除數據的表名。
ORDER BY 子句:可選項。表示刪除時,表中各行將按照子句中指定的順序進行刪除。
WHERE 子句:可選項。表示為刪除操作限定刪除條件,若省略該子句,則代表刪除該表中的所有行。
LIMIT 子句:可選項。用于告知服務器在控制命令被返回到客戶端前被刪除行的最大值。
關聯表:一對多的表關系
一對多關系為關系數據庫中兩個表之間的一種關系,該關系中第一個表中的單個行可以與第二個表中的一個或多個行相關,但第二個表中的一個行只可以與第一個表中的一個行相關

CREATE TABLE book
id INT PRIMARY KEY AUTO INCREMENT
title VARCHAR(32)
price DOUBLE(5,2),
Pub id INT NOT NULL
ENGINE-INNODB CHARSETut8:
--出版社表
CREATE TABLE publisher(
id INT PRIMARY KEY AUTO INCREMENT
name VARCHAR(32)
emai1 VARCHAR(32)
addr VARCHAR(32)
)ENGINE=INNODB CHARSETutf8;
--插入數據
INSERT INTo book(title,price,pub id) VALUES
('西游記',15,1),
('三國演義',45,2),
('紅樓夢',66,3),
('水滸傳',21,2),
('紅與黑',67,3),
('亂世佳人',44,6),
('飄',56,1),
('放風箏的人',78,3);-- 子查詢
-- 查詢水滸傳的出版社的名稱和郵箱
select pub_id from book where title="水滸傳"
select name,email from publisher where id=2
Python操作MySQL
import pymysql
#打開數據庫連接
db = pymysql.connect(host='localhost',user='root', passwd='123456',port=3306)
print("連接成功!")
#使用 cursor()方法創建一個游標對象
cursor = db.cursor()
#使用 execute()方法執行 SQL 查詢
cursor.execute("SELECT VERSION()")
#使用 fetchone()方法獲取單條數據。
data =cursor.fetchone()
print("Database version",data)
#關閉數據庫連接
db.close()
Python操作MySQL的類版本
import pymysql
import cryptographyclass Mysql(object):# 類變量-----類空間name = "yuan"# 實例空間def __init__(self):# 打開數據庫連接self.db = pymysql.connect(host='localhost', user='root', passwd='12345', port=3306, database="mysql111")print("連接成功!")# 使用 cursor()方法創建一個游標對象self.cursor = self.db.cursor()def foo(self):# 使用 execute()方法執行 SQL 查詢self.cursor.execute("SELECT * FROM mysql111.user")# 使用 fetchone()方法獲取單條數據。data = self.cursor.fetchall()print("Database version", data)# 關閉數據庫連接self.db.close()def fuu(self):print("fuu")m = Mysql()
m.foo()