mysql语句期末复习

🔮 登录

💻 登录数据库:

 mysql -uroot -p

📺:在这里插入图片描述

🏯创建

🚀创建数据库:

 CREATE DATABASE 数据库名;

📺 :在这里插入图片描述

⛳️ 在终端使用时,在创表之前,需要先选择将要操作的数据库,是使用一下命令:

use 数据库名字;

📺:在这里插入图片描述

📌 删除数据库命令:

DROP DATABASE 数据库名字;

📺:在这里插入图片描述

🚀创建表:

CREATE  TABLE  s(
字段名 数据类型 约束条件 [注释],
字段名 数据类型 约束条件 [注释],
……
)ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci[表的配置]
;
注释和表配置也可以不写,直接默认即可;

🔎例:(根据自己所需,一下例子仅供参考,一下是使用了列约束主键)

CREATE TABLE s(
sno CHAR(10) NOT NULL PRIMARY KEY COMMENT '学号',
sn  VARCHAR(50) UNIQUE COMMENT '姓名',
sex enum('男','女') DEFAULT '男' COMMENT'性别',
age INT NOT NULL COMMENT'年龄',
maj VARCHAR(50) NOT NULL COMMENT'专业',
dept VARCHAR(50) NOT NULL COMMENT '院系'
)ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
;

🎲创建表外键:

🎯other_ 字段名:是将要与对应表建立外键关系的字段名;比如,一表的sno和二表的sno建立两个表的关系。

FOREIGN KEY (other_字段名) REFERENCES other_table_name(other_字段名)

📝例:下面的创建了三个表,第一个表就是上面创建的表 s,分别呈现一下关系:表 c 和表 s 关联,表 sc 和 表 s,c关联

CREATE TABLE sc(
sno CHAR(10) NOT NULL PRIMARY KEY COMMENT'学号',
cno CHAR(10) NOT NULL  COMMENT'课程号',
score  DECIMAL(6,2) NOT NULL COMMENT'成绩',
FOREIGN KEY (cno) REFERENCES c(cno),
FOREIGN KEY (sno) REFERENCES s(Sno)
)ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

📺:在这里插入图片描述
默认情况创建表:
在这里插入图片描述

🚦在创建外键时,注意事项:

1️⃣ 数据完整性:外键确保了关联表格之间的数据完整性。它们可以防止插入无效数据,确保引用的值在关联表中存在。

2️⃣引用完整性:外键会建立关联表之间的引用关系,这确保了在引用表中的数据被修改或删除时,能够正确地处理关联表中的数据。例如,如果有一个学生表和一个成绩表,外键能够确保只能插入已存在于学生表中的学生学号到成绩表中。

3️⃣ 正确性:确保外键指向正确的列和表。外键应该指向目标表格的主键或者一个有唯一约束的列,这样能够保证引用的数据是唯一的。

4️⃣ 索引:通常,创建外键会自动在关联的列上创建索引,这有助于提高查询的性能。

5️⃣ 操作:在创建外键时,需要考虑到对数据的操作。例如,设置外键约束后可能需要注意插入、更新或删除数据时的影响。

6️⃣ 数据库支持:不同的数据库管理系统对外键有不同的支持和限制,需要了解所使用数据库的特性和限制。

⚠️可能出现的错误:

🚩"Cannot add foreign key constraint" 🚩这个错误通常发生在尝试创建外键约束时,可能由于以下原因导致:

1️⃣数据类型不匹配:外键参考列和引用列的数据类型必须完全相同,包括长度、null/not null 等设置。确保两列的数据类型和属性一致。
2️⃣ 数据完整性:在创建外键之前,确保引用列中的数据已经存在,并且没有不匹配的数据。外键要求参考列中的值必须存在于引用列中。
3️⃣ 索引缺失:引用列和参考列通常需要有索引来提高性能。如果没有索引,可能会导致无法建立外键约束。
4️⃣表引擎不匹配:如果两个表格使用了不同的存储引擎(比如一个使用 InnoDB,另一个使用 MyISAM),可能无法建立外键约束。确保所有涉及到的表格都使用相同的存储引擎。
5️⃣ 数据不一致:如果参考列或引用列中有不一致的数据,例如存在空值或者重复值,也可能导致无法建立外键约束。

🚝以下是对字段操作:

✈️ADD添加字段和完整性约束:

ALTER 表名
ADD [<新字段名><数据类型>] [<完整性约束>] [FIRST | AFTER 已有字段名];

📺:在这里插入图片描述
在这里插入图片描述

⚓️添加一个字段时即可指定添加位置,但在添加多个字段时则不能指定位置关系,只能添加在数据表的末尾。
指定添加字段位置:
📺: 在这里插入图片描述

