MySql基礎(chǔ)知識一

MySQL 數(shù)據(jù)庫

  • 什么是數(shù)據(jù)庫织鲸?
    • 英文名:DataBase (DB)
    • 用于存儲和管理數(shù)據(jù)的倉庫恍涂。
  • 數(shù)據(jù)庫的特點(diǎn)
    • 持久化存儲數(shù)據(jù)(文件系統(tǒng)右蕊,把數(shù)據(jù)存儲在文件中)
    • 方便存儲和管理數(shù)據(jù)
    • 使用統(tǒng)一的方式操作數(shù)據(jù)庫 ---- SQL
  • 數(shù)據(jù)庫類型
數(shù)據(jù)庫類型.JPG

SQL

概念:結(jié)構(gòu)化查詢語言

作用:

  • 是一種所有關(guān)系型數(shù)據(jù)庫的查詢規(guī)范砰奕,不同的數(shù)據(jù)庫都支持。
  • 通用的數(shù)據(jù)庫操作語言燎含,可以在不同的數(shù)據(jù)庫中使用宾濒。
  • 不同的數(shù)據(jù)庫SQL語句有一些區(qū)別。

SQL語句分類:

  • Data Definition Language (DDL 數(shù)據(jù)定義語言) 如:建庫屏箍,建表绘梦。
  • Data Manipulation Language (DML 數(shù)據(jù)操縱語言) 如:對表中的記錄操作==增刪改==橘忱。
  • Data Query Language (DQL 數(shù)據(jù)查詢語言)如:對表中的記錄==查詢==操作
  • Data Control Language (DCL 數(shù)據(jù)控制語言) 如:對用戶權(quán)限的設(shè)置

MySql服務(wù)啟動與關(guān)閉

  • 手動
  • cmd --> services.msc -->點(diǎn)擊MySql啟動
  • 使用管理員打開cmd --> net start mysql 啟動
  • 使用管理員打開cmd --> net stop mysql 關(guān)閉

MySql登陸和退出

  • 登陸
mysql -uroot -p密碼;    -- 基本方式 
mysql -uroot -p
password:*****    -- 在下面輸入密碼
mysql -h'IP地址' -uroot -p密碼  -- 遠(yuǎn)程登陸
mysql --host='IP地址' --user=root --password=密碼
  • 退出
exit; -- 第一種方式退出
quit; -- 第二種方式退出

MySql 語法

  • 注釋:
    • 單行注釋 : --空格
    • 多行注釋 : /* */

DDL數(shù)據(jù)定義語言


操作數(shù)據(jù)庫:CRUD

  • C ( Create ) : 創(chuàng)建
  • R (Retrieve): 查詢
  • U (Update): 修改(更新)
  • D (Delete): 刪除

操作數(shù)據(jù)庫

  • 創(chuàng)建數(shù)據(jù)庫
CREATE DATABASE 數(shù)據(jù)庫名; -- 基本方式
CREATE DATABASE IF NOT EXISTS 數(shù)據(jù)庫名; -- 判斷數(shù)據(jù)庫是否存在卸奉,不存在則創(chuàng)建數(shù)據(jù)庫
CREATE DATABASE 數(shù)據(jù)庫名 CHARACTER SET 字集符钝诚;-- 創(chuàng)建數(shù)據(jù)庫并指定字符集
CREATE DATABASE IF NOT EXISTS DB1 CHARACTER SET UTF8;
-- 如果沒有這個數(shù)據(jù)庫,就創(chuàng)建一個指定字符集為UTF8的榄棵,數(shù)據(jù)庫名為DB1的數(shù)據(jù)庫
  • 查詢數(shù)據(jù)庫
SHOW DATABASES; -- 查詢所有數(shù)據(jù)庫的名稱
SHOW CREATE DATABASE 數(shù)據(jù)庫名稱; -- 查詢某個數(shù)據(jù)庫的字符集
  • 修改數(shù)據(jù)庫
ALTER DATABASE 數(shù)據(jù)庫名稱 CHARACTER SET 字符集名稱; -- 修改數(shù)據(jù)庫的字符集
  • 刪除數(shù)據(jù)庫
DROP DATABASE db; -- 刪除數(shù)據(jù)庫
DROP DATABASE IF EXISTS db; -- 判斷數(shù)據(jù)庫存在敲长,存在再刪除
  • 使用數(shù)據(jù)庫
USE 數(shù)據(jù)庫名稱; -- 使用數(shù)據(jù)庫
SELECT DATABASE(); -- 查詢當(dāng)前正在使用的數(shù)據(jù)庫名稱

操作表

  • 查詢表
