外键作用:外键作用在于能够将在数据库中是对表关系进行解耦,尽量让表 记录的数据单一化。外键的主要作用是:保持数据的一致性、完整性
创建dcs1表
create table dcs1(id int(4)PRIMARY key,name varchar(10))
ENGINE=INNODB ;
创建dcs2表(创表时创建外键)
dcs2表,里面包含sid,name,然后建立外键
create table dcs2(sid int(4)primary key,sname varchar(10),CONSTRAINT fk_sid
FOREIGN key(sid)REFERENCES dcs1(id))ENGINE=INNODB;
给子表创建一个外键,外键名字叫xx 并且子表的外键字段为sid,对应主表的主键名
字为id
数据库有的版本有时默认存储引擎为MyISAM,这时我们外键就会不起作用,所
有我们在建表时要将存储引擎改为Innodb;具体操作见上创表的sql语句中有体现
添加外键:
alter table 表名 add constraint foreign key(sid) reference dcs1(id);
删除外键:
alter table 表名 drop foreign key 外键名;
九、存储过程
1.什么是存储过程
存储过程是完成特定功能的sql语句集合。通过编译后存储在数据
库中,通过指定的存储过程名称调用执行它。
存储过程=sql语句集合+控制语句
2. Mysql5.0版本后支持存储过程
3.使用存储过程的优点
3.1存储过程创建可以多次调用,不需要重新编写存储过程语句
创建一个存储过程:
create procedure 存储过程名(参数,数据类型)
begin
end
定义语句:declare a int(4) default(select count(*) from mm);
sql 语句段写在begin end 中间,declare 必须写在gegin之后,需要写在其他语句之前
调用一个存储过程:
call 存储过程名(参数);
删除一个存储过程:
a:
drop procedure if exists 存储过程名;
b:
drop procedure 存储过程名;
if语句:
if 语句可进行分支:
if 条件a then
else if 条件b then
else select * from student;
end if;
end if;
while语句:
while 语句在满足条件时进行,不满足条件时推出:
while i>10 do
select * from dd where id=i;
set i=i+1;
end while
实战演练:
存储过程题目:现在有一个user用户表,需要往user表中插入1000个登录
用户
要求如下:
1、在插入用户前先判断是否存在1000个登录用户,如果存在则统计表中实
际的行数、如若不存在则自动补齐剩余的数据
2、表名为user,存储过程名字随意取,表中字段有id user_name user_pwd
verify 格式如下(1,user1,123456,W4E38J),且id、用户名不能重复,verify
验证码字段为随机生成6位数验证码
CONCAT函数 可以把2个字符串进行连接。
drop procedure if exists random_user;
create procedure random_user(n int)
begin
declare i int(20) default(select count(*) from user); #查user表的行数
declare j varchar(20) default ""; #对j进行初始化
declare x varchar(20) default "";
/*drop table if exists user;
create table user(id int(20) primary key auto_increment,user_name varchar(20), user_pwd varchar(20),verify varchar(20));
insert into user values(1,"user1",123456,"W4E38J");*/
#select * from user;
if i>=n then
select count(*) from user;
else
while n > i do
set j = (select CONCAT("user",i+1));
set x = (select rand_str(6)); #第一种方法
#set x = (select substring(md5(rand()), 1, 6)); #第二种方法
#set x = (SELECT SUBSTRING(UUID(),1,6)); #第三种方法
insert into user(user_name,user_pwd,verify)values(j,123456,x);
set i = i + 1;
end while;
select * from user;
end if;
end
call random_user(1000)
|
|