MySQL学习笔记04【数据库的查询操作、今日内容、表的约束】
- MySQL 文檔-黑馬程序員(騰訊微云):https://share.weiyun.com/RaCdIwas
- 1-MySQL基礎.pdf、2-MySQL約束與設計.pdf、3-MySQL多表查詢與事務的操作.pdf
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可以省略。
???
去除重復結(jié)果集
計算分數(shù)之和
起別名
DQL_條件查詢
1. where子句后跟條件
2. 運算符
- > 、< 、<= 、>= 、= 、<>
- BETWEEN...AND ?
- IN( 集合)?
- LIKE:模糊查詢
- 占位符:
- _:單個任意字符
- %:多個任意字符
- 占位符:
- IS NULL ?
- and ?或 &&
- or ?或 ||?
- not ?或 !
DQL_基礎查詢_模糊查詢
LIKE:模糊查詢
- 占位符:
- _:單個任意字符
- %:多個任意字符
今日內(nèi)容
DQL_排序查詢
1. 排序查詢
- 語法:order by 子句
- order by 排序字段1 排序方式1 , ?排序字段2 排序方式2...
- 排序方式:
- ASC:升序(默認)。
- DESC:降序。
- 注意:
- 如果有多個排序條件,則當前邊的條件值一樣時,才會判斷第二條件。
DQL_聚合函數(shù)
2. 聚合函數(shù):將一列數(shù)據(jù)作為一個整體,進行縱向的計算。
注意:聚合函數(shù)的計算,排除null值。
解決方案:1、選擇不包含非空的列進行計算;2、IFNULL函數(shù)。
??
DQL_分組查詢
3. 分組查詢:
DQL_分頁查詢
4. 分頁查詢
08 表的約束
約束_概述
概念:對表中的數(shù)據(jù)進行限定,保證數(shù)據(jù)的正確性、有效性和完整性。?? ?
分類:
約束_非空約束
非空約束: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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL学习笔记03【数据库表的CRU
- 下一篇: MySQL学习笔记05【多表操作、三大范