SHOW TABLES; -- 查詢某個數(shù)據(jù)庫中所有的表名稱
DESC 表名; -- 查詢表結(jié)構(gòu)
  • 創(chuàng)建表
CREATE TABLE 表名(
   列名1 數(shù)據(jù)類型1,
   列名2 數(shù)據(jù)類型2秉继,
   列名3 數(shù)據(jù)類型3,
   ...
   列名n 數(shù)據(jù)類型n
);   
CREATE TABLE 表名 LIKE 被復(fù)制的表名泽铛; -- 復(fù)制表
  • 刪除表
DROP TABLE 表名;
DROP TABLE IF EXISTS 表名 ;
  • 修改表
ALTER TABLE 表名 RENAME TO 新表名尚辑; -- 修改表名
ALTER TABLE 表名 CHARACTER SET 字符集名稱; -- 修改表的字符集
ALTER TABLE 表名 ADD 列名 數(shù)據(jù)類型; -- 添加一列
ALTER TABLE 表名 CHANGE 列名 新列名 新數(shù)據(jù)類型盔腔; -- 修改列名稱 類型
ALTER TABLE 表名 MODIFY 列名 新數(shù)據(jù)類型; -- 只修改數(shù)據(jù)類型
ALTER TABLE 表名 DROP 列名杠茬; -- 刪除列

DML增刪改操作

  • 添加數(shù)據(jù)
INSERT INTO 表名(列名1,列名2,...列名n) VALUES(值1,值2,...值n);
  • 注意:
    • 列名和值要一一對應(yīng)。
    • 除了數(shù)字類型弛随,其他類型需要使用引號(單雙都可以)引起來瓢喉。
    • 如果表名后,不定義列名舀透,則默認(rèn)給所有列添加值栓票。
INSERT INTO 表名 VALUES(值1,值2,...值n);
  • 刪除數(shù)據(jù)
DELETE FROM 表名 [WHERE 條件]
-- 例子
DELETE FROM student WHERE id = 1; -- 刪除id為1的數(shù)據(jù)
DELETE FROM student;-- 刪除該表全部數(shù)據(jù)愕够,不推薦

TRUNCATE TABLE 表名走贪; -- 推薦使用,效率高惑芭。先刪除表坠狡,在創(chuàng)建一張一樣的表。
  • 修改數(shù)據(jù)
update 表名 set 列名1 = 值1, 列名2 = 值2,... [where 條件];
UPDATE student SET name='張無忌',score=100 WHERE id=1遂跟;
-- 注意:如果不加where逃沿,所有數(shù)據(jù)都會被修改

DQL查詢表中的記錄

  • 語法
    select
        字段列表
    from
        表名列表
    where
        條件列表
    group by
        分組字段
    having
        分組之后的條件
    order by
        排序
    limit
        分頁限定
  • 基礎(chǔ)查詢

    • 多個字段的查詢
    SELECT 字段名1,字段名2... from 表名幻锁;
    -- 例
    SELECT id,name from student;
    
    • 去除重復(fù)
    DISTINCT
    -- 例
    SELECT DISTINCT NAME FROM student;
    
    • 計算列

      • 一般可以使用四則運(yùn)算計算一些列的值凯亮。(一般只會進(jìn)行數(shù)值型的計算)
      • null參與的運(yùn)算,計算結(jié)果都為null
      • ifnull(表達(dá)式1,表達(dá)式2)
      SELECT IFNULL(score,0) FROM student; -- score中如果有數(shù)據(jù)為null越败,替換成0
      -- IFNULL(表達(dá)式1触幼,表達(dá)式2)
      -- 表達(dá)式1:哪個字段需要判斷是否為null
      -- 表達(dá)式2:如果該字段為null后的替換值
      
    • 起別名

    SELECT id AS 學(xué)號,NAME AS 名稱,age AS 年齡 FROM student;
    -- 可以省略AS
    SELECT id 學(xué)號,NAME 名稱,age 年齡 FROM student;
    
    • 條件查詢
    -- 查詢年齡大于20歲
    SELECT * FROM student WHERE age > 20;
    -- 查詢年齡等于20歲
    SELECT * FROM student WHERE age = 20;
    -- 查詢年齡大于等于20 小于等于30
    SELECT * FROM student WHERE age BETWEEN 20 AND 30;
    -- 查詢英語成績?yōu)閚ull
    SELECT * FROM student WHERE english IS NULL;
    -- 查詢姓馬的有哪些? like
    SELECT * FROM student WHERE NAME LIKE '馬%';
    -- 查詢姓名中包含德的人
    SELECT * FROM student WHERE NAME LIKE '%德%';
    
  • 排序查詢

-- 語法 :order by
-- 排序方式: ASC 升序
         -- DESC 降序
