文章目录
导出笔记百度云提取:
链接: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;
修改列的类型或约束
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=0;
START 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
注意:
- 参数列表包含两部分: 参数名 参数类型
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或语句1;
WHEN 要判断的条件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 语句1;
ELSEIF 条件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)$
其他循环: