文章目录
前言
应粉丝需求,近期总结了下MySQL篇的SQL通关总结,分享给给为,祝大家考试,日常工作得心应手🐴 1.什么是SQL?
🌈 1.1 SQL起源
🌈 1.2 SQL分类
📖 SQL语言分为五个部分:
🐴 2.DQL数据查询
🌈 2.1 语法介绍
🍌 语法格式:
🍌 精简版格式:
SELECT *| 列名 FROM 表 WHERE 条件;
🌈 2.2 简单查询
⭕️ 2.2.1 检索数据
我们需要通过下面的代码创建一个表,而后录入一些数据,示例代码及数据表示例如下:
案例 1️⃣ 现在有Customers 表,返回所有列
🖊 答案如下:
mysql> select * from Customers;
+---------+-----------+
| cust_id | cust_name |
+---------+-----------+
| a1 | andy |
| a2 | ben |
| a3 | tony |
| a4 | tom |
| a5 | an |
| a6 | lee |
| a7 | hex |
+---------+-----------+
7 rows in set (0.00 sec)
案例 2️⃣ 现在有Customers 表,只返回客户姓名(cust_name)列
🖊 答案如下:
mysql> select * from Customers;
+-----------+
| cust_name |
+-----------+
| andy |
| ben |
| tony |
| tom |
| an |
| lee |
| hex |
+---------+-----------+
7 rows in set (0.00 sec)
⭕️ 2.2.2 别名查询
我们需要通过下面的代码创建一个表,而后录入一些数据,示例代码及数据表示例如下:
案例 1️⃣ 编写 SQL 语句,从 Vendors 表中检索vend_id、vend_name、vend_address 和 vend_city,
将 vend_name重命名为 vname,将 vend_city 重命名为 vcity,
将 vend_address重命名为 vaddress
🖊 答案如下:
mysql> select
vend_id,
vend_name as vname,
vend_address as vaddress,
vend_city as vcity
from Vendors;
+---------+---------------+----------+----------+
| vend_id | vname | vaddress | vcity |
+---------+---------------+----------+----------+
| a003 | aliyun cloud | address3 | alibaba |
| a002 | huawei cloud | address2 | dongguan |
| a001 | tencent cloud | address1 | shenzhen |
+---------+---------------+----------+----------+
3 rows in set (0.00 sec)
🐘 说明:
⭕️ 2.2.3 去重查询
我们需要通过下面的代码创建一个表,而后录入一些数据,示例代码及数据表示例如下:
案例 1️⃣ 编写SQL 语句,检索并列出所有已订购商品(prod_id)的去重后的清单
🖊 答案如下:
mysql> select distinct prod_id from OrderItems;
+---------+
| prod_id |
+---------+
| a1 |
| a2 |
| a3 |
| a4 |
| a5 |
| a6 |
+---------+
6 rows in set (0.04 sec)
⭕️ 2.2.4 运算查询
我们需要通过下面的代码创建一个表,而后录入一些数据,示例代码及数据表示例如下:
案例 1️⃣ 编写 SQL语句,从 Products 表中返回 prod_id、prod_price 和 sale_price。
sale_price 是一个包含促销价格的计算字段。
促销价格乘以 0.9,得到原价的 90%(即 10%的折扣)
🖊 答案如下:
mysql> select prod_id,
prod_price,
prod_price*0.9 sale_price
from Products;
+---------+------------+------------+
| prod_id | prod_price | sale_price |
+---------+------------+------------+
| a0011 | 9.49 | 8.541 |
| a0019 | 600 | 540 |
| b0019 | 1000 | 900 |
+---------+------------+------------+
3 rows in set (0.00 sec)
🐘 说明:
⭕️ 2.2.5 数据过滤
我们需要通过下面的代码创建一个表,而后录入一些数据,示例代码及数据表示例如下:
案例 1️⃣ 编写 SQL 语句,返回 Products 表中所有价格在 3 美元到 6 美元之间的产品的名称(prod_name)和价格(prod_price),然后按价格对结果进行排序
mysql> select prod_name,prod_price from Products
where prod_price between 3 and 6
order by prod_price;
+-----------+------------+
| prod_name | prod_price |
+-----------+------------+
| egg | 3 |
| sockets | 4 |
+-----------+------------+
2 rows in set (0.01 sec)
🐘 说明:
案例 2️⃣ 列举常用的数据过滤
⭕️ 2.2.6 排序查询
🍌 语法格式:
我们需要通过下面的代码创建一个表,而后录入一些数据,示例代码及数据表示例如下:
案例 1️⃣ 以 class 降序的方式查询 student 表的所有行
案例 2️⃣ 以class 降序、birthday 升序查询 student 表的所有行
🐘 说明:
⭕️ 2.2.6 分组查询
🍌 语法格式:
我们需要通过下面的代码创建一个表,而后录入一些数据,示例代码及数据表示例如下:
案例 1️⃣ 编写 SQL 语句,返回名为 cheapest_item 的字段,该字段包含每个供应商成本最低的产品(使用 Products 表中的 prod_price),然后从最低成本到最高成本对结果进行升序排序。
mysql> select vend_id,min(prod_price) cheapest_item
from Products
group by vend_id
order by cheapest_item;
返回供应商id vend_id和对应供应商成本最低的产品cheapest_item。
+---------+---------------+
| vend_id | cheapest_item |
+---------+---------------+
| a0019 | 0.1 |
| b0019 | 20 |
| a0011 | 100 |
+---------+---------------+
3 rows in set (0.00 sec)
案例 2️⃣ 请编写 SQL 语句,针对表OrderItems,返回订单数量总和不小于100的所有订单号,
最后结果按照订单号升序排序
🖊 答案如下:
mysql> select order_num
from OrderItems
group by order_num
having sum(quantity)>=100
order by order_num;
返回order_num订单号。
+-----------+
| order_num |
+-----------+
| a1 |
| a2 |
| a4 |
+-----------+
3 rows in set (0.00 sec)
示例解析
订单号a1、a2、a4的quantity总和都大于等于100,按顺序为a1、a2、a4。
🐘 说明:
⭕️ 2.2.7 正则表达式
🍌 语法介绍:
案例 1️⃣ 实用的字符匹配
🚀 患者信息表: Patients
+--------------+---------+
| Column Name | Type |
+--------------+---------+
| patient_id | int |
| patient_name | varchar |
| conditions | varchar |
+--------------+---------+
patient_id (患者 ID)是该表的主键。
'conditions' (疾病)包含 0 个或以上的疾病代码,以空格分隔。
这个表包含医院中患者的信息。
写一条 SQL 语句,查询患有 I 类糖尿病的患者 ID (patient_id)、患者姓名(patient_name)以及其患有的所有疾病代码(conditions)。
I 类糖尿病的代码总是包含前缀 DIAB1 。
按 任意顺序 返回结果表。
查询结果格式如下示例所示。
🚀 需求
示例 1:
输入:
Patients表:
+------------+--------------+--------------+
| patient_id | patient_name | conditions |
+------------+--------------+--------------+
| 1 | Daniel | YFEV COUGH |
| 2 | Alice | |
| 3 | Bob | DIAB100 MYOP |
| 4 | George | ACNE DIAB100 |
| 5 | Alain | DIAB201 |
+------------+--------------+--------------+
输出:
+------------+--------------+--------------+
| patient_id | patient_name | conditions |
+------------+--------------+--------------+
| 3 | Bob | DIAB100 MYOP |
| 4 | George | ACNE DIAB100 |
+------------+--------------+--------------+
解释:Bob 和 George 都患有代码以 DIAB1 开头的疾病。
🐴🐴 答案
# Write your MySQL query statement below
SELECT
select * FROM Patients
WHERE conditions REGEXP '^DIAB1|\\sDIAB1'
/* Write your PL/SQL query statement below */
select
patient_id "patient_id",
patient_name "patient_name",
conditions "conditions"
from Patients where regexp_like(conditions,'^DIAB1|\ s*DIAB1')
🌈 2.3 子查询
🍌 语法格式:
我们需要通过下面的代码创建一个表,而后录入一些数据,示例代码及数据表示例如下:
案例 1️⃣ 编写 SQL 语句,从 Products 表中检索所有的产品名称(prod_name),
以及名为 quant_sold 的计算列,
其中包含所售产品的总数(在 OrderItems 表上使用子查询和 SUM(quantity)检索)。
🖊 答案如下:
mysql> SELECT
p.prod_name,
tb.quantity
FROM (
SELECT
prod_id,
SUM(quantity) quantity
FROM
OrderItems
GROUP BY
prod_id
) tb,
Products p
WHERE
tb.prod_id = p.prod_id;
返回产品名称prod_name和产品售出数量总和
+-----------+----------+
| prod_name | quantity |
+-----------+----------+
| egg | 105 |
| sockets | 1300 |
| coffee | 1121 |
| cola | 34 |
+-----------+----------+
4 rows in set (0.01 sec)
示例解析:
prod_name是cola的prod_id为a0003,quantity总量为34,返回结果无需排序。
案例 2️⃣ 请列举常用子查询
🐘 ANY和ALL用法说明:
🌈 2.4 多表连接
🍌 语法介绍:
我们需要通过下面的代码创建一个表,而后录入一些数据,示例代码及数据表示例如下:
案例 1️⃣ 编写 SQL 语句,返回 Customers 表中的顾客名称(cust_name)和Orders 表中的相关订单号(order_num),并按顾客名称再按订单号对结果进行升序排序。
你可以尝试用两个不同的写法,一个使用简单的等联结语法,另外一个使用 INNER JOIN。
🖊 答案如下:
等联结语法:
mysql> select cust_name,order_num
from Customers,Orders
where Customers.cust_id=Orders.cust_id
order by cust_name,order_num;
使用内联结
mysql> select cust_name,order_num
from Customers
INNER JOIN Orders ON Orders.cust_id=Customers.cust_id
order by cust_name,order_num;
+-----------+-----------+
| cust_name | order_num |
+-----------+-----------+
| an | a5 |
| andy | a1 |
| ben | a2 |
| hex | a7 |
| tom | a4 |
| tony | a3 |
+-----------+-----------+
6 rows in set (0.00 sec)
案例 2️⃣ 关联查询大全
准备用于测试连接查询的数据:
🌈 2.5 组合查询
🍌 语法介绍:
我们需要通过下面的代码创建一个表,而后录入一些数据,示例代码及数据表示例如下:
案例 1️⃣ 将两个 SELECT 语句结合起来,以便从 OrderItems表中检索产品 id(prod_id)和 quantity。
其中,一个 SELECT 语句过滤数量为 100 的行,
另一个 SELECT 语句过滤 id 以 BNBG 开头的产品,最后按产品 id 对结果进行升序排序。
mysql> select prod_id,quantity
from OrderItems
where quantity=100
union
select prod_id,quantity
from OrderItems
where prod_id like 'BNBG%'
order by prod_id;
返回产品id prod_id和产品数量quantity
+---------+----------+
| prod_id | quantity |
+---------+----------+
| a0002 | 100 |
| BNBG | 10002 |
+---------+----------+
2 rows in set (0.01 sec)
示例解析:
产品id a0002因为数量等于100被选取返回;BNBG因为是以 BNBG 开头的产品所以返回;
最后以产品id进行排序返回。
🌈 2.6 函数用法
📖 常用聚合函数一览表
📖 常用数学函数一览表
📖 常用字符串函数一览表
📖 常用日期函数一览表
具体函数实用方法参考以下博客
史上最硬核的Mysql函数大全,还不收藏?
https://jeames.blog.csdn.net/article/details/120031303
🌈 2.7 开窗函数
🍌 语法介绍:
案例 1️⃣ MySQL8.0 增加了窗口函数,使用内置函数可以轻松实现上述排名
MySQL8.0 中可以利用 ROW_NUMBER(),DENSE_RANK(),RANK() 三个窗口函数实现上述三种排名,
需要注意的一点是 as 后的别名,千万不要与前面的函数名重名,否则会报错,
下面给出这三种函数实现排名的案例:
## 按分数高低直接排名,从 1 开始,往下排,类似于 row number
select xuehao,score, ROW_NUMBER() OVER(order by score desc) as row_r from scores_tb;
## 分数相同,名次相同,排名无间隔:
select xuehao,score, DENSE_RANK() OVER(order by score desc) as dense_r from scores_tb;
## 并列排名,排名有间隔:
select xuehao,score, RANK() over(order by score desc) as r from scores_tb;
-- 一条语句也可以查询出不同排名
SELECT xuehao,score,
ROW_NUMBER() OVER w AS 'row_r',
DENSE_RANK() OVER w AS 'dense_r',
RANK() OVER w AS 'r'
FROM `scores_tb`
WINDOW w AS (ORDER BY `score` desc);
🐴 3.DML数据操纵
🌈 3.1 插入INSERT
📖 按照图1的内容向tb_class表中插入记录
INSERT INTO tb_class(classNo,department,className) VALUES('AC1301', '会计学院', '会计 13-1 班');
INSERT INTO tb_class(classNo,department,className) VALUES('AC1302', '会计学院', '会计 13-2 班');
INSERT INTO tb_class(classNo,department,className) VALUES('CS1401', '计算机学院', '计算机 14-1 班');
INSERT INTO tb_class(classNo,department,className) VALUES('IS1301', '信息学院', '信息系统 13-1 班');
INSERT INTO tb_class(classNo,department,className) VALUES('IS1401', '信息学院', '信息系统 14-1 班');
📖 使用批量插入记录的方法,一次性向tb_student表中插入如图2所示的记录
INSERT INTO tb_student
values ('2013110101', '张晓勇', '男', '1977-12-11','山西','汉','AC1301'),
('2013110103', '王一敏', '女', '1996-03-25','河北','汉','AC1301'),
('2013110201', '江山', '女', '1996-09-17','内蒙','锡伯','AC1302'),
('2013110202', '李明', '男', '1996-01-14','广西','壮','AC1302'),
('2013310101', '黄菊', '女', '1995-09-30','北京','汉','IS1301'),
('2013310102', '林海', '男', '1996-01-18','北京','满','IS1301'),
('2013310103', '吴昊', '男', '1995-11-18','河北','汉','IS1301'),
('2014210101', '刘涛', '男', '1997-04-03','湖南','侗','CS1401'),
('2014210102', '郭志坚', '男', '1997-04-03','上海','汉','CS1401'),
('2014210103', '王玲', '女', '1998-02-21','安徽','汉','CS1401'),
('2014310101', '王林', '男', '1996-10-09','河南','汉','IS1401'),
('2014310102', '李怡然', '女', '1996-12-31','辽宁','汉','IS1401');
📖 向tb_student表中插入一条新的记录,
学号为’2015310103’,姓名为’李彤’,性别为’男’,民族为‘傣’,班级编号为’IS1401’
(注意,这是部分字段的值)。
INSERT INTO tb_student(studentNo,studentName,sex,nation,classNo)
values('2015310103','李彤','男','傣','IS1401');
📖 向tb_student1表中插入tb_student表中所有汉族学生的信息。
insert into tb_student1 select * from tb_student where nation='汉';
🌈 3.2 更新UPDATE
📖 在tb_student表中,使用replace 语句把学号为“2014310102”的学生姓名替换为李怡。
select * from tb_student where studentNo='2014310102';
update tb_student set studentName=replace(studentName,'然','') where studentNo='2014310102';
📖 使用update语句,把tb_student表中学号为’2014210101’的学生姓名更改为’黄涛’.
update tb_student set studentName='黄涛' where studentNo='2014210101';
🌈 3.3 删除DELETE
📖 删除tb_student表中姓名为“王一敏“的学生信息。
delete from tb_student where studentName='王一敏';
🐴 4.DDL数据定义
🌈 4.1 表的创建、修改、删除
##创建表
create table if not exists tb_student (
studentNo CHAR(10) not NULL primary key comment '学号',
studentName VARCHAR(10) NOT null comment '姓名',
sex CHAR(2) comment '性别',
birthday date comment '出生日期',
native VARCHAR(20) comment '籍贯',
nation VARCHAR(10) DEFAULT '汉' comment '民族',
classNo CHAR(6) comment '所属班级'
) ENGINE=InnoDB comment '学生表';
desc tb_student;
show columns from tb_student;
📖 用命令show tables查看当前数据库中的所有表
📖 将tb_student的表结构复制到tb_student2,并向tb_student2中添加一个INT型字段id,
要求其不能为NULL,取值唯一且自动增加,并将该字段添加到表的第一个字段
create table tb_student2 select * from tb_student where 1=3;
alter table tb_student2 add id int
Alter table tb_student2 add primary key(id); -先创建主键
ALTER TABLE tb_student2 MODIFY id int not null AUTO_INCREMENT; --自增
📖 向tb_student表中添加一个varchar(16)类型的字段department,用于描述学生所在院系,要求设置其默认值为“城市学院”,并将该字段添加到原表nation之后
alter table tb_student add department varchar(16)
DEFAULT '城市学院' comment '院系' after nation;
📖 将tb_student中的字段birthday重命名为age,并将其数据类型更改为TINYINT,
允许其为NULL,默认值为18。
用DESC 查看tb_student
alter table tb_student change birthday age TINYINT DEFAULT 18; --给字段重命名
📖 将tb_student表中的字段department的默认值删除
ALTER TABLE tb_student ALTER COLUMN department DROP DEFAULT;
📖 将tb_student表中的字段department的默认值改为’环化学院’
ALTER TABLE tb_student ALTER COLUMN department SET DEFAULT '环化学院';
📖 将tb_student表中的字段department的数据类型更改为varchar(20),
取值不允许为空,并将此字段移至字段studentName之后。
用desc tb_student命令查看结果
ALTER TABLE tb_student MODIFY department varchar(20) not null after studentName;
📖 删除数据表tb_student2中的字段id
ALTER TABLE tb_student2 MODIFY id int not null; //删除自增长
Alter table tb_student2 drop primary key;//删除主建
ALTER TABLE tb_student2 DROP id;
📖 使用RENAME [TO]子句将数据库db_school中的数据表tb_student2
重新命名为backup_tb_student
alter table tb_student2 rename to backup_tb_student;
📖 使用RENAME TABLE语句将数据库db_school中的表
backup_tb_student再重新命名为tb_student2
RENAME TABLE backup_tb_student TO tb_student2,new_table TO old_table;
drop table tb_student,tb_student2;
🌈 4.2 数据完整性约束
📖 重新按照表1创建tb_student数据表,要求以表级完整性约束方式定义主键,
并指定主键约束名为pk_student。
CREATE TABLE tb_student (
studentNo CHAR(10) NOT NULL,
studentName VARCHAR(10) NOT NULL,
sex CHAR(2),
birthday DATE,
native VARCHAR(20),
nation VARCHAR(20) default '汉',
classNo CHAR(6),
constraint pk_student primary key(studentNo)
) engine=InnoDB default charset=gb2312;
📖 在数据库db_school中,按照表2的结构创建tb_class。要求:使用InnoDB存储引擎,gb2312字符集,主键约束为列级完整性约束,唯一约束为表级完整性约束其约束名为uq_class
CREATE TABLE tb_class (
classNo CHAR(6) PRIMARY KEY NOT NULL,
className VARCHAR(20) NOT NULL,
department VARCHAR(20),
grade ENUM('1','2','3','4'),
classNum TINYINT,
constraint uq_class unique(className)
) engine=InnoDB default charset=gb2312;
📖 首先删除数据表tb_student,按照表1重新创建tb_student,在创建的同时建立tb_student到tb_class的外键约束(两个表相同含义的属性是classNo,因此classNo是tb_student的外键),约束名为fk_student,并定义相应的参照动作,更新操作为级联(cascade),删除操作为限制(restrict),数据表引擎为InnoDB,字符集为gb2312
drop table tb_student;
CREATE TABLE tb_student (
studentNo CHAR(10) NOT NULL,
studentName VARCHAR(10) NOT NULL,
sex CHAR(2),
birthday DATE,
native VARCHAR(20),
nation VARCHAR(20) default '汉',
classNo CHAR(6),
constraint fk_student FOREIGN KEY (classNo)
references tb_class(classNo) on delete restrict on update cascade
) engine=InnoDB default charset=gb2312;
📖 在数据库db_school中按照表3创建tb_course表,
要求:外键名字为fk_course,引擎为InnoDB,默认字符集为gb2312。
CREATE TABLE tb_course (
courseNo CHAR(6) NOT NULL primary key comment '课程号',
courseName VARCHAR(20) unique not NULL comment '课程名',
credit DECIMAL(3,1) not NULL comment '学分',
courseHour TINYINT(2) not NULL comment '课时数',
term TINYINT(2) comment '开课学期',
priorCourse CHAR(6) comment '先修课程',
constraint fk_course FOREIGN KEY(priorCourse) REFERENCES tb_course(courseNo)
) engine=InnoDB default charset=gb2312;
📖 在数据库db_school中定义数据表tb_score,
表结构如表4所示, 引擎为InnoDB,默认字符集为gb2312。
CREATE TABLE tb_score(
CREATE TABLE tb_score(
studentNo CHAR(10) NOT NULL comment '学号',
courseNo CHAR(6) NOT NULL comment '课程号',
credit DECIMAL(4,1) not NULL comment '成绩',
constraint fk_score_stuNo FOREIGN KEY(studentNo) REFERENCES tb_student(studentNo),
constraint fk_score_courNo FOREIGN KEY(courseNo) REFERENCES tb_course(courseNo),
constraint pk_score PRIMARY KEY(studentNo,courseNo)
) engine=InnoDB default charset=gb2312;
注:外键约束对应的主键(在表里是主键才可以)
🌈 4.3 更新完整性约束条件
📖 删除在表tb_score中定义的外键约束fk_score_stuNo
alter table tb_score drop foreign key fk_score_stuNo;
📖 删除在表tb_student中定义的主键约束。
Alter table tb_student drop primary key;
📖 添加主键约束,用alter table语句在tb_student对studentNo重新添加主键。
Alter table tb_student add primary key(studentNo);
📖 添加外键约束,用alter table语句在tb_score表对studentNo重新添加外键,
对应的主键为tb_student表的studentNo,外键名称为fk_score_stuNo。
ALTER TABLE tb_score ADD CONSTRAINT
fk_score_stuNo FOREIGN KEY(studentNo) REFERENCES tb_student(studentNo);
🌈 4.4 索引的创建
📖 创建新表的同时创建普通索引:要求按照实验一第5题表1的结构创建tb_student1表,
要求在创建的同时在studentName字段上建立普通索引,索引名为idx_studentName。
create table if not exists tb_student1 (
studentNo CHAR(10) not NULL primary key comment '学号',
studentName VARCHAR(10) NOT null comment '姓名',
sex CHAR(2) comment '性别',
birthday date comment '出生日期',
native VARCHAR(20) comment '籍贯',
nation VARCHAR(10) DEFAULT '汉' comment '民族',
classNo CHAR(6) comment '所属班级',
INDEX idx_studentName(studentName)
) ENGINE=InnoDB comment '学生表';
📖 创建新表时创建唯一索引:按照实验一第20题表2的结构创建tb_class1表,
要求在创建的同时在className字段上建立唯一索引,索引名为uqidx_className。
CREATE TABLE tb_class1 (
classNo CHAR(6) PRIMARY KEY NOT NULL,
className VARCHAR(20) NOT NULL,
department VARCHAR(20),
grade ENUM('1','2','3','4'),
classNum TINYINT,
constraint uq_class unique(className),
UNIQUE INDEX uqidx_className(className)
) engine=InnoDB default charset=gb2312;
📖 在创建新表的同时创建主键索引:
按照第4部分表3的结构创建tb_course1,
要求创建的同时在courseNo字段上建立主键索引。
CREATE TABLE tb_course1 (
courseNo CHAR(6) primary key comment '课程号',
courseName VARCHAR(20) unique not NULL comment '课程名',
credit DECIMAL(3,1) not NULL comment '学分',
courseHour TINYINT(2) not NULL comment '课时数',
term TINYINT(2) comment '开课学期',
priorCourse CHAR(6) comment '先修课程'
) engine=InnoDB default charset=gb2312;
📖 使用create index语句创建索引:
按照第4部分表4的结构创建tb_score1,
要求使用create index 语句对studentNo建立普通降序索引,索引名为idx_studentNo,
对courseNo建立普通升序索引,索引名为idx_courseNo.
CREATE TABLE tb_score1(
studentNo CHAR(10) NOT NULL comment '学号',
courseNo CHAR(6) NOT NULL comment '课程号',
credit DECIMAL(4,1) not NULL comment '成绩'
) engine=InnoDB default charset=gb2312;
alter table tb_score1 add index idx_studentNo(studentNo desc);
alter table tb_score1 add index idx_courseNo(courseNo);
📖 使用create index语句创建基于字段值前缀字符的索引:
在tb_course上建立一个索引,要求按课程名称courseName字段值的前三个字符建立降序索引。
--函数要再加个括号
alter table tb_course add index idx_courseName1((left(courseName,3)) desc);
DROP INDEX idx_courseName1 on tb_course;
📖 使用alter table语句建立普通索引:在tb_score上建立普通索引,
要求使用alter table语句对courseNo字段建立普通索引,索引名为idx_courseNo.
alter table tb_score add index idx_courseNo(courseNo);
🐴 5.DCL数据控制
🍌 语法格式:
🌈 5.1 创建用户
🌈 5.2 修改用户名
🌈 5.3 修改密码
🌈 5.4 删除用户
🌈 5.5 权限管理
📖 查看权限
📖 赋权
📖 回收权限
🐴 6.TCL事务控制
SQL入门到高手推荐学习资源
① 牛客题霸刷题-SQL必知必会50道
https://jeames.blog.csdn.net/article/details/125021153
②初学者怎样快速学会 SQL
https://jeames.blog.csdn.net/article/details/124834268
③一份热乎乎的MySQL实训真题,让你成为SQL高手
https://jeames.blog.csdn.net/article/details/123144444
④重温SQL行转列,性能又双叒提升了
https://jeames.blog.csdn.net/article/details/122891838
⑤LeetCode刷题SQL专项
https://blog.csdn.net/weixin_41645135/category_11826559.html