-- 注意:如果有多個排序條件究飞,則當(dāng)前邊的條件值一樣時置谦,才會判斷第二條件堂鲤。

SELECT * FROM student ORDER BY math ASC; -- 升序
SELECT * FROM student ORDER BY math DESC; -- 降序

  • 聚合函數(shù) : 將一列數(shù)據(jù)作為一個整體,進(jìn)行縱向的計算媒峡。
COUNT:-- 計算個數(shù) -- 一般選擇非空的列:主鍵
SELECT COUNT(id) FROM student; 
-- 單行單列瘟栖,計算student表中id的個數(shù),(排除NULL)
----------------------------------------------------
MAX:-- 計算最大值谅阿,不但可以作用在數(shù)值類型半哟,還可以作用在日期類型,返回最晚時間
SELECT MAX(math) FROM student;
----------------------------------------------------
MIN:-- 計算最小值签餐,不但可以作用在數(shù)值類型寓涨,還可以作用在日期類型,返回最早時間
SELECT MIN(math) FROM student;
----------------------------------------------------
SUM:-- 計算和
SELECT SUM(math) FROM student;
----------------------------------------------------
AVG:-- 計算平均值
SELECT AVG(MATH) FROM student;

注意:聚合函數(shù)的計算氯檐,排除NULL值

解決方案:

  • 選擇不包含非空的列進(jìn)行計算
  • IFNULL函數(shù)

  • 分組查詢
-- 注意:分組之后查詢的字段 --> 分組字段戒良,聚合函數(shù)
GROUP BY
----------------------------------------------------
-- 按照性別分組。分別查詢男冠摄、女同學(xué)的平均分,人數(shù)
SELECT sex , AVG(math),COUNT(id) FROM student GROUP BY sex;
----------------------------------------------------------------
-- 按照性別分組糯崎。分別查詢男、女同學(xué)的平均分,人數(shù) 要求:分?jǐn)?shù)低于70分的人河泳,不參與分組
SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex;
----------------------------------------------------------------------------
--  按照性別分組沃呢。分別查詢男、女同學(xué)的平均分,人數(shù) 要求:分?jǐn)?shù)低于70分的人拆挥,不參與分組,分組之后薄霜。人數(shù)要大于2個人
SELECT sex , AVG(math),COUNT(id) 人數(shù) FROM student WHERE math > 70 GROUP BY sex HAVING 人數(shù) > 2;
  • where 和 having 的區(qū)別?

  1. where 在分組之前進(jìn)行限定纸兔,如果不滿足條件黄锤,則不參與分組。having在分組之后進(jìn)行限定食拜,如果不滿足結(jié)果鸵熟,則不會被查詢出來
  2. where 后不可以跟聚合函數(shù),having可以進(jìn)行聚合函數(shù)的判斷负甸。

  • 分頁查詢

  • 語法:limit 開始的索引,每頁查詢的條數(shù);

  • 公式:開始的索引 = (當(dāng)前的頁碼 - 1) * 每頁顯示的條數(shù)


LIMIT num1,num2;
-- num1:開始的索引 = (當(dāng)前的頁碼 - 1) * 每頁顯示的條數(shù)
-- num2:每頁顯示條數(shù)
SELECT * FROM student LIMIT 0,3; -- 第1頁
SELECT * FROM student LIMIT 3,3; -- 第2頁
SELECT * FROM student LIMIT 6,3; -- 第3頁

查詢語句順序

SELECT -- >FROM -- >WHERE -- >GROUP BY -- >HAVING -- >ORDER BY -- >LIMIT


約束

  • 概念:對表中的數(shù)據(jù)進(jìn)行限定流强,保證數(shù)據(jù)的正確性,有效性和完整性呻待。

  • 分類:

    1. 主鍵約束:primary key

      注意:

      ① 含義:非空且唯一

      ② 一張表只能有一個字段為主鍵

      ③ 主鍵就是表中記錄的唯一標(biāo)識

    CREATE TABLE stu(
        id INT PRIMARY KEY, --  給id添加主鍵約束
        name VARCHAR(20)
    );
    ----------------------------------------------
    -- 刪除主鍵
    ALTER TABLE stu DROP PRIMARY KEY;
    ----------------------------------------------
    -- 創(chuàng)建完表后打月,添加主鍵
    ALTER TABLE stu MODIFY id INT PRIMARY KEY;
    
    • 自動增長

    概念:如果某一列是數(shù)值類型的,使用 auto_increment 可以來完成值得自動增長

    ==一般和主鍵一起用==

    注意:自動增長和表有關(guān)系蚕捉,表在自動增長在

    CREATE TABLE stu(
      id INT PRIMARY KEY AUTO_INCREMENT,-- 給id添加主鍵約束,自動增長
      name VARCHAR(20)
    );
    ---------------------------------------------------------------
    ALTER TABLE stu MODIFY id INT; -- 刪除自動增長
    ---------------------------------------------------------------
    ALTER TABLE stu MODIFY id INT AUTO_INCREMENT; -- 添加自動增長
    
  1. 非空約束:not null
