zoukankan      html  css  js  c++  java
  • MySQL基本语句


    1. 1、创建数据库
      1. Create DATABASE database-name
      2、删除数据库
      1. drop database dbname
      3、备份sql server
      1. /* 备份 */
      2. backup database Test to disk='D:/Test.bak'
      3. 3.
      4. /* 还原 */
      5. restore database Test from disk='D:/Test.bak'



    4、创建新表

    create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)

      根据已有的表创建新表:

    Acreate table tab_new like tab_old (使用旧表创建新表)

    Bcreate table tab_new as select col1,col2… from tab_old definition only


    举例:

    1. CREATE TABLE `tb_agent_promotion_buy_day_snapshot` (
    2. `id` bigint(20) NOT NULL AUTO_INCREMENT,
    3. `record_date` date NOT NULL DEFAULT '0000-00-00',
    4. `agent_id` bigint(20) NOT NULL DEFAULT '0',
    5. `promotion_id` bigint(20) NOT NULL DEFAULT '0',
    6. `parent_agent_id` bigint(20) NOT NULL DEFAULT '0',
    7. `player_id` bigint(20) NOT NULL DEFAULT '0',
    8. `buy_cards` int(11) NOT NULL DEFAULT '0',
    9. `buy_count` int(11) NOT NULL DEFAULT '0',
    10. `history_buy_cards` int(11) NOT NULL DEFAULT '0',
    11. `history_buy_count` int(11) NOT NULL DEFAULT '0',
    12. `create_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
    13. `last_mod_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    14. PRIMARY KEY (`id`),
    15. UNIQUE KEY `uk_promotion_player` (`promotion_id`,`player_id`,`record_date`) USING BTREE,
    16. KEY `idx_agent_id` (`agent_id`),
    17. KEY `idx_parent_agent_id` (`parent_agent_id`)
    18. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;


    5、删除新表

    drop table tabname

    6、增加一个列

    Alter table tabname add column int

      注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。



    在特定的字段后面增加:alter table newexample add address varchar(110) after stu_id;


    特定字段增加多列: alter table gamesnapshot.tb_agent_promotion_player_snapshot add sale_game_count int(11) NOT NULL DEFAULT '0' after sales,

    add month_sale_game_count int(11) NOT NULL DEFAULT '0' after month_sales;



    7、添加主键: Alter table tabname add primary key(col)

      删除主键: Alter table tabname drop primary key(col)

    8、创建索引:create [unique] index idxname on tabname(col….)

      删除索引:drop index idxname

      注:索引是不可更改的,想更改必须删除重新建。

    9、创建视图:create view viewname as select statement

      删除视图:drop view viewname

    10、几个简单的基本的sql语句

      选择:select * from table1 where 范围

      插入:insert into table1(field1,field2) values(value1,value2)

      删除:delete from table1 where 范围

      更新:update table1 set field1=value1 where 范围

      查找:select * from table1 where field1 like ’%value1%’ ---like的语法很精妙,查资料!

      排序:select * from table1 order by field1,field2 [desc]

      总数:select count as totalcount from table1

      求和:select sum(field1) as sumvalue from table1

      平均:select avg(field1) as avgvalue from table1

      最大:select max(field1) as maxvalue from table1

      最小:select min(field1) as minvalue from table1

    11、几个高级查询运算词

    A UNION 运算符

    UNION 运算符通过组合其他两个结果表(例如 TABLE1  TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL  UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2

    B EXCEPT 运算符

    EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL  EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。

    C INTERSECT 运算符

    INTERSECT 运算符通过只包括 TABLE1  TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL  INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。

      注:使用运算词的几个查询结果行必须是一致的。

    12、使用外连接

    Aleft outer join

      左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。

    SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c

    Bright outer join:

      右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。

    Cfull outer join

      全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。

     

    Dinner join
       

    内联

     

     

    所有外链接:http://www.3lian.com/edu/2013/05-14/69869.html


      二、提升

    1、复制表(只复制结构,源表名:新表名:b) (Access可用)

      法一:select * into b from a where 1<>1

      法二:select top 0 * into b from a

    2、拷贝表(拷贝数据,源表名:目标表名:b) (Access可用)

    insert into b(a, b, c) select d,e,f from b;

    3、跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)

    insert into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件

      例子:..from b in ‘"&Server.MapPath("."&"data.mdb" &"‘ where..

    4、子查询(表名1表名2b)

    select a,b,c from a where a IN (select d from b 或者: select a,b,c from a where a IN (1,2,3)

    5、显示文章、提交人和最后回复时间

    select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b

    6、外连接查询(表名1表名2b)

    select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c

    7、在线视图查询(表名1a

    select * from (Select a,b,c FROM a) T where t.a > 1;

    8between的用法,between限制查询数据范围时包括了边界值,not between不包括

    select * from table1 where time between time1 and time2

    select a,b,c, from table1 where a not between 数值1 and 数值2

    9in 的使用方法

    select * from table1 where a [not] in (‘1’,’2’,’4’,’6’)

    10、两张关联表,删除主表中已经在副表中没有的信息

    delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1

    11、四表联查问题:

    select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....

    12、日程安排提前五分钟提醒

    SQL: select * from 日程安排 where datediff(‘minute‘,f开始时间,getdate())>5

    13、一条sql 语句搞定数据库分页

    select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段

    14、前10条记录

    select top 10 * form table1 where 范围

    15、选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)

    select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)

    16、包括所有在 TableA 中但不在 TableBTableC 中的行并消除所有重复行而派生出一个结果表

    (select a from tableA except (select a from tableB) except (select a from tableC)

    17、随机取出10条数据

    select top 10 * from tablename order by newid()

    18、随机选择记录

    select newid()

    19、删除重复记录

    Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)

    20、列出数据库里所有的表名

    select name from sysobjects where type=‘U‘

    21、列出表里的所有的

    select name from syscolumns where id=object_id(‘TableName‘)

    22、列示typevenderpcs字段,以type字段排列,case可以方便地实现多重选择,类似select 中的case

    select type,sum(case vender when ‘A‘ then pcs else 0 end),sum(case vender when ‘C‘ then pcs else 0 end),sum(case vender when ‘B‘ then pcs else 0 end) FROM tablename group by type

      显示结果:

    type vender pcs

      电脑 A 1

      电脑 A 1

      光盘 B 2

      光盘 A 2

      手机 B 3

      手机 C 3

    23、初始化表table1

    TRUNCATE TABLE table1

    24、选择从1015的记录

    select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc

      三、技巧

    11=11=2的使用,在SQL语句组合时用的较多

    “where 1=1” 是表示选择全部 “where 1=2”全部不选,

      如:

    if @strWhere !=‘

    begin

    set @strSQL = ‘select count(*) as Total from [‘ + @tblName + ‘] where ‘ + @strWhere

    end

    else

    begin

    set @strSQL = ‘select count(*) as Total from [‘ + @tblName + ‘]‘

    end

      我们可以直接写成

    set @strSQL = ‘select count(*) as Total from [‘ + @tblName + ‘] where 1=1 安定 ‘+ @strWhere

    2、收缩数据库

    --重建索引

    DBCC REINDEX

    DBCC INDEXDEFRAG

    --收缩数据和日志

    DBCC SHRINKDB

    DBCC SHRINKFILE

    3、压缩数据库

    dbcc shrinkdatabase(dbname)

    4、转移数据库给新用户以已存在用户权限

    exec sp_change_users_login ‘update_one‘,‘newname‘,‘oldname‘

    go

    5、检查备份集

    RESTORE VERIFYONLY from disk=‘E:dvbbs.bak‘

    6、修复数据库

    Alter DATABASE [dvbbs] SET SINGLE_USER

    GO

    DBCC CHECKDB(‘dvbbs‘,repair_allow_data_loss) WITH TABLOCK

    GO

    Alter DATABASE [dvbbs] SET MULTI_USER

    GO

    7、日志清除

    SET NOCOUNT ON

    DECLARE @LogicalFileName sysname,

    @MaxMinutes INT,

    @NewSize INT

    USE tablename -- 要操作的数据库名

    Select @LogicalFileName = ‘tablename_log‘, -- 日志文件名

    @MaxMinutes = 10, -- Limit on time allowed to wrap log.

    @NewSize = 1 -- 你想设定的日志文件的大小(M)

    -- Setup / initialize

    DECLARE @OriginalSize int

    Select @OriginalSize = size

    FROM sysfiles

    Where name = @LogicalFileName

    Select ‘Original Size of ‘ + db_name() + ‘ LOG is ‘ +

    CONVERT(VARCHAR(30),@OriginalSize) + ‘ 8K pages or ‘ +

    CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + ‘MB‘

    FROM sysfiles

    Where name = @LogicalFileName

    Create TABLE DummyTrans

    (DummyColumn char (8000) not null)

    DECLARE @Counter INT,

    @StartTime DATETIME,

    @TruncLog VARCHAR(255)

    Select @StartTime = GETDATE(),

    @TruncLog = ‘BACKUP LOG ‘ + db_name() + ‘ WITH TRUNCATE_ONLY‘

    DBCC SHRINKFILE (@LogicalFileName, @NewSize)

    EXEC (@TruncLog)

    -- Wrap the log if necessary.

    WHILE @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- time has not expired

    AND @OriginalSize = (Select size FROM sysfiles Where name = @LogicalFileName)

    AND (@OriginalSize * 8 /1024) > @NewSize

    BEGIN -- Outer loop.

    Select @Counter = 0

    WHILE ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))

    BEGIN -- update

    Insert DummyTrans VALUES (‘Fill Log‘)

    Delete DummyTrans

    Select @Counter = @Counter + 1

    END

    EXEC (@TruncLog)

    END

    Select ‘Final Size of ‘ + db_name() + ‘ LOG is ‘ +

    CONVERT(VARCHAR(30),size) + ‘ 8K pages or ‘ +

    CONVERT(VARCHAR(30),(size*8/1024)) + ‘MB‘

    FROM sysfiles

    Where name = @LogicalFileName

    Drop TABLE DummyTrans

    SET NOCOUNT OFF

    8、更改某个表

    exec sp_changeobjectowner ‘tablename‘,‘dbo‘

    9、存储更改全部表

    Create PROCEDURE dbo.User_ChangeObjectOwnerBatch

    @OldOwner as NVARCHAR(128),

    @NewOwner as NVARCHAR(128)

    AS

    DECLARE @Name as NVARCHAR(128)

    DECLARE @Owner as NVARCHAR(128)

    DECLARE @OwnerName as NVARCHAR(128)

    DECLARE curObject CURSOR FOR

    select ‘Name‘ = name,

    ‘Owner‘ = user_name(uid)

    from sysobjects

    where user_name(uid)=@OldOwner

    order by name

    OPEN curObject

    FETCH NEXT FROM curObject INTO @Name, @Owner

    WHILE(@@FETCH_STATUS=0)

    BEGIN

    if @Owner=@OldOwner

    begin

    set @OwnerName = @OldOwner + ‘.‘ + rtrim(@Name)

    exec sp_changeobjectowner @OwnerName, @NewOwner

    end

    -- select @name,@NewOwner,@OldOwner

    FETCH NEXT FROM curObject INTO @Name, @Owner

    END

    close curObject

    deallocate curObject

    GO

    10SQL SERVER中直接循环写入数据

    declare @i int

    set @i=1

    while @i<30

    begin

    insert into test (userid) values(@i)

    set @i=@i+1

    end


    MYSQL整体备份:



    11、使用procedure analyse()分析mysql给出的关于表结构的优化建议

    ag:select player_id from tb_access_log procedure analyse()





  • 相关阅读:
    arcgis api 3.x for js 入门开发系列八聚合效果(附源码下载)
    arcgis api 3.x for js 入门开发系列七图层控制(附源码下载)
    arcgis api 3.x for js 入门开发系列六地图分屏对比(附源码下载)
    arcgis api 3.x for js 入门开发系列五地图态势标绘(附源码下载)
    arcgis api 3.x for js 入门开发系列四地图查询(附源码下载)
    Java里面获取当前服务器的IP地址
    Flutter at Google I/O 2018
    Modbus RTU 协议使用汇总
    plsql 创建表空间、用户、赋予权限
    Oracle:ODP.NET Managed 小试牛刀
  • 原文地址:https://www.cnblogs.com/tangbinghaochi/p/6292948.html
Copyright © 2011-2022 走看看