MySQL- 簡單操作命令及教程
MySQL數據庫(;表示結束語句) 關系型數據庫
註釋用 //
db_name表示庫名; b_name表示表名
1.進入、退出
root用戶只能在本機連接,不可外部鏈接
進入:mysql -uroot -pqwe123 (u代表use,p代表password)
或 mysql -uroot -p
qwe123 (密碼)
退出 :exit / quit
2.庫、表級操作(官方命令的字母要大寫)
2.1 庫操作:
查看所有數據庫:
SHOW DATABASES;
創建:
CREATE DATABASE db_name;
使用:
USE db_name;
刪除:
2.2 表操作:
創建:(必須指定類型) 類型:(int/smallint 整數,char/varchar 字符串,bit 位),約束:(NOT NULL 不能為空,UNIQUE KEY 不能重復,PRIMARY KEY 非空且唯一,UNSIGNED 無符號(非負))
如:CREATE TABLE b_name(id INT UNSIGNED(表示非負數) NOT NULL AUTO_INCREMENT,
name varchar(30)(30表示最多字符長度) NOT NULL,
‘number‘ char(9)(9表示固定字符長度) NOT NULL,
phone char(11) NOT NULL,
tzaccount varchar(20) NOT NULL,
qq varchar(12),
wechat varchar(30),
‘power‘ smallint(6)(括號內最大為65535) NOT NULL,
actrecv smallint(6) NOT NULL,
PRIMARY KEY (id), (非空且唯一)(一張表只能有一個主鍵)
UNIQUE KEY (phone),
UNIQUE KEY (tzaccount),
UNIQUE KEY (qq),
UNIQUE KEY (wechat)(最後沒有逗號)
);
查看所有表:
SHOW TABLES;
查看創建表:
SHOW CREATE TABLE b_name;(;或用\G結尾)
刪除表:
DROP TABLE b_name;
3.記錄的CRUD操作:
3.1 插入數據:
INSERT INTO b_name VALUES (1, ‘Tyf‘, ...(參數必須全寫完))
INSERT INTO b_name(name, `number`, gender, phone) VALUES (‘ll‘, ‘20181105‘, b‘1‘, ‘13266666666‘) (選擇性插入)
3.2 查詢:
SELECT * FROM b_name; (查詢所有)
SELECT * FROM b_name WHERE gender=b‘1‘; (按條件查詢,如查詢gender=b‘1‘的 對象)
SELECT name,phone FROM b_name;(查詢一部分,查詢name,phone列)
3.2.1 篩選條件:
比較運算: (NULL不能作比較,可以用IS NULL 或IS NOT NULL)
等於 =
大於 >
大於等於 >=
小於 <
小於等於 <=
不等於 <> 或 != (如:WHERE gender <> 0;)
邏輯運算:
and
or
not
3.2.2 子查詢:(要求:1.必須嵌套在查詢內部,2.必須在圓括號內)
如:SELECT * FROM b_name WHERE `power`>(SELECT `power` FROM b_name WHERE name=‘Tyf‘);
3.2.3 聚合:
統計個數:
count(*) (如:SELECT count(*) FROM b_name;)
最大值:
max(column)
最小值:
min(column)
求和:
sum(column)
平均值:
avg(column)
3.2.4 分組聚合:(查詢只能包含分組列和聚合列,且單純的分組意義不大,但可以這麽做)
如:SELECT gender, max(`power`)(這裏還可以添加內容) FROM b_name GROUP BY gender;
3.2.5 聚合篩選:
如:SELECT gender, max(`power`) FROM b_name GROUP BY gender HAVING max(`power‘)>9000;(分組聚合以後才能用HAVING語句)
SELECT gender, max(`power`) FROM b_name WHERE `number`>‘1233‘ GROUP BY gender
3.2.6 限制查詢個數:
SELECT * FROM b_name LIMIT 3;(3代表查詢個數)
SELECT * FROM b_name LIMIT 3,4;(跳過三個查詢四個)
3.2.7 排序:
SELECT * FROM b_name ORDER BY `number`;(默認升序)
SELECT * FROM b_name ORDER BY `number` DESC;(降序)
3.2.8 分頁算法:(分頁用SQL座效率高,最好不要用python做)
SELECT * FROM b_name ORDER BY `number` LIMIT 3;(第一頁)
SELECT * FROM b_name ORDER BY `number` LIMIT 3,3;(第二頁)
SELECT * FROM b_name ORDER BY `number` LIMIT 2*3,3;(第三頁)
......等等以此類推
3.3 刪除:
DELETE FROM b_name WHERE 1; (全刪)
DELETE FROM b_name WHERE name=‘Tyf‘; (安條件刪除)
3.4 修改:
UPDATE b_name SET gender=b‘1‘ WHERE name=‘Tyf‘;(不加WHERE name=‘Tyf‘則表示修改所有,SET 後面改可以改多個)
註意:表中加is_delete bit(1),則數據永遠刪不掉,表示假刪除
4.註意事項:
大小寫不敏感:建議MySQL語法建議大寫
語句結束符:分號; \G 表示不同格式
強制數據類型:數據定下來以後最好別再改動,可能導致數據丟失
反引號:如果使用MySQL保留字來做名字,則使用` `括起來
5.表關系:
略(視頻 )
6.聯表:(優先聯表,默認內連接)
SELECT * FROM (b_name1 JOIN b_name2); #類似於直角坐標系交叉點(不懂補視頻)
6.1 內連接:
SELECT * FROM b_name1 JOIN b_name2 ON b_name1=b_name2; (篩選型聯表)
SELECT teachers.name AS t
SELECT * FROM departmentname, departments.name AS dname FROM teachers INNER(INNER可加可不加) JOIN departments;
6.2 左連接:
s LEFT JOIN teachers ON departments.id=teachers.department_id;(保留左邊內容)
6.3 右連接:
SELECT * FROM departments RIGHT JOIN teachers ON departments.id=teachers.department_id;(保留右邊內容)
7.外鍵約束:(作用:避免出現臟數據)
7.1 表a約束表b,a中有的b中才能插入,沒有的則不能插入:
CREATE TABLE a(ca INT, PRIMARY KEY(ca));
CREATE TABLE b(cb INT, FOREIGN KEY(cb) REFERENCES a(ca));
7.2 通過外鍵保證三大關系(一對多,多對多,一對一):
一對多:讓多的一端加上外鍵;(外鍵一定要關聯到唯一或主鍵上)
多對多:需要構建一個中間表,並為中間表分別加上兩個外鍵(分別指向兩張表);(具體補視頻)
一對一:隨便一端使用加上外鍵,再使用唯一鍵限制。
8.增加列、刪除列:
ALTER TABLE tb_name ADD COLUMN co_name co_definition [FIRST|AFTER];
ALTER TABLE tb_name DROP COLUMN co_name;
如:
ALTER TABLE b_name ADD COLUMN age int(11) DEFAULT 1;
9.重命名:
ALTER TABLE tb_name RENAME COLUMN old_name TO new_name; (*)
10.修改(只能修改列選項) :
ALTER TABLE tb_name MODIFY co_name co_definition;
11.改變(必須要同時修改名字和選項):
ALTER TABLE tb_name CHANGE old_name new_name co_definition;
12.改表名:
RENAME TABLE old_name TO new_name;
13.修改庫名(沒有的!) 折中的辦法:將當前庫裏的所有表移動到另一個庫裏,然後再刪除當前庫:
RENAME TABLE old_db.tb_name TO new_db.tb_name;
(ALTER TABLE old_tbname RENAME new_tbname;)不推薦使用,不能使用這個命令移動庫,沒有RENAME強大
14.交換表名:
RENAME TABLE one_name TO m_name, tow_name TO one_name, m_name TO tow_name;(借用中間變量修改交換表名)
15.增加主鍵、刪除主鍵:
ALTER TABLE tb_name ADD PRIMARY KEY (co);
ALTER TABLE tb_name DROP PRIMARY KEY;
16. 在mysql裏面,唯一鍵其實被叫做有唯一約束的索引,添加索引和刪除索引
ALTER TABLE tb_name ADD INDEX (co);--普通鍵
ALTER TABLE tb_name DROP INDEX idx_name; -- 也可以用來刪除唯一鍵
ALTER TABLE tb_name ADD UNIQUE KEY (co);--唯一鍵
17.添加和刪除外鍵
ALTER TABLE teachers ADD FOREIGN KEY (department_id) REFERENCES departments(id);(簡單版,默認自動添加新的外鍵名)
ALTER TABLE teachers ADD CONSTANT cs_name FOREIGN KEY (department_id) REFERENCES departments(id);(復雜版,可以自定義外建鍵名)
ALTER TABLE teachers DROP FOREIGN KEY cs_name;
18.pymysql(第三方庫):
導入:
from pymysql import connect
db_config = {
‘host‘:‘127.0.0.1‘, --默認是127.0.0.1
‘user‘:‘admin‘,
‘password‘:‘Root110qwe‘,
‘db‘:‘myku‘,
‘charset‘:‘utf8‘ --不能使用utf-8
}
連接:
conn = connect(**db_config)
操作:
try:
with conn.cursor() as cursor:
sql = "INSERT INTO myku(id,name,sex,phone) VALUES (%s, %s, %s)"
cursor.execute(sql,(3,‘tyf‘,‘boy‘,‘12354‘)) /(cursor.executemany(sql,[(,),(,),....])
res = cursor.fetchall()(只是臨時的)/conn.commit()(提交,可以修改表內的數據)
print(res)
提示-------------------------------
如果是查詢 就 cursor.fetchall()
如果是修改 就 conn.commit()
MySQL- 簡單操作命令及教程