MySQL數(shù)據(jù)庫(kù)命令
一、數(shù)據(jù)庫(kù)
1、創(chuàng)建數(shù)據(jù)庫(kù)
create database 數(shù)據(jù)庫(kù)名
2、查看數(shù)據(jù)庫(kù)
show databases; 查看所有的數(shù)據(jù)庫(kù)
show create database 數(shù)據(jù)庫(kù)名; 查看指定數(shù)據(jù)庫(kù)
3、刪除數(shù)據(jù)庫(kù)
drop database 數(shù)據(jù)庫(kù)名;
4、切換數(shù)據(jù)庫(kù)
use 數(shù)據(jù)庫(kù)名;
5、查看正在使用的數(shù)據(jù)庫(kù)
select database();
6、按指定碼表創(chuàng)建數(shù)據(jù)庫(kù)
CREATE DATABASE 數(shù)據(jù)庫(kù)名 CHARACTER SET UTF8;
二、表
1、創(chuàng)建表
create table 表名(
字段名 類(lèi)型(長(zhǎng)度) 約束,
字段名 類(lèi)型(長(zhǎng)度) 約束
);
2、創(chuàng)建一個(gè)和之前一樣但名字不一樣的表
create table 新表名 like 舊的表名;
3、查看表
show tables; 查看所有表
4、查看表結(jié)構(gòu)
desc 表名;
5、刪除表
drop table 表名;
drop table 表名 if exists; 判斷是否存在,存在則刪
6、修改表名
rename table 舊名 to 新名;
7、修改表的字符集
alter table 表名 character set 字符集;
8、向表中添加字段
alter table 表名 add 字段名 字段類(lèi)型(長(zhǎng)度);
9、修改表中字段的類(lèi)型或長(zhǎng)度
alter table 表名 modify 字段名 字段類(lèi)型(長(zhǎng)度);
10、修改字段名
alter table 表名 change 舊字段名 新字段名 類(lèi)型(長(zhǎng)度);
11、刪除字段
alter table 表名 drop 字段名;
12、查詢(xún)表詳細(xì)結(jié)構(gòu)
show create table 表名稱(chēng);
三、操作數(shù)據(jù)
1、寫(xiě)字段名的,插入全部數(shù)據(jù)
insert into 表名(字段1,字段2 ...) values(數(shù)據(jù)1,數(shù)據(jù)2 ...);
后面括號(hào)里的數(shù)據(jù)與第一個(gè)括號(hào)的字段順序要一一對(duì)應(yīng)
2、不寫(xiě)字段名的,插入全部數(shù)據(jù)(全列添加)
insert into 表名 values(數(shù)據(jù)1,數(shù)據(jù)2 ...)
括號(hào)內(nèi)按創(chuàng)建表的列順序添加數(shù)據(jù)
3、插入指定字段值
insert into 表名(字段名) values(數(shù)據(jù));
4、修改(不帶條件)
update 表名 set 字段名 = 值;
5、修改(帶條件)
update 表名 set 字段名 = 值 where 字段名 = 值;
6、刪除數(shù)據(jù)
delete from 表名; 一個(gè)個(gè)刪除表中所有數(shù)據(jù),效率慢,一般不用
truncate 表名; 直接刪除整個(gè)表,并且再創(chuàng)建一個(gè)新表
7、刪除一行數(shù)據(jù)
delete from 表名 where 條件;
四、查詢(xún)數(shù)據(jù)
1、查詢(xún)表中所有數(shù)據(jù)
select *from 表名;
2、查詢(xún)表,只顯示指定的字段
select 指定字段1,指定字段2,指定字段3... from 表名;
3、將所有的員工信息查詢(xún)出來(lái),并將列名改為中文顯示
別名查詢(xún),使用關(guān)鍵子AS (不寫(xiě)AS也可)
SELECT
eid AS '編號(hào)',
ename AS '姓名',
sex AS '性別',
salary AS '薪資',
edate AS '入職日期',
edpt AS '部門(mén)'
FROM emp;
4、查一共有幾個(gè)部門(mén)(指定字段名)(去重查詢(xún))
select distinct 字段名 from 表名;
5、查詢(xún)所有的員工的工資+1000進(jìn)行顯示
select ename,salsy+1000 from emp;
6、查詢(xún)含有“八”的所有員工信息
SELECT *FROM emp WHERE ename LIKE "%八%";
7、查詢(xún)“沙”開(kāi)頭的所有員工信息
SELECT *FROM emp WHERE ename LIKE "沙%";
8、查詢(xún)第三個(gè)字為“馬”的所有員工信息
SELECT *FROM emp WHERE ename LIKE "__馬%";
9、查詢(xún)沒(méi)有部門(mén)的員工信息
SELECT *FROM emp WHERE edpt IS NULL;
10、查詢(xún)有部門(mén)的員工信息
SELECT *FROM emp WHERE edpt IS NOT NULL;
11、查詢(xún)名字為孫悟空的員工信息
SELECT *FROM emp WHERE ename = '孫悟空';
12、查詢(xún)薪資大于500的員工信息
SELECT *FROM emp WHERE salary > 500;
13、查詢(xún)薪資不是5000的員工信息
SELECT *FROM emp WHERE salary != 5000;
SELECT *FROM emp WHERE salary <> 5000;
14、查詢(xún)工資在200到500之間的
SELECT *FROM emp WHERE salary>=200 AND salary <= 500;
SELECT *FROM emp WHERE salary BETWEEN 200 AND 500;
15、指定的參數(shù) not
SELECT *FROM emp WHERE salary NOT IN(200,300);
16、去重查詢(xún)的命令
select distinct 字段1,字段2,… from 表名;
17、limit關(guān)鍵字(分頁(yè)查詢(xún))
方言mysql
格式:
select 字段 from 表名 limit offset,length
offset :從哪開(kāi)始 默認(rèn)是0
length :要查詢(xún)的條數(shù)
如需查詢(xún)3條數(shù)據(jù),需寫(xiě)三條語(yǔ)句,一個(gè)語(yǔ)句分一頁(yè)
分頁(yè)查詢(xún),每次顯示2條數(shù)據(jù)
起始索引= (當(dāng)前頁(yè)-1) * 每頁(yè)的條數(shù)
五、單表操作
5-1 排序
1、通過(guò)一個(gè)字段升序排序
select *from 表名 order by 字段名;
2、通過(guò)一個(gè)字段降序排序
select *from 表名 order by 字段名 desc;
3、如果薪資一樣,按編號(hào)排
select *from 表名 order by 薪資 desc , 編號(hào) desc;
5-2 聚合
格式:
select 聚合函數(shù)(字段名) from 表名
聚合函數(shù):
sum、max、min、avg
如求平均值
select AVG(字段名) from 表名;
5-3 分組
1、格式
SELECT * FROM emp GROUP BY 字段 [having 條件]
只能顯示集合中的第一條數(shù)據(jù),因此單純的使用分組查詢(xún)是沒(méi)有實(shí)際意義的
所以,經(jīng)常使用聚合函數(shù)和分組結(jié)合使用
2、通過(guò)性別進(jìn)行分組,求每組的平均薪資
select 性別 ,avg(薪資) from 表名 group by 性別;
3、查看所有的部門(mén)信息
select 部門(mén) from 表名;
4、查詢(xún)每個(gè)部門(mén)的平均薪資
select
部門(mén),
avg(薪資)
from 表名 group by 部門(mén);
5、查詢(xún)每個(gè)部門(mén)的平均薪資,部門(mén)名稱(chēng)不能為null
select
部門(mén),
avg(薪資)
from 表名 where 部門(mén) is not null group by 部門(mén);
6、查詢(xún)平均薪資大于600的部門(mén)
select
部門(mén),
avg(薪資)
from 表名 group by 部門(mén) having avg(薪資) >600;
7、結(jié)論:
where : 分組前的過(guò)濾,進(jìn)行條件判斷,后面不能跟聚合函數(shù)
having : 分組后的過(guò)濾,進(jìn)行條件判斷,后面可以跟聚合函數(shù)
5-4 主鍵
1、第一種設(shè)置主鍵
在創(chuàng)建表的時(shí)候就設(shè)置
create table 表名(
sid int primary key,
sname varchar(10)
);
2、第二種設(shè)置主鍵
在創(chuàng)建表的最后一行設(shè)置主鍵
create table 表名(
sid int,
sname varchar(10),
primary key(sid)
);
3、第三種設(shè)置主鍵
在創(chuàng)建表之后再設(shè)置主鍵
通過(guò)向表添加字段的方式添加
create table 表名(
sid int,
sname varchar(10)
);
alter table 表名 add primary key(sid);
4、刪除主鍵
alter table 表名 drop primary key;
5、主鍵特點(diǎn):
不可重復(fù)、唯一、非空
6、
針對(duì)業(yè)務(wù)去設(shè)計(jì)主鍵,每張表都要設(shè)計(jì)一個(gè)主鍵id
主鍵沒(méi)有實(shí)際的含義,給數(shù)據(jù)庫(kù)和程序使用的,跟客戶無(wú)關(guān)
主鍵沒(méi)有意義沒(méi)關(guān)系,只要保證不重復(fù)、非空就可以了
7、主鍵設(shè)置初始值自增(也是設(shè)置主鍵的時(shí)候的默認(rèn)寫(xiě)法)
create table 表名(
sid int primary key auto_increment,
sname varchar(10)
);
8、設(shè)置主鍵從100開(kāi)始自增
CREATE TABLE 表名(
sid INT PRIMARY KEY AUTO_INCREMENT,
sname VARCHAR(10)
)AUTO_INCREMENT=100;
9、刪除操作對(duì)主鍵的影響
delete : 對(duì)自增沒(méi)有影響
truncate :恢復(fù)自增初始化,從1開(kāi)始自增
5-5 唯一約束
1、格式
字段名 字段類(lèi)型 unique;
5-6 非空約束
1、含義
設(shè)置的字段不能為空
2、格式
字段名 字段類(lèi)型 not bull;
5-7 事物
1、什么是事物
是由一條或者多條sql語(yǔ)句組成
要么全部成功,要么全部失?。▓?zhí)行回滾)
2、回滾
在事務(wù)運(yùn)行的過(guò)程中發(fā)生了某個(gè)故障,事務(wù)便不再繼續(xù)執(zhí)行下去,
系統(tǒng)對(duì)事物中數(shù)據(jù)所有已完成的操作全部撤銷(xiāo),滾回到開(kāi)始時(shí)的狀態(tài)
3、轉(zhuǎn)錢(qián)案例
先初始化一個(gè)表:
CREATE TABLE zh(
id int primary key auto_increment,
sname VARCHAR(20),
money DOUBLE
);
INSERT INTO zh VALUES(NULL,'小明',1000);
INSERT INTO zh VALUES(NULL,'小王',1000);
開(kāi)啟事務(wù):
start transaction;
轉(zhuǎn)錢(qián)操作:
UPDATE zh SET money = money - 500 WHERE id = 1;
(系統(tǒng)崩了)
UPDATE zh SET money = money + 500 WHERE id = 2;
回滾:
ROLLBACK;
提交:
commit;
4、查看當(dāng)前的提交方式
show variables like 'autocommit';
on :自動(dòng)提交
off :手動(dòng)提交
5、取消自動(dòng)提交
SET @@autocommit = off;
5-8 事務(wù)四大特性
特性 | 含義 |
---|---|
原子性 | 每個(gè)事務(wù)都是一個(gè)整體,不可再拆分。事務(wù)中所有的sql要么全部執(zhí)行成功,要么都失敗 |
一致性 | 事務(wù)在執(zhí)行前數(shù)據(jù)庫(kù)的狀態(tài)與執(zhí)行后數(shù)據(jù)庫(kù)的狀態(tài)保持一致; |
隔離性 | 事務(wù)和事務(wù)之間不應(yīng)該相互影響,執(zhí)行時(shí)保持隔離狀態(tài) |
持久性 | 一旦事務(wù)執(zhí)行成功,對(duì)數(shù)據(jù)庫(kù)修改是永久的。就算你關(guān)機(jī),數(shù)據(jù)也會(huì)保存下來(lái) |
5-9 MySQL的隔離級(jí)別
1、數(shù)據(jù)的并發(fā)訪問(wèn)
一個(gè)數(shù)據(jù)庫(kù)可能有多個(gè)客戶端在訪問(wèn),這些客戶端都可以并發(fā)方式訪問(wèn)數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)的相同數(shù)據(jù)可能被多個(gè)事務(wù)同時(shí)訪問(wèn),如果我們不對(duì)其采用隔離,就會(huì)發(fā)生各種問(wèn)題,破壞數(shù)據(jù)的完整性
2、
并發(fā)訪問(wèn)引發(fā)的問(wèn)題 | 含義 |
---|---|
臟讀 | 一個(gè)事務(wù)讀取到了另一個(gè)事務(wù)的尚未提交的數(shù)據(jù) |
不可重復(fù)讀 | 一個(gè)事務(wù)中兩次讀取的數(shù)據(jù)內(nèi)容不一致 |
幻讀 | 一個(gè)事務(wù)中,某一次的select操作結(jié)果所表現(xiàn)得數(shù)據(jù)狀態(tài),無(wú)法支撐后續(xù)的因?yàn)檎`操作,查詢(xún)到的數(shù)據(jù)不準(zhǔn)確,導(dǎo)致幻讀 |
3、四種隔離級(jí)別
級(jí)別 | 名字 | 隔離級(jí)別 | 臟讀 | 不可重復(fù)讀 | 幻讀 |
---|---|---|---|---|---|
1 | 讀未提交 | read uncommitted | 不能 | 不能 | 不能 |
2 | 讀已提交 | read committed | 能 | 不能 | 不能 |
3 | 可重復(fù)讀 | repeatable read | 能 | 能 | 不能 |
4 | 串行化 | serializable | 能 | 能 | 能 |
4、查看隔離級(jí)別文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-431882.html
select @@transaction_isolation;
5、設(shè)置隔離級(jí)別文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-431882.html
set global transaction isolation level 四大隔離級(jí)別之一;
六、多表操作
6-1 外鍵約束
外鍵約束是指從表和主表的主鍵對(duì)應(yīng)的那個(gè)字段(在從表中)
主從關(guān)系:
主表:主鍵id所在的表,約束別人的表
從表:外鍵所在的表,被約束的表
添加外鍵約束:
對(duì)已有表添加:
alter table 從表 add[兩張表關(guān)系描述] foreign key(外鍵id) references 主表(主鍵id);
在創(chuàng)建表的時(shí)候添加:
在表的最后一行加一句:
foreign key(外鍵id) references 主表(主鍵id);
刪除外鍵:
alter table 從表 drop foreign key 外鍵約束名稱(chēng);
6-2 級(jí)聯(lián)刪除
含義:實(shí)現(xiàn)在刪除主表數(shù)據(jù)的時(shí)候,把從表的數(shù)據(jù)也刪除掉
實(shí)現(xiàn):
在建表的添加外鍵的時(shí)候,添加一句:
on delete cascade;
6-3 多表設(shè)計(jì)
關(guān)系 | 說(shuō)明 |
---|---|
一對(duì)一 | 身份證: person 身份證 主從關(guān)系無(wú)所謂 |
一對(duì)多 | 部門(mén) : 一個(gè)部門(mén) 多個(gè)員工 字段多的(數(shù)據(jù)多了)當(dāng)從表 字段少的主表 |
多對(duì)多 | 課程 :中間表當(dāng)主表 其他多表是從表 |
6-4多表查詢(xún)
笛卡爾積:
兩個(gè)集合內(nèi)所有元素都各自相乘,
可以通過(guò)加where語(yǔ)句用外鍵消除
內(nèi)連接查詢(xún):
隱式內(nèi)連接;
顯式內(nèi)連接
概述:通過(guò)指定的條件去匹配兩張表,匹配成功就顯示,匹配失敗就不顯示
如何匹配: 從表的外鍵 = 主表的主鍵
隱式內(nèi)連接:
from后面直接寫(xiě)多個(gè)表名,并且使用where連接條件
where條件進(jìn)行無(wú)用數(shù)據(jù)的過(guò)濾
格式:
select 字段 from 左表,右表 where 連接條件;
顯式內(nèi)連接:
格式:
select 字段 from 左表[inner] join 右表 on 過(guò)濾條件;
外連接查詢(xún):
左外連接;
右外連接
左外連接:
以左表為基準(zhǔn),匹配右表中的數(shù)據(jù),如果匹配成功就顯示
如果匹配不到,左表中的數(shù)據(jù)正常顯示
格式:
select 字段名 from 左表 left[outer] join 右表 on 過(guò)濾條件;
右外連接:
以右表為基準(zhǔn),匹配左右表中的數(shù)據(jù),如果匹配成功就顯示
如果匹配不到,右表中的數(shù)據(jù)正常顯示
格式:
select 字段名 from 右表 left[outer] join 左表 on 過(guò)濾條件;
子查詢(xún):
一條select查詢(xún)語(yǔ)句的結(jié)果,作為另外一條select語(yǔ)句的一部分
特點(diǎn):
子查詢(xún)必須在小括號(hào)中
子查詢(xún)一般作為父查詢(xún)的條件去使用
分類(lèi):
where型子查詢(xún)
from型子查詢(xún)
exists型子查詢(xún)
where型子查詢(xún):
將子查詢(xún)的結(jié)果,作為父查詢(xún)的比較條件
select 字段名稱(chēng) from 表名 where 字段 = (子查詢(xún))
from型子查詢(xún):
將子查詢(xún)的結(jié)果,作為一張表,提供給父層查詢(xún)使用
select 字段名稱(chēng) from 表名 (子查詢(xún)) 別名 where 條件
exists型子查詢(xún):
子查詢(xún)的結(jié)果是單列多行的,類(lèi)似于一個(gè)數(shù)組,給父層使用
select 字段名稱(chēng) from 表名 別名 where 字段 in (子查詢(xún))
總結(jié):
子查詢(xún)?nèi)绻樵?xún)出的是一個(gè)字段(單列),那就再where后面作為條件使用
子查詢(xún)?nèi)绻樵?xún)出的是一個(gè)表(多列),就當(dāng)一張表去操作(起別名)
到了這里,關(guān)于MySQL數(shù)據(jù)庫(kù)命令的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!