– 多表操作一对一
create table person (
id int primary key auto_increment,
name
varchar(20)
);
create table card(
id int primary key auto_increment,
number varchar(20) unique not null,
pid int unique,
constraint cp_fk1 foreign key(pid) references person(id)
);
– 多表操作一对多
create table user
(
id int primary key auto_increment,
name
varchar(20)
);
create table orderlist(
id int primary key auto_increment,
number
varchar(20),
uid int,
constraint ou_fk1 foreign key(uid) references user(id)
);
– 多表操作多对多 需要第三张中间表 中间表的列作为外键关联其他表
create table student(
id int primary key auto_increment,
name
varchar(20)
);
create table course(
id int primary key auto_increment,
name
varchar(10)
);
create table stu_course(
id int primary key auto_increment,
sid int,
cid int,
constraint sc_fk1 foreign key(sid) references student(id),
constraint sc_fk2 foreign key(cid) references course(id)
);
– 内连接
select 列名 from 表名1 inner join 表名2 on 条件;
select 列名 from 表名1 as 别名1 inner join 表名2 as 别名2 on 条件;
– 左连接
select 列名 from 表名1 left outer join 表名2 on 条件;
– 右外连接 查询右表所有信息 以及左右表有关联的信息
select 列名 from 左表 right outer join 右表 on 关联条件;
– 子查询
select 列名 from 表名 where 列名 in (select 列名 from 表名 where 列名=值);
in 也可以是on,=
– 自关联查询
select * from 表名 as 别名1 join 表名 as 别名2 on 别名1.列名=别名2.列名;
– 视图创建
– create view 视图名称 (自定义列名可不写) as 查询语句;
– 查询视图
select * from 视图名称;
– 修改视图数据
update 视图名称 set 列名=值 where 主键列名=值;
与修改表的语法没什么区别
– 修改视图结构语法
– alter view 视图名称 (自定义列名可不写) as 查询语句;
– 存储过程
drop table if exists test_table;
create table test_table(
testDemoId int not null,
testValue varchar(255) ,
primary key(testDemoId
)
);
– 修改mysql结束符为&&
– 创建一个名叫mypro的存储过程
– 创建一个变量初始值为1
– START TRANSACTION;创建一个事务 如果不创建每次循环都会新建一个事务 那样子非常慢 可能插入超时
– 进行插入循环
delimiter $$
create procedure mypro()
begin
declare i int default 1;
START TRANSACTION;
while i<1000 do
insert into test_table(testDemoId,testValue) value(i,i);
set i=i+1; – i自增
end while;