数据库复制
#1、创建新的数据库
mysql -u root -p123456
CREATE DATABASE `new` DEFAULT CHARACTER SET UTF8 COLLATE UTF8_GENERAL_CI;
#2、使用mysqldump及mysql组合命令,完成复制
mysqldump old -u root -p123456 | mysql new -u root -p123456
#3、如果不在同一个mysql服务器上
mysqldump old -uroot -p123456 | mysql -h 10.1.1.2 new -u root -p123456
--------------------------------------------------------------------------
表复制
#mysql复制表的两种方式:
#第一、只复制表结构到新表
create table 新表 select * from 旧表 where 1=2
#或者
create table 新表 like 旧表
#第二、复制表结构及数据到新表
create table新表 select * from 旧表
--------------------------------------------------------------------------
视图
create view stu_course_grade //表明我们要创建视图并加上视图的名字
as //通过查询语句确定视图的主体内容
select student.sno,xingming,score.fengshu,course.kecheng
from student,score,course
where student.sno=score.sno and score.sno=course.sno
--------------------------------------------------------------------------
临时表
#1
CREATE TEMPORARY TABLE tmp_table (
NAME VARCHAR (10) NOT NULL,
time date NOT NULL
);
#2
CREATE TEMPORARY TABLE tmp_table select *from four;
select * from tmp_table;
--------------------------------------------------------------------------
游标
例:
declare productcursor cursor scroll --第一步:声明游标
for
select * from productinfo where vendname='上海华测'
GO
open productcursor --第二步:打开游标
Go
--读取数据开始 --第三步:获取数据
fetch next from productcursor --读取当前行的下一行,并使其置为当前行(刚开始时游标置于表头的前一行,即若表是从0开始的,游标最初置于-1处,所以第一次读取的是头一行)
fetch prior from productcursor --读取当前行的前一行,并使其置为当前行
fetch first from productcursor --读取游标的第一行,并使其置为当前行(不能用于只进游标)
fetch last from productcursor --读取游标的最后一行,并使其置为当前行(不能用于只进游标)
fetch absolute 2 from productcursor --读取从游标头开始向后的第2行,并将读取的行作为新的行
fetch relative 3 from productcursor --读取从当前行开始向后的第3行,并将读取的行作为新的行
fetch relative-2 from productcursor --读取当前行的上两行,并将读取的行作为新的行
--读取数据结束
GO
close productcursor --第四步:关闭游标
Go
deallocate productcursor --第五步:删除游标
Go
声明:
declare 游标名 cursor [LOCAL | GLOBAL][FORWARD_ONLY | SCROLL][STATIC | KEYSET | DYNAMIC ] [READ_ONLY | SCROLL_LOCKS]
for selet语句 [for update[of 列名[,列名]]
/* 注:LOCAL 局部游标 GLOBAL 全局游标
FORWARD_ONLY 仅向前 SCROLL 滚动
STATIC 静态 KEYSET 键集 DYNAMIC 动态
READ_ONLY 只读 SCROLL_LOCKS 锁定游标当前行*/
打开游标:
Open Cursorname
取出数据:
FETCH [[NEXT | PRIOR | FIRST | LAST | ABSOLUTE{ n | @nvar | RELATIVE { n | @nvar}]
From ] 游标名 [into 变量]
/*注:
NEXT 下一行 PRIOR 上一行 FIRST 第一行
LAST 最后一行 ABSOLUTE n 第n行
RELATIVE n 当前位置开始的第n行
into 变量 把当前行的各字段值赋值给变量
ABSOLUTE { n | @nvar }:如果n或@nvar为正,则返回从游标头开始向后n行的第n行,并将返回行变成新的当前行。如果n或@nvar为负,则返回从游标末尾开始向前的n行的
第n行,并将返回行变成新的当前行。如果n或@nvar为0,则不返回行。n必须是整数常量,并且@nvar的数据类型必须为int、tinyint或smallint.
RELATIVE { n | @nvar }:如果n或@nvar为正,则返回从当前行开始向后的第n行。如果n或@nvar为负,则返回从当前行开始向前的第n行。如果n或@nvar为0,则返回当前行,
对游标第一次提取时,如果在将n或@nvar设置为负数或0的情况下指定FETCH RELATIVE,则不返回行,n必须是整数常量,@nvar的数据类型必须是int、tinyint或smallint.
*/
关闭游标:
Close Cursorname
删除游标:
Deallocate Cursorname
--------------------------------------------------------------------------
存储过程
创建:
-- 创建存储过程
DELIMITER $ --声明存储过程的结束符
CREATE PROCEDURE stu_test(in num1 int,out str varchar(20)) --存储过程名称(参数列表)
BEGIN --开始
-- 可以写多个sql语句 -- sql语句+流程控制
END $ --结束 结束符
/*参数:
IN: 表示输入参数,可以携带数据带存储过程中
OUT: 表示输出参数,可以从存储过程中返回结果
INOUT: 表示输入输出参数,两者结合*/
执行:
call stu_testIf(2,@str);
select @st;
删除:
drop procedure stu_inout;
--------------------------------------------------------------------------
触发器:
创建:
CREATE TRIGGER 触发器名 BEFORE|AFTER 触发事件
ON 表名 FOR EACH ROW
BEGIN
执行语句列表
END
查看:
SHOW TRIGGERS --语句查看触发器信息
删除:
DROP TRIGGER trig_book2 ;
--------------------------------------------------------------------------
表连接
1.外连接
外连接包括三种,分别是左外连接、右外连接、全外连接。
对应的sql关键字:LEFT/RIGHT/FULL OUTER JOIN,通常我们都省略OUTER关键字,写成LEFT/RIGHT/FULL JOIN。
#左连接
select * from TableA left join TableB on TableA.id=TableB.id
#右连接
select * from TableA right join TableB on TableA.id=TableB.id
#全连接
select * from TableA full join TableB on TableA.id=TableB.id
二.内连接
#只保留两表符合相等条件的行
select * from TableA JOIN TableB on TableA.id=TableB.id
三.交叉连接
#A表3行, B表4行,交叉连接后3*4=12行
select * from TableA cross join TableB