日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL学习笔记04【数据库的查询操作、今日内容、表的约束】

發(fā)布時間:2024/9/30 数据库 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL学习笔记04【数据库的查询操作、今日内容、表的约束】 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
  • MySQL 文檔-黑馬程序員(騰訊微云):https://share.weiyun.com/RaCdIwas
  • 1-MySQL基礎.pdf、2-MySQL約束與設計.pdf、3-MySQL多表查詢與事務的操作.pdf
  • MySQL學習筆記01【數(shù)據(jù)庫概念、MySQL安裝與使用】【day01】
  • MySQL學習筆記02【SQL基本概念與通用語法、數(shù)據(jù)庫的CRUD操作】【day01】
  • MySQL學習筆記03【數(shù)據(jù)庫表的CRUD操作、數(shù)據(jù)庫表中記錄的基本操作、客戶端圖形化界面工具SQLyog】【day01】

  • MySQL學習筆記04【數(shù)據(jù)庫的查詢操作、表的約束】【day01、day02】

  • MySQL學習筆記05【多表操作、三大范式、數(shù)據(jù)庫的備份和還原】【day02】

  • MySQL學習筆記06【多表查詢、子查詢、多表查詢練習】【day03】

  • MySQL學習筆記07【事務、用戶管理和權(quán)限管理】【day03】

  • 目錄

    數(shù)據(jù)庫 終端 操作 報錯

    07 數(shù)據(jù)庫的查詢操作

    DQL_基礎查詢

    去除重復結(jié)果集

    計算分數(shù)之和

    起別名

    DQL_條件查詢

    DQL_基礎查詢_模糊查詢

    今日內(nèi)容

    DQL_排序查詢

    DQL_聚合函數(shù)

    DQL_分組查詢

    DQL_分頁查詢

    08 表的約束

    約束_概述

    約束_非空約束

    約束_唯一約束

    約束_主鍵約束

    約束_主鍵約束_自動增長

    約束_外鍵約束

    外鍵約束——缺陷舉例

    外鍵約束 相關概念

    約束_外鍵約束_級聯(lián)操作

    級聯(lián)更新

    級聯(lián)刪除


    數(shù)據(jù)庫 終端 操作 報錯

    報錯的命令:ERROR 1366 (HY000): Incorrect string value: '\xC3\xFB\xD7\xD6' for column 'n

    解決方法(原文鏈接):https://blog.csdn.net/u013317172/article/details/82778785

    很多人在安裝完Mysql數(shù)據(jù)庫,往表里面插入中文數(shù)據(jù)的時候就會出現(xiàn)這個錯誤。
    ERROR 1366 (HY000): Incorrect string value: ‘\xD5\xC5\xD0\xA1\xC3\xF7’ for column ‘NAME’ at row 1

    解決方案:

    1.先找到Mysql數(shù)據(jù)庫安裝路徑,如下圖:

    2.找到這個文件夾里面的 my.ini 文件,在里面找到 “default-character-set=utf8”,把uft8修改成gbk。

    重新登陸到mysql數(shù)據(jù)庫就可以添加中文數(shù)據(jù)了。

    07 數(shù)據(jù)庫的查詢操作

    DQL_基礎查詢

    1. 多個字段的查詢

    • select 字段名1,字段名2... from 表名;
    • 注意:如果查詢所有字段,則可以使用*來替代字段列表。

    2. 去除重復:

    • distinct

    3. 計算列

    • 一般可以使用四則運算計算一些列的值(一般只會進行數(shù)值型的計算)。
    • ifnull(表達式1,表達式2):null參與的運算,計算結(jié)果都為null。
      • 表達式1:哪個字段需要判斷是否為null
      • 如果該字段為null后的替換值。

    4. 起別名:

    • as:as可以省略。
    CREATE TABLE student (id INT,-- 編號NAME VARCHAR (20),-- 姓名age INT,-- 年齡sex VARCHAR (5),-- 性別address VARCHAR (100),-- 地址math INT,-- 數(shù)學english INT-- 英語 ) ;INSERT INTO student(id,NAME,age,sex,address,math,english) VALUES (1,'馬云',55,'男','杭州',66,78), (2,'馬化騰',45,'女','深圳',98,87), (3,'馬景濤',55,'男','香港',56,77), (4,'柳巖',20,'女','湖南',76,65), (5,'柳青',20,'男','湖南',86,NULL), (6,'劉德華',57,'男','香港',99,99), (7,'馬德',22,'女','香港',99,99), (8,'德瑪西亞',18,'男','南京',56,65);SELECT * FROM student;

    ???

    去除重復結(jié)果集

    計算分數(shù)之和

    起別名

    DQL_條件查詢

    1. where子句后跟條件

    2. 運算符

    • > 、< 、<= 、>= 、= 、<>
    • BETWEEN...AND ?
    • IN( 集合)?
    • LIKE:模糊查詢
      • 占位符:
        • _:單個任意字符
        • %:多個任意字符
    • IS NULL ?
    • and ?或 &&
    • or ?或 ||?
    • not ?或 !
    -- 查詢年齡大于20歲 SELECT * FROMstudent WHERE age > 20 ; SELECT * FROM student WHERE age >= 20;-- 查詢年齡等于20歲 SELECT * FROM student WHERE age = 20;-- 查詢年齡不等于20歲 SELECT * FROM student WHERE age != 20; SELECT * FROM student WHERE age <> 20;-- 查詢年齡大于等于20 小于等于30 SELECT * FROM student WHERE age >= 20 && age <=30; SELECT * FROM student WHERE age >= 20 AND age <=30; SELECT * FROM student WHERE age BETWEEN 20 AND 30; -- 閉區(qū)間[20, 30]-- 查詢年齡22歲,18歲,25歲的信息 SELECT * FROM student WHERE age = 22 OR age = 18 OR age = 25 SELECT * FROM student WHERE age IN (22,18,25);-- 查詢英語成績?yōu)閚ull SELECT * FROM student WHERE english = NULL; -- 錯誤!null值不能使用 = (!=) 判斷SELECT * FROM student WHERE english IS NULL;-- 查詢英語成績不為null SELECT * FROM student WHERE english IS NOT NULL;

    DQL_基礎查詢_模糊查詢

    LIKE:模糊查詢

    • 占位符:
      • _:單個任意字符
      • %:多個任意字符
    -- 查詢姓馬的有哪些? like SELECT * FROMstudent WHERE NAME LIKE '馬%' ;-- 查詢姓名第二個字是化的人 SELECT * FROM student WHERE NAME LIKE "_化%";-- 查詢姓名是3個字的人 SELECT * FROM student WHERE NAME LIKE '___';-- 查詢姓名中包含德的人 SELECT * FROM student WHERE NAME LIKE '%德%';

    今日內(nèi)容

  • DQL:查詢語句
  • 排序查詢
  • 聚合函數(shù)
  • 分組查詢
  • 分頁查詢
  • 約束
  • 多表之間的關系
  • 范式
  • 數(shù)據(jù)庫的備份和還原
  • DQL_排序查詢

    1. 排序查詢

    • 語法:order by 子句
      • order by 排序字段1 排序方式1 , ?排序字段2 排序方式2...
    • 排序方式:
      • ASC:升序(默認)。
      • DESC:降序。
    • 注意:
      • 如果有多個排序條件,則當前邊的條件值一樣時,才會判斷第二條件。

    DQL_聚合函數(shù)

    2. 聚合函數(shù):將一列數(shù)據(jù)作為一個整體,進行縱向的計算。

  • count:計算個數(shù)
  • 一般選擇非空的列:主鍵
  • count(*)
  • max:計算最大值
  • min:計算最小值
  • sum:計算和
  • avg:計算平均值
  • 注意:聚合函數(shù)的計算,排除null值。

    解決方案:1、選擇不包含非空的列進行計算;2、IFNULL函數(shù)。

    ??

    DQL_分組查詢

    3. 分組查詢:

  • 語法:group by 分組字段;
  • 注意:
  • 分組之后查詢的字段:分組字段、聚合函數(shù)
  • where 和 having 的區(qū)別?
  • where 在分組之前進行限定,如果不滿足條件,則不參與分組。having在分組之后進行限定,如果不滿足結(jié)果,則不會被查詢出來
  • where 后不可以跟聚合函數(shù),having可以進行聚合函數(shù)的判斷。
  • -- 按照性別分組。分別查詢男、女同學的平均分 SELECT sex , AVG(math) FROM student GROUP BY sex;-- 按照性別分組。分別查詢男、女同學的平均分,人數(shù) SELECT sex , AVG(math), COUNT(id) FROM student GROUP BY sex;-- 按照性別分組。分別查詢男、女同學的平均分,人數(shù) 要求:分數(shù)低于70分的人,不參與分組 SELECT sex , AVG(math), COUNT(id) FROM student WHERE math > 70 GROUP BY sex;-- 按照性別分組。分別查詢男、女同學的平均分,人數(shù) 要求:分數(shù)低于70分的人,不參與分組,分組之后。人數(shù)要大于2個人 SELECT sex , AVG(math), COUNT(id) FROM student WHERE math > 70 GROUP BY sex HAVING COUNT(id) > 2; SELECT sex , AVG(math), COUNT(id) 人數(shù) FROM student WHERE math > 70 GROUP BY sex HAVING 人數(shù) > 2;

    DQL_分頁查詢

    4. 分頁查詢

  • 語法:limit 開始的索引,每頁查詢的條數(shù);
  • 公式:開始的索引 = (當前的頁碼 - 1) * 每頁顯示的條數(shù)
  • 每頁顯示3條記錄?
  • SELECT * FROM student LIMIT 0,3; -- 第1頁:從0開始查,查3條記錄
  • SELECT * FROM student LIMIT 3,3; -- 第2頁:從3開始查,查3條記錄
  • SELECT * FROM student LIMIT 6,3; -- 第3頁:
  • limit 是一個MySQL"方言"
  • 08 表的約束

    約束_概述

    概念:對表中的數(shù)據(jù)進行限定,保證數(shù)據(jù)的正確性、有效性和完整性。?? ?

    分類:

  • 主鍵約束:primary key
  • 非空約束:not null
  • 唯一約束:unique
  • 外鍵約束:foreign key
  • 約束_非空約束

    非空約束:not null,值不能為nul

    ?? ?1. 創(chuàng)建表時,添加約束
    ?? ??? ?CREATE TABLE stu(
    ?? ??? ??? ?id INT,
    ?? ??? ??? ?NAME VARCHAR(20) NOT NULL -- name為非空
    ?? ??? ?);
    ?? ?2. 創(chuàng)建表后,再添加非空約束:ALTER TABLE stu MODIFY NAME VARCHAR(20) NOT NULL;

    ?? ?3. 刪除name的非空約束:ALTER TABLE stu MODIFY NAME VARCHAR(20);

    ??

    約束_唯一約束

    唯一約束:unique,值不能重復。

    ? ? 1. 創(chuàng)建表時,添加唯一約束
    ?? ??? ?CREATE TABLE stu(
    ?? ??? ??? ?id INT,
    ?? ??? ??? ?phone_number VARCHAR(20) UNIQUE -- 添加了唯一約束
    ?? ??? ?);
    ?? ??? ?* 注意mysql中,唯一約束限定的列的值可以有多個null。

    ?? ?2. 刪除唯一約束:ALTER TABLE stu DROP INDEX phone_number;

    ? ? 3. 在創(chuàng)建表后,添加唯一約束:ALTER TABLE stu MODIFY phone_number VARCHAR(20) UNIQUE;

    約束_主鍵約束

    主鍵約束:primary key

    ?? ?1. 注意:
    ?? ??? ?1. 含義:非空且唯一
    ?? ??? ?2. 一張表只能有一個字段為主鍵
    ?? ??? ?3. 主鍵就是表中記錄的唯一標識

    ?? ?2. 在創(chuàng)建表時,添加主鍵約束
    ?? ??? ?create table stu(
    ?? ??? ??? ?id int primary key,-- 給id添加主鍵約束
    ?? ??? ??? ?name varchar(20)
    ?? ??? ?);

    ?? ?3. 刪除主鍵
    ?? ??? ?-- 錯誤 alter table stu modify id int ;
    ?? ??? ?ALTER TABLE stu DROP PRIMARY KEY;

    ?? ?4. 創(chuàng)建完表后,添加主鍵
    ?? ??? ?ALTER TABLE stu MODIFY id INT PRIMARY KEY;

    約束_主鍵約束_自動增長

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

    ?? ??? ?2. 在創(chuàng)建表時,添加主鍵約束,并且完成主鍵自增長
    ?? ??? ?create table stu(
    ?? ??? ??? ?id int primary key auto_increment,-- 給id添加主鍵約束
    ?? ??? ??? ?name varchar(20)
    ?? ??? ?);

    ?? ??? ?3. 刪除自動增長:ALTER TABLE stu MODIFY id INT;

    ? ? ? ? 4. 添加自動增長:ALTER TABLE stu MODIFY id INT AUTO_INCREMENT;

    約束_外鍵約束

    外鍵約束——缺陷舉例

    CREATE TABLE emp ( -- 創(chuàng)建employe表id INT PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(30),age INT,dep_name VARCHAR(30), -- 部門名稱dep_location VARCHAR(30) -- 部門地址 );-- 添加數(shù)據(jù) INSERT INTO emp (NAME, age, dep_name, dep_location) VALUES ('張三', 20, '研發(fā)部', '廣州'); INSERT INTO emp (NAME, age, dep_name, dep_location) VALUES ('李四', 21, '研發(fā)部', '廣州'); INSERT INTO emp (NAME, age, dep_name, dep_location) VALUES ('王五', 20, '研發(fā)部', '廣州'); INSERT INTO emp (NAME, age, dep_name, dep_location) VALUES ('老王', 20, '銷售部', '深圳'); INSERT INTO emp (NAME, age, dep_name, dep_location) VALUES ('大王', 22, '銷售部', '深圳'); INSERT INTO emp (NAME, age, dep_name, dep_location) VALUES ('小王', 18, '銷售部', '深圳');

    -- 解決方案:分成 2 張表-- 創(chuàng)建部門表(id,dep_name,dep_location) -- 一方,主表 CREATE TABLE department(id INT PRIMARY KEY AUTO_INCREMENT,dep_name VARCHAR(20),dep_location VARCHAR(20) );-- 創(chuàng)建員工表(id,name,age,dep_id) -- 多方,從表 CREATE TABLE employee(id INT PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(20),age INT,dep_id INT -- 外鍵對應主表的主鍵 );-- 添加 2 個部門 INSERT INTO department VALUES(NULL, '研發(fā)部','廣州'),(NULL, '銷售部', '深圳'); SELECT * FROM department;-- 添加員工,dep_id 表示員工所在的部門 INSERT INTO employee (NAME, age, dep_id) VALUES ('張三', 20, 1); INSERT INTO employee (NAME, age, dep_id) VALUES ('李四', 21, 1); INSERT INTO employee (NAME, age, dep_id) VALUES ('王五', 20, 1); INSERT INTO employee (NAME, age, dep_id) VALUES ('老王', 20, 2); INSERT INTO employee (NAME, age, dep_id) VALUES ('大王', 22, 2); INSERT INTO employee (NAME, age, dep_id) VALUES ('小王', 18, 2);SELECT * FROM employee; SELECT * FROM department;

    外鍵約束 相關概念

    * 外鍵約束:foreign key,讓表與表產(chǎn)生關系,從而保證數(shù)據(jù)的正確性。

    ? ? 1. 在創(chuàng)建表時,可以添加外鍵
    ?? ??? ?* 語法:
    ?? ??? ??? ?create table 表名(
    ?? ??? ??? ??? ?....
    ?? ??? ??? ??? ?外鍵列
    ?? ??? ??? ??? ?constraint 外鍵名稱 foreign key (外鍵列名稱) references 主表名稱(主表列名稱)
    ?? ??? ??? ?);

    ?? ?2. 刪除外鍵
    ?? ??? ?ALTER TABLE 表名 DROP FOREIGN KEY 外鍵名稱;

    ?? ?3. 創(chuàng)建表之后,添加外鍵
    ?? ??? ?ALTER TABLE 表名 ADD CONSTRAINT 外鍵名稱 FOREIGN KEY (外鍵字段名稱) REFERENCES 主表名稱(主表列名稱); // 主鍵列、唯一約束列

    CREATE TABLE employee(
    ?? ?id INT PRIMARY KEY AUTO_INCREMENT,
    ?? ?NAME VARCHAR(20),
    ?? ?age INT,
    ?? ?dep_id INT, -- 外鍵對應主表的主鍵
    ?? ?CONSTRAINT emp_dept_fk FOREIGN KEY (dep_id) REFERENCES department(id) -- 外鍵約束
    );

    ?

    約束_外鍵約束_級聯(lián)操作

    4. 級聯(lián)操作
    ?? ?1. 添加級聯(lián)操作
    ?? ??? ?語法:ALTER TABLE 表名 ADD CONSTRAINT 外鍵名稱?
    ?? ??? ??? ??? ??? ?FOREIGN KEY (外鍵字段名稱) REFERENCES 主表名稱(主表列名稱) ON UPDATE CASCADE ON DELETE CASCADE ?;
    ?? ?2. 分類:
    ?? ??? ?1. 級聯(lián)更新:ON UPDATE CASCADE?
    ?? ??? ?2. 級聯(lián)刪除:ON DELETE CASCADE?

    級聯(lián)更新

    級聯(lián)刪除

    開春,開的是什么?開視野、開心胸、開智慧、開格局!

    立春,立的是什么?立仁、立義、立忠、立誠、立精神!

    總結(jié)

    以上是生活随笔為你收集整理的MySQL学习笔记04【数据库的查询操作、今日内容、表的约束】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。