MYSQL 尚硅谷B站自整 111-178 基础篇结束

导出笔记百度云提取:

链接:https://pan.baidu.com/s/1pW7-4xKM2Uv2CTfiWbk9LA
提取码:j8dv

DDL 数据定义语句

创建 修改 删除
CREATE ALTER DROP

一、库的管理

1.创建库

CREATE DATABASE  IF NOT EXISTS book;

2.修改库(一般不修改)

修改库名在文件夹中修改即可

#更改库的字符集

 ALTER DATABASE book CHARACTER SET gkb;

3.删除库

 DROP DATABASE IF EXISTS book;

二、表的管理

1.表的创建

语法:
CREATE TABLE 表名(
列名 列名类型(长度 约束),
列名 列名类型(长度 约束),
列名 列名类型(长度 约束),
……
列名 列名类型(长度 约束)

案例:创建book表

  CREATE TABLE book(
     id INT ,
     bname VARCHAR(20),
     price DOUBLE,
     autherid INT,
     publishdate DATETIME
     );

DESC book;

创建表author;

CREATE TABLE author(
    id INT,
    au_name VARCHAR(20),
    nation VARCHAR(10)
    );

2.表的修改

语法: alter table 表名 add、drop、modify、change column 列名 【列类型,约束】
修改列名

 ALTER TABLE book CHANGE COLUMN publishdate pubdate DATETIME;

修改列的类型或约束

扫描二维码关注公众号,回复: 10497125 查看本文章
ALTER TABLE book MODIFY COLUMN pubdate TIMESTAMP;

添加新列

语法:alter table 表名 add column 列名 类型【(位置)first | after字段名】

 ALTER TABLE author ADD COLUMN bnnual DOUBLE;

删除列

 ALTER TABLE author DROP COLUMN bnnual ;

修改表名

ALTER TABLE author RENAME TO book_author;
   
 DESC book_author

3.表的删除

 DROP TABLE  IF EXISTS book_author;

4.表的复制

#仅仅复制表的结构

CREATE TABLE copy LIKE author;

#复制表的结构外加数据

 CREATE TABLE copy2
 SELECT * FROM author;

#只复制部分数据

 CREATE TABLE copy3
 SELECT id au_name FROM author WHERE nation='中国'

#仅仅复试某些字段 即 结果 id au_name 中没有数据

CREATE TABLE copy4 
SELECT id au_name FROM author WHERE 0;

三、类型介绍

一、整型

在这里插入图片描述
#如何设置有符号无符号
**特点:**如果不设置,默认有符号

  如果不设置长度会有默认的长度() 长度代表现实的最大宽度,如果不够会用0在左边自动填充,但必须搭配ZEROFILL使用
  如果插入的数值超过了整型的范围,会报 OUT of RANGE 异常,并插入临界值
CREATE TABLE tb_int(
  tb1 INT(7) ZEROFILL #有符号
  tb2 INT UNSIGNED #无符号
  )

二、小数

在这里插入图片描述

1.浮点型
FLOAT(m,d)
DOUBLE(m,d)
2. 定点型
DEC(m,d)
DECIMAL(m,d)

#d :表示小数点后保留d位
#m:表示整数和小数的位数一个m位
如果超过范围,则插入临界值
特点:
1.m,d 都可以省略
2.如果是decimal
,则默认m是10 ,d是0
3。如果是float 和double ,则会根据插入的数值的精度来决定精度
4.定点型的精确度较高,, 货币运算可以

原则:所选择的类型越简单越好,能保存的数值的类型越小越好

三、字符型

较短的文本:char varchar
特点:
char char(m) m:最大的字符数,可以省略,默认为1 固定长度的字符 比较耗费空间 效率高
varcgar varchar(m) m:最大的字符数 可变长度的字符 比较节省空间 效率低

较长的文本: text blob(较大的二进制)

四、日期型

分类:
date :只保存日期
time:只保存时间
year:只保存年
datetime:日期加时间
timestamp:日期加时间
特点 字节 范围 时区等影响
datetime 8 1000—9999 不受
timestamp 4 1970—2038 受

四、 常见约束

含义:一种限制,用于限制表中数据,为了保证表中数据的准确性和可靠性
分类:六大约束
not null :非空 保证该字段的值不能为空 例:姓名学号
default: 默认 用于保证该字段有默认值 例 :性别
primary key: 主键 保证该字段的值具有唯一性,并且非空 例:学号编号
unique:保证该字段的值具有唯一性,可以为空例:座位号
check: 检查约束 (mysql中不支持)例:年龄
foreign key:外键,限制两个表的关系,保证该字段的值必须来自于主表的关联列的值。 特点:在从表添加外键约束,用于引用主表某列的值。

添加约束的时机:1.创建表时 2.修改表时
约束的添加分类
1.列级约束 :六大约束都支持,但外键约束无效果

2.表级约束:除了 非空 not null,默认default ,都支持

语法:create table 表名(
字段名,字段类型,列级约束,
字段名,字段类型,【有逗号】
【隔一行】
表级约束

**

一、创建表时添加约束*

#1.添加列级约束
/*
语法:
直接在字段名约束后面追加约束类型即可
只支持默认非空主键,默认非空,唯一

*/

CREATE DATABASE students;
USE students;
CREATE TABLE stuinfo(
id INT PRIMARY KEY,#主键
stuname VARCHAR(20) NOT NULL,#非空
gender CHAR(1) CHECK(gender='男' OR gender='女'),#检查
seat INT UNIQUE,#唯一
age INT DEFAULT 18,#默认
majorid INT  REFERENCES major(id) #外键
)
CREATE TABLE major(
id INT PRIMARY KEY,
majiorname VARCHAR(20)
);
DESC stuinfo ;

#查看表中的索引 包括主键,外键,唯一

 SHOW INDEX FROM stuinfo ;
 

#2.添加表级约束
语法:【 CONSTRAINT 约束名】 约束类型(字段名)

 DROP TABLE stuinfo
 
 CREATE TABLE stuinfo(
id INT ,
stuname VARCHAR(20), 
gender CHAR(1),
seat INT ,
age INT ,
majorid INT,

CONSTRAINT pk PRIMARY KEY(id),#主键
UNIQUE(seat),#唯一
CHECK(gender='男' OR  gender='女'),#检查
CONSTRAINT fk FOREIGN KEY (majorid) REFERENCES major(id)#外键
)

主键唯一大对比:

        保证唯一性      是否允许为空  一个表可以有多少个   是否允许组合

主键 √ × 至多有一个 √,但不推荐
唯一 √ √ 可以多个 √,但不推荐
外键:1.要求在从表设置外键关系
2.从表的外键列的类型和主表的关联列的类型要求一致兼容,名称无要求
3.主表的关联列必须是一个key 【一般是主键或唯一】
4.插入时先插主表再插从表,删除时先删从表,再删主表

二、 修改表时添加约束

语法:
1.添加列级约束
ALTER TABLE 表名 MODIFY COLUMN 字段名 字段类型 新约束;
2.添加表级约束
ALTER TABLE 表名 ADD【CONSTRAINT 约束名】 约束类型(字段名);

#1,添加非空约束
ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NOT NULL;
#2.添加默认约束
ALTER TABLE stuinfo MODIFY COLUMN age INT DEFAULT 18;
#添加主键
#(1),表级约束
ALTER TABLE stuinfo ADD PRIMARY KEY(id)
#(2).列级约束
ALTER TABLE stuinfo MODIFY COLUMN id INT PRIMARY KEY;

#3.添加外键
ALTER TABLE stuinfo ADD FOREIGN KEY (majorid) REFERENCES major(id);
    #这个地方的(majorid)指的是添加外键的列名  major(id)是指表major的列

例:向表emp2添加列dept_id,并在其中定义foreign key 约束,与之相关联的列是dept2表中的id列

alter table emp2 add column dept_id int;
alter table emp2 add constraint fk_emp2_dept2 foreign key(dept_id) references dept2(id)
                          位置             支持的约束类型              是否可以起约束名
  列级约束        列的后面        都支持,但是外键无效果      不可以
  表级约束       所有列的下面   默认非空不支持,其他ok      可以,主键没有效果

三、修改表时删除约束

#1.删除非空约束

ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NULL;

#2.删除默认约束

ALTER TABLE stuinfo MODIFY COLUMN age INT;

#3.删除主键

ALTER TABLE stuinfo DROP PRIMARY KEY;

#4.删除唯一

ALTER TABLE stuinfo DROP INDEX seat;

#5.删除外键

ALTER TABLE stuinfo DROP FOREIGN KEY fk;
#fk表示一开始 add constraint fk foreign key (majorid) references major(id)中的fk;

标识列

又称自增长列,含义:不用手动的插入值,系统提供默认的序列值

特点1.标识列必须和主键搭配吗? 不一定,但必须和一个KEY搭配
例 如:UNIQUE 外键,主键等
2.一个表中可以有多少标识列?至多一个。
3.标识列的类型 :必须是数值型
4.通过SET auto_increment_increment=3;
设置auto_incremet 的步长(初始设置,起始值为1,步长为1)
起始值不可重新设置,步长可以
但起始值可以手动更改 例先执行下1,在执行先2 其id序列为 10 13 16……

  INSERT INTO id_t VALUES(10,'join')
    INSERT INTO id_t VALUES(NULL,'join')
      

一、创建表示设置标识列 AUTO_INCREMENT

USE students;
CREATE TABLE id_t (
id INT primary key auto_increment ,
NAME VARCHAR(20)
)
INSERT INTO id_t VALUES(NULL,'join')
DROP TABLE IF EXISTS id_t
TRUNCATE TABLE id_t
SELECT * FROM id_t

二、修改表时设置标识列

ALTER TABLE id_t MODIFY COLUMN id INT PRIMARY KEY AUTO_INCREMENT;

三、修改表时删除标识列

ALTER TABLE id_t MODIFY COLUMN id INT ;

TCL:事物控制语言

事物:一个或一组sql语句组成一个执行单元,这个执行单元要么全部执行要么不执行。
事物的特性:
1.原子性:事物是不可分割的
2.一致性:事物从一个状态转移到另一个一致状态
3.隔离性:事物之间是不相关的,不相互影响
4.持久性:事物一旦提交,其永久不可改变

事物创建: 隐式事物 事物没有明显的开启和结束标识,比如insert,delete ,update 语句
显式事物
(前提:事物自动提交设置被禁止 方法: set autoconmmit=0)
步骤:
1.开启事物
set autocommit=0;
start transaction;可省略
2.编写事物中的sql语句(select,insert,update,delete)
语句1,语句2,……
3.结束事物
commit;提交事物
rollback;回滚事物
rollback to 回滚点名;
(设置回滚点: savepoint 回滚点名)

 #演示事物的使用步骤
 #开启事物
 SET autocommit=0START TRANSACTION#编写事物语句
 UPDATE account SET balance=500 WHERE NAME='赵';
 UPDATE account SET balance=1500 WHERE NAME='张';
#结束事物
COMMIT

**

演示事物的隔离和回滚在第137和138节,146节没看;

**

视图

视图:虚拟表,和普通表一样使用,通过表动态生成数据

应用场景:多个地方用到相同的场景

一、创建视图

**语法:**CREATE VIEW 视图名
AS
查询语句

特点:重用SQL
简化复杂的SQL操作
保护数据,提高安全性

#查询姓名中包含a字符的员工名,部门名和工种信息

 #1.创建视图
 CREATE VIEW v1
 AS
 SELECT last_name,department_name,job_title
 FROM employees e
 JOIN departments d
 ON e.department_id=d.department_id
 JOIN jobs j
 ON e.job_id=j.jon_id
 #2.查询
 SELECT * FROM v1 WHERE last_name LIKE '%a%';

二、修改视图

方式一:CREATE OR REPLACE VIEW 视图名
AS
查询语句;

方式二
语法: ALTER VIEW 视图名
AS
查询语句

三、删除视图

语法: DROP VIEW 视图名,视图名,……

四、查看视图

SHOW CREATE VIEW v1;

五、视图的更新

#创建一个视图
CREATE OR REPLACE VIEW myv1
AS
SELECT last_name,email ,salary*12*(1+IFNULL(commission_pct,0)) a FROM employees;

SELECT * FROM myv1;

1.插入

INSERT INTO myv1 VALUES()

2.修改(简单的可以)

UPDATE myv1 SET  

3.删除

DELETE FROM myv1 WHERE last_name='张飞';

具备以下特点的视图不允许更新:
1.包含以下SQL语句:分组函数,DISTINCT,GROUP BY ,HAVING ,UNION 或者UNION ALL
2.select 包含子查询
3. 用 JOIN
4.where 语句中的子查询引用了FROM子句中的表
5.from 一个不能更新的视图

变量

系统变量:
全局变量
会话变量
自定义变量:
用户变量
局部变量

一、系统变量

说明:变量由系统提供,不是用户定义,属于服务器层面
注意:全局变量加GLOBAL,会话级别加SESSION,如果不写默认SESSION

使用语法:
1.查看所有的系统变量

 SHOW GLOBAL |[SESSION] VARIABLES;

2.参看满足条件的部分系统变量

SHOW  GLOBAL |[SESSION] VARIABLES LIKE '%char%';

3.查看指定的某个系统变量

 SELECT @@global|SESSION系统变量名;

4.为某个系统变量赋值
方式1:

 SET GLOBAL|SESSION 系统变量名=;

方式2:

 SET @@global|SESSION.系统变量名=值;

(1)全局变量

作用域: 服务器每次启动将会为所有的全局变量赋初始值,针对于所有的会话(连接)有效
1.查看所有的全局变量

SHOW GLOBAL VARIABLES;

2.查看部分的全局变量

SHOW GLOBAL VARIABLES LIKE '%char%';

3.查看指定的全局变量的值

SELECT @@global.autocommit;

4.为某个指定的全局变量赋值

SET @@global.autocommit=0;

(2)会话变量

作用域:仅仅针对当前会话有效

1.查看所有的会话变量

SHOW SESSION VARIABLES;
SHOW VARIABLES;

2.查看部分的会话变量

SHOW VARIABLES LIKE '%char%';
SHOW SESSION VARIABLES LIKE '%char%';

3.查看指定的会话变量的值

SELECT @@session.autocommit;
SELECT @@tx_isolation;

4.为某个指定的全局变量赋值

SET @@session.autocommit=0;
SET SESSION tx_isolation='read-committed';

二、自定义变量

说明,变量是用户自己定义的,不由系统决定
使用步骤:
声明
赋值
使用(查看,比较,运算等)

(1).用户变量

作用域:针对于当前会话(连接)有效 同于会话变量
应用在任何地方,在BEGIN END里面
[1]声明并初始化
SET @用户变量名=值;
SET @用户变量名:=值;
SELECT @ 用户变量名:=值;

[2]赋值
方式一: 用SET或SELECT
SET @用户变量名=值;
SET @用户变量名:=值;
SELECT @ 用户变量名:=值;

方式二:通过SELECT INTO
SELECT 字段 INTO 变量名
FROM 表

[3]查看用户变量值
SELECT @用户变量名;

案例:

 #【1】声明并初始化
 SELECT @count:=1;
 #【2】赋值
SELECT COUNT(*) INTO @count FROM employees; #案例:讲员工表的总个数赋值给COUNT
 #【3】 查看
SELECT @count;

(2).局部变量

作用域: 仅仅在定义它BEGIN END中有效
应用在BEGIN END中的第一句话
(1)声明
DECLARE 变量名 类;
DECLARE 变量名 类型 DEFAULT 值;
(2) 赋值
方式一: 用SET或SELECT
SET @用户变量名=值;
SET @用户变量名:=值;
SELECT @ 用户变量名:=值;

方式二:通过SELECT INTO
SELECT 字段 INTO 局部变量名
FROM 表

(3)查看用户变量值

SELECT 局部变量名;

用户变量局部变量对比:
作用域 定义使用位置 语法
用户变量 当前会话 会话中的任意位置 需要加@,不需要限定类型
局部变量 BEGIN END中 BEGIN END第一句 一般不加@ ,需要限定类型

#案例:声明两个变量并赋初值,求和并打印
#1.用户变量
SET @m=1;
SET @n=2;
SET @sum=@m+@n;
SELECT @sum;
#2.局部变量 (运行不成功因为不在开头)
DECLARE m INT DEFAULT 1;
DECLARE n INT DEFAULT 2;
DECLARE SUM INT;
SET SUM =m+n;
SELECT SUM;

存储过程和函数

好处:提高代码的重用性
简化操作
减少了编译次数并减少了和服务器的连接次数,所以提高了效率

一、存储过程

含义:一般编译好的SQL语句的集合,理解成批处理语句

一、创建语句

CREATE PROCEDURE 存储过程名(参数列表)
BEGIN

  存储过程体(一组合法的SQL语句)

END

#注意:
1.参数列表包括三部分
参数模式 参数名 参数类型
举例: IN stuname VARCHAR(20)
参数模式
IN :该参数作为输入,该参数需要调用方传入值
OUT:该参数作为输出,该参数需要调用方返回值
INOUT:该参数作为输入也可以输出,该参数需要调用方传入值 和返回值
2.如果存储过程只有一句话,BEGIN END可以省略;
存储过程体中的每条SQL语句必须加分号

存储过程的结尾可以使用 DELIMITER 重新设置

语法:
DELIMITER 结束标记

案例:DELIMITER $

二、调用语法

CALL 存储过程名 (实参列表)

#1.空参列表

#案例插入到admin表中五条记录

USE girls

SELECT * FROM admin;

DELIMITER $
CREATE PROCEDURE myp1()
BEGIN
  INSERT INTO admin (username,`password`) 
  VALUES('dfg','1123'),('dfgv','2345'),
('dfgi','2349'),('digv','0345')
,('ifgv','2845');

END $

#调用
CALL myp1 $;

#2.创建带in模式参数的存储过程
案例1: 创建存储过程实现,根据女神名查询对应的男神信息
(一般在cmd里操作)

CREATE PROCEDURE myp2(IN beautyName VARCHAR(20))
BEGIN
SELECT bo.*
FROM boys bo
RIGHT JOIN beauty b ON b.boyfriend_id=bo.id
WHERE b.name=beautyName;

END $

#调用
CALL mpy2('柳岩') $

3.创建带OUT模式的存储过程
案例1:根据女神名,返回对应的男神名

USE girls;
DELIMITER $
CREATE PROCEDURE mpy3 (IN beautyName VARCHAR(20),OUT boyName VARCHAR(20))
BEGIN
 SELECT bo.boyName INTO boyName FROM boys bo
 JOIN beauty b ON bo.id=b.boyfriend_id
 WHERE b.name=beautyName;
 

END $

#调用
CALL mpy3('小昭',@bname)$
SELECT @bname$

两个 OUT 案例二:根据女神名返回对应的男神名,和男神魅力值

CREATE PROCEDURE mpy4(IN beautyName VARCHAR(20),OUT boyName VARCHAR(20),OUT usercp INT)
BEGIN
 SELECT bo.boyName,bo.userCP INTO boyName,usercp
 FROM boys bo
 JOIN beauty b ON b.boyfriend_id=bo.id
 WHERE b.name= beautyName;


END $

CALL mpy4('小昭',@bname,@usercp)$
SELECT @bname,@usercp$

#4.创建inout 模式的存储过程

案例一:传入a和b两个值,最终a,b都翻倍并返回

CREATE PROCEDURE mpy5(INOUT a INT,INOUT b INT)
BEGIN
SET a=a*2;
SET b=b*2;
END $
调用
SET @m=10$
SET @n=20$
CALL mpy5(@m,@n)$
SELECT @m,@n$

二、删除存储过程

DROP PROCEDURE  存储过程名

DROP PROCEDURE myp1;

三、查看存储过程的信息

SHOW CREATE PROCEDURE  存储过程名;
SHOW CREATE PROCEDURE mpy5;

函数

含义:一组预先编译好的sql语句的集合,理解成批处理语句

区别:
存储过程:可以有0返回,也可以有多个返回,适合做批量插入,批量更新
函数:有且仅有有一个返回,适合做处理数据后返回一个结果

一、创建语法

CREATE FUNCTION 函数名(参数列表)RETURNS 返回类型
BEGIN
函数体
END

注意:

  1. 参数列表包含两部分: 参数名 参数类型
    2.一定有RETURN语句,如果RETURN语句没有放在函数体最后,也不报错,但不建议
    3.函数体中仅有一句话,可以省略BEGIN END
    4.使用DELIMITER语句设置结束标记

二、调用语法

SELECT 函数名(参数列表)

USE MYEMPLOYEES
DELIMITER $
案例:
1.无参有返回
返回公司的员工个数

CREATE FUNCTION myf1() RETURNS INT
BEGIN
DECLARE c INT DEFAULT 0;#定义局部变量
SELECT COUNT(*) INTO c #赋值
FROM employees;
RETURN c;
END $


SELECT myf1()$

2.有参有返回
案例:根据员工名返回工资

CREATE FUNCTION myf2(emname VARCHAR(20)) RETURNS DOUBLE
BEGIN
SET @sal=0;#定义用户变量
SELECT salary INTO @sal #赋值
FROM employees
WHERE last_name=emname;

RETURN @sal;
END $

SELECT myf2('kochhar')$

案例:根据部门名返回该部门的平均工资

CREATE FUNCTION myf3(dname VARCHAR(20)) RETURNS DOUBLE
BEGIN
SET @sal=0;
SELECT AVG(salary) INTO @sal FROM employees e
JOIN departments d ON e.department_id=d.department_id
WHERE d.department_name=dname;
RETURN @sal;


END $


SELECT myf3('IT')$

三、查看函数

SHOW CREATE FUNCTION myf1;

四、删除函数

DROP FUNCTION myf1;

流程控制结构

顺序结构: 从上往下执行
分支结构: 程序从两条或多条中选择一条去执行
循环结构:程序在满足一定条件基础上,重复执行一段代码

一、分支结构

1.if函数
语法:
IF(表达式1,表达式2,表表达式3)
执行顺序,若1成立,则返回2 ,否则返回3
2.case结构
情况一: 类似Java中的switch语句,实现等值判断
语法:

CASE 变量|表达式|字段
       WHEN 要判断的值,返回的值1或语句; 
       WHEN 要判断的值,返回的值2或语句; 
       ……
       ELSE 要返回的值n;
       END CASE;

情况2:类似于IF语句,一般实现区间判断
语法:

CASE
       WHEN 要判断的条件1 THEN返回的值1或语句1WHEN 要判断的条件1 THEN返回的值2或语句2;
        ……
        ELSE返回的值n或语句n;
        END CASE;
 特点:1.可以作为表

达式,嵌套在其他语句使用,也可放在任何地方,BEGIN END 中或BEGIN END的外面
作为独立的语句使用,只可以放在BEGIN END 中。
2.else可以省略,如果ELSE省略了,其他都不满足,返回NULL。

案例:创建存储过程,根据传入的成绩,显示等级,比如成绩在90——100显示A,80-90显示B,60-80选择C,其他选择D;

CREATE PROCEDURE mfp1(IN grade INT)
BEGIN
 
 CASE 
 WHEN grade<=100 AND grade>=90 THEN SELECT 'A';
 WHEN   grade>=80 THEN SELECT 'B';
 WHEN  grade>=60 THEN SELECT 'C';
 ELSE SELECT 'D';
 END CASE;
 
END $

CALL mfp1(98)$

3. IF 结构
功能:实现多重分支

语法:

IF 条件1 THEN 语句1ELSEIF 条件2 THEN 语句2;
……
【ELSE 语句n;END IF;

应用在BEGIN END中
案例:根据传入的成绩,来显示等级,比如成绩在90——100返回a,80-90返回B,60-80返回C,其他返回D;

 CREATE FUNCTION myp2(score INT) RETURNS CHAR
 BEGIN
 
  IF score>=90 AND score<=100 THEN RETURN 'a';
  ELSEIF score>=80 THEN RETURN 'B';
  ELSEIF score>=60 THEN RETURN 'C';
  ELSE RETURN 'D';
  END IF;
 
 END $

SELECT myp2(89)$

二、循环语句

/*分类
while end,loop,repeat
循环控制:iterate 类似于continue 结束本次循环,继续下一次循环
leave 类似于 break;跳出,结束循环

1.while

语法: while 循环条件 do
循环体;
end while【标签】

联想;while(循环条件){
循环体;}

2.loop

语法:
【标签:】loop
循环体;
end loop【标签:】;

可以用来模拟简单的死循环

3.repeat

语法:
【标签:】repeat
循环体;
until 结束循环条件
end repeat 【标签:】;

#重点演示while

案例: 批量插入、根据次数,插入到admin中多条记录;

CREATE PROCEDURE myp11(IN insertaccount INT)
BEGIN  
DECLARE i INT DEFAULT 1;
a:WHILE i<=insertaccount DO
    INSERT INTO admin(username,PASSWORD) VALUES(CONCAT('rpse',i),'2222');
     SET i=i+1;
    
    END WHILE a;


END $

call myp11(100)$

2.添加LEAVE 语句
案例: 批量插入、根据次数,插入到admin中多条记录,如果次数>20则停止

DELIMITER $
CREATE PROCEDURE myp11(IN insertaccount INT)
BEGIN  
DECLARE i INT DEFAULT 1;
a:WHILE i<=insertaccount DO
    INSERT INTO admin(username,PASSWORD) VALUES(CONCAT('rpse',i),'2222');
    
    IF i>=20 THEN LEAVE a;
    END IF;
    SET i=i+1;
    
    END WHILE a;


END $

call myp11(80)$

3.添加ITERATE语句
案例: 批量插入、根据次数,插入到admin中多条记录,只插入偶数次;

CREATE PROCEDURE myp12(IN insertaccount INT)
BEGIN  
DECLARE i INT DEFAULT 0;
a:WHILE i<=insertaccount DO
    SET i=i+1;
    IF MOD(i,2)!=0 THEN ITERATE a;
    end if;
    INSERT INTO admin(username,PASSWORD) VALUES(CONCAT('rpse',i),'2222');
 END WHILE a;


END $

call myp12 (119)$

其他循环:

在这里插入图片描述

发布了31 篇原创文章 · 获赞 0 · 访问量 2680

猜你喜欢

转载自blog.csdn.net/kaxiaokui/article/details/104577957