mysql和mssql数据库快速创建表格 五
select top 0 * into testAAA FROM tbl_User --sqlserver方法一复制表结构 select * into testAAA FROM tbl_User --sqlserver复制表结构和数据 INSERT INTO testAAA SELECT * FROM tbl_User --sqlserver复制数据 CREATE TABLE testB SELECT * FROM testa limit 0; mysql复制表结构 CREATE TABLE testC SELECT * FROM testa mysql复制表结构并复制数据 INSERT INTO testB SELECT * FROM testa MySQL复制数据 还有一种方法create table if not exists good LIKE lee 创建像表Lee一样结构的good表 select ROW_NUMBER()over( partition by officeid order by userid )as id, * from tbl_User sqlserver中表示根据officeid分组 然后根据userid排序 select ROW_NUMBER()over( order by officeid )as id, * from tbl_User 根据officeid排序
MySQL实现上面两个例子用一下方法
call testrank() ---分组排序
create PROCEDURE testrank() BEGIN set @num=0; set @pdept=null; SELECT result.empid,result.deptid,result.salary,result.rank FROM (SELECT s.empid,s.deptid,s.salary, if(@pdept=s.deptid,@num:=@num+1,@num:=1) as rank, @pdept:=s.deptid FROM heyf_t10 s order by s.deptid asc ,s.salary desc )result ; end
排序
call testpaixus()
create PROCEDURE testpaixus() BEGIN set @num = 0 ; select s.empid,s.deptid,s.salary, (@num:=@num+1 )as rank from heyf_t10 s ; end
取得前一次MySQL操作所影响的记录行数
mysql_affected_rows() 返回最近一次与 连接句柄 关联的 INSERT,UPDATE 或 DELETE 查询所影响的记录行数.FOUND_ROWS() : select ROW_COUNT() : update delete insert.
FOUND_ROWS() : select
ROW_COUNT() : update delete insert.
MYSQL的函数中,SELECT是另外一个单独的函数 FOUND_ROWS() , UPDATE等是 ROW_COUNT()
--------------------------------------MySQL 的CAST()和CONVERT()函数可用来获取一个类型的值,并产生另一个类型的值。两者具体的语法如下:
1.CAST(value as type);
2. CONVERT(value, type);
就是CAST(xxx AS 类型), CONVERT(xxx,类型)。
可以转换的类型是有限制的。这个类型可以是以下值其中的一个:
二进制,同带binary前缀的效果 : BINARY
字符型,可带参数 : CHAR()
日期 : DATE
时间: TIME
日期时间型 : DATETIME
浮点数 : DECIMAL
整数 : SIGNED
无符号整数 : UNSIGNED
下面举几个例子:
例一
1mysql> SELECT CONVERT('23',SIGNED);
2+----------------------+
3| CONVERT('23',SIGNED) |
4+----------------------+
5| 23 |
6+----------------------+
71 row in set
例二
1mysql> SELECT CAST('125e342.83' AS signed);
2+------------------------------+
3| CAST('125e342.83' AS signed) |
4+------------------------------+
5| 125 |
6+------------------------------+
71 row in set
例三
1mysql> SELECT CAST('3.35' AS signed);
2+------------------------+
3| CAST('3.35' AS signed) |
4+------------------------+
5| 3 |
6+------------------------+
71 row in set
像上面例子一样,将varchar 转为int 用 cast(a as signed),其中a为varchar类型的字符串。
例4
在SQL Server中,下面的代码演示了datetime变量中,仅包含单纯的日期和单纯的时间时,日期存储的十六进制存储表示结果。
01DECLARE @dt datetime
02
03--单纯的日期
04SET @dt='1900-1-2'
05SELECT CAST(@dt as binary(8))
06--结果: 0x0000000100000000
07
08--单纯的时间
09SET @dt='00:00:01'
10SELECT CAST(@dt as binary(8))
11--结果: 0x000000000000012C
MySQL的类型转换和SQL Server一样,就是类型参数有点点不同:CAST(xxx AS 类型) , CONVERT(xxx,类型)。
MySQL prepare用法
create PROCEDURE testp19( in ids varchar(20) ) BEGIN -- DECLARE strsql VARCHAR (2000); set @strsql=concat('SELECT * from categories where id in (',ids ,')'); prepare str from @strsql; EXECUTE str; end call testp19('1,3,5') prepare strppp from 'SELECT * from categories'; EXECUTE strppp;
Mysql ON子句和USING子句
Mysql 中联接SQL语句中,ON子句的语法格式为:table1.column_name = table2.column_name。
当模式设计对联接表的列采用了相同的命名样式时,就可以使用 USING 语法来简化 ON 语法,格式为:USING(column_name)。
例如:
[sql]
SELECT f.color, c.is_primary, c.is_dark, c.is_rainbow FROM flags f INNER JOIN color c ON f.color = c.color WHERE f.country = 'China';
等价于
[sql]
SELECT f.color, c.is_primary, c.is_dark, c.is_rainbow FROM flags f INNER JOIN color c USING(color) WHERE f.country = 'China';
注意datediff 在MySQL于SqlServer中两个参数位置是相反的。
MySQL中 DATE_ADD(now(),INTERVAL 5 day) 与SqlServer中的
select dateadd(day,5,GETDATE()),select (getdate()-1) 效果是一样的
as 与=在mysql中是不同的
这里还是变量定义问题
update testa set uaddress=(select mytes as ddd from testa where id=37) where id=3 ; 这个是不行的 同一个表 update testb set uaddress=(select mytes as ddd from testa where id=37) where id=3 ; 这个是可以的两个表 create PROCEDURE testp27(in isx int) BEGIN DECLARE xxx VARCHAR(20); set xxx=(select mytes as ddd from testa where id=37); update testa set uaddress=xxx where id=isx ; end drop PROCEDURE testp27 call testp27(2) 这个可以的