创建一张表,表的字段和数据来查询语句
语法:create table 表名 as select 星号 from 另一张表 where 1=1; 创建一张表会把另一张表中的字段和对应的数据全部复制过去
如果我们只想要字段,不要数据
create table 表名 as select * from 另一张表 where 1=2;
如果我只想还要个别字段
create table 表名 as select 表名.字段名,表名.字段名2 from 另一张表 where 1=2;
我创建的这张表也可以来自一个子查循
create table 表名 as 子查询
存储过程
概念:储过程是数据库中的一个对象,存储在服务端,用来封装多条SQL语句且带有逻辑性,可以实现一个功能,由于他在创建时,就已经对SQL进行了编译,所以执行效率高,而且可以重复调用,类似与我们Java中的方法`
语法:DELIMITER $$
CREATE
PROCEDURE `performance_schema`.`myTestPro`()
BEGIN
END$$
DELIMITER ;
注意:创建过程需要管理员分配权限
所用到的参数:
in:输入参数
out:输出参数
inout:输入输出参数
例如:
DELIMITER $$
CREATE
PROCEDURE `performance_schema`.`myTestPro`(IN num INT,OUT r INT)
BEGIN
DELETE FROM emp WHERE empno=num; 删除指定数据
SELECT COUNT(*) FROM emp INTO r;
END$$
DELIMITER ;
调用存储过程: call
删除存储过程利用 drop drop procedure MytextPro;
带有逻辑的存储过程
带有if逻辑的存储
DELIMITER $$
CREATE PROCEDURE pro_testIf(IN num INT,OUT str VARCHAR(20))
BEGIN
IF num=1 THEN
SET str='星期一';
ELSEIF num=2 THEN --注意elseif 连在一块
SET str='星期二';
ELSEIF num=3 THEN
SET str='星期三'; -- 注意要用分号结束
ELSE
SET str='输入错误';
END IF; -注意要结束if 后面有分号
END $$
写入值需要set
带有while的存储过程
DELIMITER $
CREATE PROCEDURE pro_testWhile(IN num INT,OUT result INT)
BEGIN
-- 定义一个局部变量
DECLARE i INT DEFAULT 1;
DECLARE vsum INT DEFAULT 0;
WHILE i<=num DO
SET vsum = vsum+i;
SET i=i+1;
END WHILE; -- 要记得结束循环
SET result=vsum;
END $
再循环语句中可以利用两个关键字来控制循环
leave 相当于java中的 break
iterate相当于java中的continue
变量
全局变量:可以再多个会话中去访问它
查看所有全局变量: show variables
查看某个全局变量: select @@变量名
修改全局变量: set 变量名=新值
character_set_client: mysql服务器的接收数据的编码
character_set_results:mysql服务器输出数据的编码
SET character_set_client=gbk –设置数据库编码
SELECT @@character_set_client --查看数据库编码
会话变量: 只存在于当前客户端与数据库服务器端的一次连接当中。如果连接断开,那么会话变量全部丢失!
定义会话变量: set @变量=值
查看会话变量: select @变量
局部变量:在存储过程中使用的变量(只要存储过程执行完毕,局部变量就丢失)
定义局部变量的语法:DECLARE i INT DEFAULT 1;
给变量设置值 set i=10;