CREATE TABLE stu(
    id INT,
    name varchar(20) NOT NULL
);-- 方式一奏篙,創(chuàng)建表時添加非空約束
-- ----------------------------------------------
ALTER TABLE stu MODIFY name VARCHAR(32) NOT NULL;
-- 修改列添加非空約束
  1. 唯一約束:unique
-- 某一列的值不能重復(fù)
CREATE TABLE student(
    int id,
    phone_num VARCHAT(20) UNIQUE -- 唯一的,不能重復(fù)
);
-- 注意:唯一約束可以為NULL,不過只能有一條記錄為NULL
-------------------------------------------------------
-- 刪除唯一約束                                          
ALTER TABLE stu DROP INDEX phone_number;               
-------------------------------------------------------
-- 在表創(chuàng)建完之后秘通,添加唯一約束
ALTER TABLE stu MODIFY phone_number VARCHAR(20) UNIQUE;
  1. 外鍵約束:foreign key
-- 讓表于表產(chǎn)生關(guān)系为严,從而保證數(shù)據(jù)的正確性。
-- 在創(chuàng)建表的時候肺稀,可以添加外鍵
CREATE TABLE stu(
    ...
    外鍵列constraint
    CONSTRAINT(約束) 外鍵名稱 FOREIGN KEY (外鍵列名) REFERENCES(參考) 主表名稱 主表列名稱
);  --                                    
*記憶: 約束 名為 xxx 的外鍵(外鍵列名)參考 xxx表 的 xx列
-------------------------------------------------------------------------
-- 例子
表department:
CREATE TABLE department(
   id INT PRIMARY KEY,
   NAME VARCHAR(20)
);
表employee:
CREATE TABLE employee(
   id INT PRIMARY KEY,
   NAME VARCHAR(20),
   dept_id INT,  
   CONSTRAINT id_key FOREIGN KEY (dept_id) REFERENCES department (id)
   ON UPDATE CASCADE ON DELETE CASCADE
);
  • 級聯(lián)操作 :操作有外鍵的值時第股,把相關(guān)聯(lián)的值一并修改。

    1. 添加級聯(lián)操作
    ALTER TABLE 表名 ADD CONSTRAINT 外鍵名稱 FOREIGN KEY (外鍵字段名稱) REFERENCES 主表名稱(主表列名稱) ON UPDATE CASCADE ON DELETE CASCADE ;
    -- 例子如上code
    
    • 級聯(lián)更新:ON UPDATE CASCADE
    • 級聯(lián)刪除:ON DELETE CASCADE(慎用)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末话原,一起剝皮案震驚了整個濱河市夕吻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌繁仁,老刑警劉巖涉馅,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異黄虱,居然都是意外死亡控漠,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門悬钳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人偶翅,你說我怎么就攤上這事默勾。” “怎么了聚谁?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵母剥,是天一觀的道長架诞。 經(jīng)常有香客問我感局,道長,這世上最難降的妖魔是什么呜投? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任朵耕,我火速辦了婚禮炫隶,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘阎曹。我一直安慰自己伪阶,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布处嫌。 她就那樣靜靜地躺著栅贴,像睡著了一般。 火紅的嫁衣襯著肌膚如雪熏迹。 梳的紋絲不亂的頭發(fā)上檐薯,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機(jī)與錄音注暗,去河邊找鬼坛缕。 笑死墓猎,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的祷膳。 我是一名探鬼主播陶衅,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼直晨!你這毒婦竟也來了搀军?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤勇皇,失蹤者是張志新(化名)和其女友劉穎罩句,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體敛摘,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡门烂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了兄淫。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片屯远。...
    茶點(diǎn)故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖捕虽,靈堂內(nèi)的尸體忽然破棺而出慨丐,到底是詐尸還是另有隱情,我是刑警寧澤泄私,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布房揭,位于F島的核電站,受9級特大地震影響晌端,放射性物質(zhì)發(fā)生泄漏捅暴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一咧纠、第九天 我趴在偏房一處隱蔽的房頂上張望蓬痒。 院中可真熱鬧,春花似錦漆羔、人聲如沸乳幸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽粹断。三九已至,卻和暖如春嫡霞,著一層夾襖步出監(jiān)牢的瞬間瓶埋,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留养筒,地道東北人曾撤。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像晕粪,于是被迫代替她去往敵國和親挤悉。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容