找回密码
 立即注册

推荐阅读

  • 便民服务
  • 关注我们
  • 社区新手
外键作用:外键作用在于能够将在数据库中是对表关系进行解耦,尽量让表 记录的数据单一化。外键的主要作用是:保持数据的一致性、完整性
创建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)







分享至 : QQ空间
收藏

0 个回复

您需要登录后才可以回帖 登录 | 立即注册