🗽ADD添加多个字段:

ALTER TABLE 表名
ADD [<字段名><数据类型><约束名>,<字段名><数据类型><约束名>];

例:

ALTER TABLE s
 ADD (class_no VARCHAR(20) NOT NULL ,address NVARCHAR(20) NOT NULL);

📺: 在这里插入图片描述

🚢ADD添加完整性约束定义,例如使年龄在 15 ~ 60 之间。

例:

ALTER TABLE s
 ADD CHECK(age BETWEEN 15 AND 60);

🎡也可以在CHECK前面添加 ”CONSTRAINT 约束名“,用来表示用户自定义的约束名,也可省略,若省略,则系统自动为CHECK提供一个约束名。

📺:在这里插入图片描述

🚁 修改

🍥使用RENAME修改表名,使用CHANGE修改字段名。

🍉修改表名:

ALTER TABLE <旧表名>
RENAME [TO] <新表名>;
ALTER TABLE s
RENAME students;

🍉修改字段名:

ALTER TABLE 表名
CHANGE <旧字段名> <新字段名>  <新数据类型>;
ALTER TABLE students
CHANGE sn sname VARCHAR(30);

📺:在这里插入图片描述

🍉MODIFY的使用:

🚡MODIFY可用于修改字段类型和字段排序。

ALTER TABLE 表名
MODIFY <字段名1> <数据类型> [FIRST | AFTER 字段名2];

用法与ADD类似。

🎡ENGINE的使用:

ENGINE可以用来修改存储引擎;

⚠️但需要注意的是,在涉及到外码的情况下,InnoDB不能修改为MyISAM,MyISAM不支持外码。

ALTER TABLE 表名
ENGINE = 需要修改的存储引擎名;

⚓️DROP的使用:

DROP用来删除字段和完整性约束。

ALTER TABLE 表名

DROP <字段名>,DROP <字段名>;(包含了删除多个字段的步骤)

🚣查看

⚓️查看已创建的数据库、表、字段。

SHOW  DATABASES;查看已有的数据库
SHOW TABLES;查看已创建的表
DESCRIBE/DESC <表名>;查看表结构
SHOW CREATE TABLE <表名>;查看表信息

📺:在这里插入图片描述

🚲添加数据

⚓️使用INSERT添加数据。

INSERT INTO 表名([字段名1],[字段名2],[字段名3]……[字段名n])
VALUES(<值>);

例:

 INSERT INTO students(sno,sname,sex,age,maj,dept,class_no,address)
 VALUES('s2','张三','男',21,'计算机','大数据','计科2班','中国');

📺:在这里插入图片描述

🚜使用UPDATE修改数据。

UPDATE 表名
SET 字段名 = '需要修改的值'
WHERE 指定的记录字段名 = '指定的条件的记录';

🔱其实WHERE是用来设置条件的,比如说:需要修改某个人的信息,WHERE就可以等于这个人的名字,需要修改的值写在SET 字段名 = ‘需要修改的值’,进行填充即可。

💱概念有点模糊?那么请看下面的例子:

UPDATE students
SET sname = '朵拉'
WHERE sname = '张三';

UPDATE students
SET age = 19,sex = '女'
WHERE sname = '朵拉';

📺:在这里插入图片描述

🔗使用DELETE 删除数据

DELETE 
FROM <表名>
[WHERE <条件>];

♻️这里的WHERE根据自身条件来看,如果需要有指定某个条件来删除,即可加上;但在不加的时候需要谨慎操作,不加WHERE就是默认删除此表里面的所有记录。

例:

 DELETE
 FROM students;
 DELETE
     FROM students
     WHERE sno = 's3';
   

📺:在这里插入图片描述

🍈使用TRUNCATE 删除数据

TRUNCATE 表名;

例:

TRUNCATE TABLE sc;

📺:在这里插入图片描述

🚤 查询

📆SELECT语句的一般语法格式:

SELECT [ALL|DISTINCT] <字段名> [AS 别名] [{,<字段名> [AS 别名]}]
FROM <表名或视图名> [[AS] 表别名]
[WHERE <检索条件>]
[GROUP BY <字段名> [HAVING <条件表达式>]]
[ORDER BY <字段名> [ASC|DESC]]
[LIMIT字句]

🔎查询字段名,

SELECT 字段名
FROM 表名;

例:

SELECT *
FROM students;
SELECT sno,sname,sex
FROM students;
SELECT sno AS 学号,sname AS 名字,sex AS 性别
FROM students;

“ * ” 代表查询该表全部记录;

SELECT sno,sname,maj
FROM students
LIMIT 2;

✉️条件查询:

