• 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)  这个可以的
  • 相关阅读:
    在Windows .NET平台下使用Memcached
    Windows下配置使用MemCached
    B/S 网站技术选型
    HttpHandler与HttpModule的用处与区别
    TCP长连接与短连接的区别
    页和区 sql server
    聚集索引和非聚集索引的区别
    MicrosoftSQLServer中的锁模式
    我是如何在SQLServer中处理每天四亿三千万记录的
    datetime模块处理时间
  • 原文地址:https://www.cnblogs.com/xiaohuasan/p/6378451.html
Copyright © 2020-2023  润新知