僅記錄個人學習Python所學,學識淺薄,若有錯誤歡迎指出。文章可能會不太完善,後續可能會繼續更新。
DDL【Data Definition Language】,數據定義語言,使用者建立、修改、刪除表結構
# 建立數據庫
CREATE DATABASE database_name charset='utf8';
# 這裏的charset=utf8 是設定數據庫的字元集
# UTF-8 可以接受中文,這裏不需要寫-
# CREATE TABLE 表名 (
# 欄位1 欄位型別[列級別約束條件][預設值],
# 欄位2 欄位型別[列級別約束條件][預設值],
# ….
# 欄位n 欄位型別[列級別約束條件][預設值]
# [表級別約束條件]
# );
# 語句後都要加; mysql 中預設的結束語句符號爲;
# 可以通過delimiter 空格 加想要作爲結束符的符號 ##、&...都可以,一般不會修改。
# 在輸入結束符+回車之前 回車不會執行語句 只會換行。
# 查詢當前數據庫伺服器中所有的數據庫
show databases;
# 檢視當前正在使用的數據庫
select database();
# 使用數據庫
# use 數據庫名
# 退出數據庫
# exit
# quit
# ctrl + z
alter操作
修改
# 1.修改表名
# 語法規則:ALTER TABLE old_table_name RENAME [TO] new_table_name
# 2.修改欄位的數據型別
# 語法規則:ALTER TABLE table_name MODIFY 欄位名 數據型別
# 修改完成之後可以檢視DESC table_name檢驗結果
# 3.修改欄位名
# 語法規則:ALTER TABLE table_name CHANGE 舊欄位名 新欄位名 數據型別
# 4.新增欄位
# 語法規則:ALTER TABLE table_name ADD 新欄位名 數據型別 [約束條件] [FIRST|AFTER 已經存在的欄位名]
# 5.刪除欄位
# 語法規則:ALTER TABLE table_name DROP 欄位名
# 6.修改欄位的排列位置
# 語法規則:ALTER TABLE table_name MODIFY 欄位1 數據型別 FIRST|AFTER 欄位2
# first: 設定成第一個
# after 欄位2: 在指定欄位2的後面
# 7.刪除數據表
# 刪除沒有被關聯的表
# 語法規則:DROP TABLE [IF EXISTS] 表1,表2...
# 刪除被其他表關聯的的表
# 直接刪除會出現錯誤的,操作: 先解除關聯 再進行刪除
#8.刪除表的外來鍵約束
# 語法規則:ALTER TABLE table_name DROP FOREIGN KEY 外來鍵約束名
# 刪除數據庫
# drop database database_name
# 刪除表
# drop table user;
DML【Data Manipulation Language】,數據操作語言,用於對錶數據進行增刪改的操作
以下 mysql> 並不是寫入的語句
插入:insert into
# 單行插入
# INSERT INTO table_name (field1, field2,...fieldN) VALUES(value1, value2,...valueN);
# 多行插入[批次插入]
INSERT INTO table_name (field1, field2,...fieldN)
VALUES
(value1, value2,...valueN),
(value12, value22,...valueNN)...;
注意:
a.列名和列值的型別、個數以及順序一一對應
b.可以把列名當做Python中的形參,把列值當做實參
c.值不能超出列定義的長度
d.如果插入的是空值,寫Null/null
e.插入的是日期,和字串一樣,使用引號括起來 「1988-11-22 10:11:12」
演示:
mysql> use mydb1;
Database changed
mysql> show tables;
Empty set (0.00 sec)
mysql> create table worker(
-> id int(11),
-> name varchar(20),
-> gender varchar(10),
-> salary double
-> );
Query OK, 0 rows affected (0.01 sec)
mysql> show tables; +-----------------+
| Tables_in_mydb1 |
+-----------------+
| worker |
+-----------------+
1 row in set (0.00 sec)
mysql> desc worker;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(20) | YES | | NULL | |
| gender | varchar(10) | YES | | NULL | |
| salary | double | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
# 如果給每個欄位都賦值,就可以省略掉欄位的書寫
mysql> insert into worker values(3,'rose','g',6000);
select * from worker;
+------+------+--------+--------+
| id | name | gender | salary |
+------+------+--------+--------+
| 3 | rose | g | 6000 |
+------+------+--------+--------+
# 一次性插入多條數據【批次插入】
mysql> insert into worker(id,name,gender,salary) values(4,'bob','b',1500),(5,'hello','g',5500),(6,'abc','b',6600);
mysql> select * from worker;
+------+-------+--------+--------+
| id | name | gender | salary |
+------+-------+--------+--------+
| 3 | rose | g | 6000 |
| 4 | bob | b | 1500 |
| 5 | hello | g | 5500 |
| 6 | abc | b | 6600 |
+------+-------+--------+--------+
更新:update
UPDATE table_name SET field1=new-value1, field2=new-value2 [WHERE Clause]
注意:
a.完全可以更新一個欄位或者多個欄位
b.where相當於Python中的if語句
c.可以指定任何條件到where子句中
d.如果沒有where子句,則預設所有的行都被同時更新爲指定的操作[慎用!一般要結合where使用]
# 1.將所有員工的薪水修改爲5000
mysql> update worker set salary=5000;
mysql> select * from worker;
+------+-------+--------+--------+
| id | name | gender | salary |
+------+-------+--------+--------+
| 3 | rose | g | 5000 |
| 4 | bob | b | 5000 |
| 5 | hello | g | 5000 |
| 6 | abc | b | 5000 |
+------+-------+--------+--------+
# 2.將rose的薪水在原來的基礎上增加1000
mysql> update worker set salary=salary+1000 where name='rose';
mysql> select * from worker;
+------+-------+--------+--------+
| id | name | gender | salary |
+------+-------+--------+--------+
| 3 | rose | g | 6000 |
| 4 | bob | b | 5000 |
| 5 | hello | g | 5000 |
| 6 | abc | b | 5000 |
+------+-------+--------+--------+
# 3.將abc的薪水改爲6000
update worker set salary=6000 where name='abc';
# 4.將bob的性別改爲b
update worker set gender='b' where name='bob';
刪除:delete
DELETE FROM table_name [WHERE Clause]
# 1.刪除表中abc的全部數據
mysql> delete from worker where name='abc';
# 2.刪除表中的所有數據
mysql> delete from worker;
Query OK, 5 rows affected (0.01 sec)
mysql> select * from worker;
Empty set (0.00 sec)
# 刪除表中的數據的方法有delete,truncate, 其中TRUNCATE TABLE用於刪除表中的所有行,而不記錄單個行刪除操作。TRUNCATE TABLE 與沒有 WHERE 子句的 DELETE 語句類似;但是,TRUNCATE TABLE 速度更快,使用的系統資源和事務日誌資源更少
# Truncate是一個能夠快速清空資料表內所有資料的SQL語法。並且能針對具有自動遞增值的欄位,做計數重置歸零重新計算的作用。
mysql> truncate table worker;
Query OK, 0 rows affected (0.02 sec)
注意:
a.如果where子句沒有指定,則預設將表中的數據全部刪除【慎用!】
b.可以指定任何條件在where子句中
注意:
delete:刪除表中的指定數據,表結構還在,刪除之後的數據可以找回,對自動增加的欄位無影響
truncate:清空表中的數據,刪除的數據是不能找回的,執行速度比delete快,自動增加的欄位會重新計數
drop: 刪除表,數據和表結構都刪除
DQL【Data Query Language】,數據查詢語言,用於負責表數據的查詢工作
查詢語法
SELECT 列名 FROM 表名【WHERE --> GROUP BY -->HAVING--> ORDER BY】
基礎查詢
# 1.查詢所有列
mysql> select * from student;
# 2.查詢指定列
mysql> select id,name,gender from student;
條件查詢
主要結合where的使用
between…and: 介於…和…之間
and:邏輯與
or:邏輯或
in / not in:類似於Python中的成員運算子
is / is not: 類似於Python中的身份運算子 , 常用語判斷null值, 如:name is null
# 1.查詢性別爲女,並且年齡爲20的記錄
mysql> select * from student where gender='female' and age=20;
# 2.查詢編號爲1或者姓名爲ddd的記錄
mysql> select * from student where id='1' or name='ddd';
# 3.查詢編號分別爲1,2,3的記錄
mysql> select * from student where id='1' or id='2' or id='3';
# 簡寫形式
mysql> select * from student where id in('1','2','3');
# 這裏還是用in會比較方便
# 4.查詢編號不爲1,2,3的記錄
mysql> select * from student where id not in('1','2','3');
# 5.查詢年齡爲null的記錄
mysql> select * from student where age is null;
# 6.查詢年齡在15~20之間的記錄
mysql> select * from student where age>=15 and age<=20;
# 簡寫形式
mysql> select * from student where age between 15 and 20;
# between m and n m和n是包含在查詢條件裏面的
模糊查詢
where 子句中=表示精準查詢
like:一般情況下結合where子句使用
萬用字元:
_: 匹配任意一個字元
%:匹配0~n個字元【n大於等於1】
# 1.查詢姓名由4個字元組成的記錄
mysql> select * from student where name like '____';
# 這裏是4個下劃線
# 2.查詢姓名由3個字元組成的記錄,並且最後一個字母爲c的記錄
mysql> select * from student where name like '__c';
# 3.查詢以a開頭的記錄
mysql> select * from student where name like 'a%';
# 4.查詢姓名中包含b的記錄
mysql> select * from student where name like '%b%';
# 5.查詢姓名中第2個字母爲c的記錄
mysql> select * from student where name like '_c%';
欄位查詢控制
as: 起別名,用法 :select 欄位 as 別名
distinct: 去除重複記錄
# 去除重複記錄
select distinct id from student;
# 起別名
select name as 姓名,gender as 性別 from student;
排序
order by:指定數據返回的順序
asc:ascending,升序
desc: descending,降序
用法:select from 表 order by xxx
# 1.查詢所有的記錄,按照年齡升序排序
mysql> select * from student order by age asc;
# 2.查詢所有學生記錄,按照年齡降序排序,如果年齡相等,則按照編號進行升序排序
mysql> select * from student order by age desc,id asc;
聚合函數
count():統計指定列不爲null的記錄行數
# 1.查詢年齡大於20的人數
mysql> select count(*) from student where age>20;
sum():計算指定列的數值和
#1.查詢所有學生的年齡和
mysql> select sum(age) from student;
# 2.查詢所有學生的年齡和,以及所有學生的編號和
mysql> select sum(age),sum(id) from student;
求指定列中的最大值和最小值
max():, min():
# 求最大年齡和最小年齡
mysql> select max(age),min(age) from student;
avg()
average:平均數
select avg(age) from student;
分組查詢
group by:分組查詢
having:有…,表示條件,類似於where的用法
create table emp(
empno int primary key,
enname varchar(20),
job varchar(20),
mgr int,
hiredate date,
sal double,
comm double,
deptno int
);
# 1.查詢各個部門的人數
select count(*) from emp group by deptno;
# 2.查詢每個部門的部門編號和每個部門的工資和
select deptno,sum(sal) from emp group by deptno;
# 3.查詢每個部門的部門編號和每個部門的人數
select deptno,count(*) from emp group by deptno;
# 4.查詢每個部門的部門編號和每個部門工資大於1500的人數
select deptno,count(*) from emp where sal>1500 group by deptno;
# 5.查詢工資總和大於7000的部門編號以及工資和
select deptno,sum(sal) from emp group by deptno having sum(sal)>7000;
having和where的區別
a.二者都表示對數據執行條件
b.having是在分組之後對數據進行過濾
where是在分組之前對數據進行過濾
c.having後面可以使用聚合函數
where後面不可以使用聚合函數
# 查詢工資大於1500,工資總和大於6000的部門編號和工資和
select deptno,sum(sal) from emp where sal>1500 group by deptno having sum(sal)>6000;
分頁查詢
limit:用來限定查詢的起始行,以及總行數
# 1.查詢4行記錄,起始行從0開始
select * from emp limit 0,4;
# 跳過前兩個,查詢3條記錄
select * from emp limit 2,3;
查詢語句書寫順序:select----》from—》where—》group by-----》having-----》order by----->limit
DCL【Data Control Language】:數據控制語言,用來定義存取許可權和安全級別(後續可能會補充)