SELECT *
FROM students
WHERE sex = '女';
SELECT *
FROM students
WHERE sex = '女' OR age < 20;

在这里插入图片描述

SELECT *
FROM students
WHERE sex = '女' AND age < 20;

🎳OR表示满足其中一个条件即可查询到, AND表示两个条件必须同时满足,并列关系。

📺:在这里插入图片描述

SELECT sno,sname,sex,age,maj
FROM students
WHERE age BETWEEN 18 AND 20; 
SELECT sno,sname,sex,age,maj
FROM students
WHERE sno IN ('s3','s1'); 
SELECT sno,sname,sex,age,maj
FROM students
WHERE sno NOT IN ('s3','s1'); 

❄️BETWEEN……AND……在某个区间内,IN 表示属于,NOT IN 不属于;

📡使用LIKE 查询

% 代表0个或多个字符;_ 代表一个字符;

SELECT sno,sname,age
FROM students
WHERE sname LIKE '加%';
SELECT sno,sname,age
FROM students
WHERE sname LIKE '_卡%';

📺:在这里插入图片描述

🐾 下面的有几条查询没有实操图,不过都测试过,请放心使用,根据自己需求把对应的值或字段换成自己所需即可,感谢支持;

ISIS NOT (空值查询)

SELECT 字段名1,字段名2,字段名3
FROM 表名
WHERE 字段名 IS NULL;
SELECT 字段名1,字段名2,字段名3
FROM 表名
WHERE 字段名 IS  NOT NULL;

🌐使用COUNT 统计数量,关键字DISTINCT作用是消除重复元组。

SELECT COUNT(需要统计的字段名) AS 备注
FROM 表名
WHERE 字段名 = '被统计的对象名';
SELECT COUNT(DISTINCT maj) AS 专业数量
FROM students;
SELECT COUNT(*) AS 人员数量
FROM students
WHERE dept = '大数据';

🍬使用GROUP BY 进行分组查询,写条件时,需要借助关键字 HAVING

🎯 GROUP BY 可以将查询结果按字段列或字段列的组合在行的方向上进行分组,每在字段列或字段列的组合上 具有相同的值。

SELECT sno AS 学号,COUNT(*) AS 专业人数
FROM students
GROUP BY sno
HAVING COUNT(*)>=1;

📺:在这里插入图片描述

🏂使用ORDER BY 来查询结果排序;

📤DESC 为降序,ASC 为升序,默认是升序;

SELECT sno,cno,score
FROM sc
WHERE sno = 's1'
ORDER BY score DESC;

📺:在这里插入图片描述

📒多关系数据查询:

🔑 关键字JOIN 的介绍:

INNER JOIN 称为 内连接,用于显示符合条件的记录,不会显示NULL,也是默认值;

LEFT JOIN 称 左连接,用于虚显示符合条件的记录以及左边表中不符合条件的记录。(左表中不符合条件的记录会在右表中以NULL来显示)

RIGHT JOIN 称 右连接,用于虚显示符合条件的记录以及右边表中不符合条件的记录。(右表中不符合条件的记录会在右表中以NULL来显示)

FULL JOIN 称为全连接,用于显示符合条件的记录以及左边表和右边表中不符合条件的记录(缺乏的数据会以NULL显示出来)

大多数情况用的最多的是左、右连接;

例:

🎳我直接用例子来解释上面的官方语言,更有助于理解:

把s表中的 “sno” 和 sc 表中的 “sno” 进行等值连接,然后对 “sno” , “sn” ,“cno” 进行投影操作,并查询结果

SELECT s.sno,sn,cno
FROM s INNER JOIN sc
ON s.sno = sc.sno ;

📺:在这里插入图片描述

🔌在上面的基础之上,同时选取 “sno” = “s5” 的记录;

SELECT s.sno,sn,cno
FROM s INNER JOIN sc
ON s.sno = sc.sno AND s.sno='s5';

📺:在这里插入图片描述

例2:

💊查询所有的“tno",“tn”,“cn”,并且把"tno"升序排列

以下是三个表结构:
📺:在这里插入图片描述

⌚️使用where语句来查询:

SELECT t.tno,tn,cn
FROM t,tc,c
WHERE t.tno = tc.tno AND tc.cno = c.cno
ORDER BY tno;

💯使用内连接来查询:

SELECT t.tno,tn,cn
FROM t INNER JOIN tc ON t.tno = tc.tno
	   INNER JOIN c ON tc.cno = c.cno
	ORDER BY tno;

📺:在这里插入图片描述

  感谢阅读,小江正在努力中,很荣幸能得到你的支持,如有不足,期待指出。👊

在这里插入图片描述

  • 19
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值