金沙国际官网_金沙国际平台登录

因为这个金沙国际官网_金沙国际平台登录网站与很多的大型澳门赌场都有合作,金沙国际官网_金沙国际平台登录尽职尽责,高效执行,保持好奇心,不断学习,追求卓越,点击进入金沙国际官网_金沙国际平台登录马上体验吧,所以现在也正式地开始了营业。

您的位置:金沙国际官网 > 数据库 > 慢日志查询,SQLServer数据表用法

慢日志查询,SQLServer数据表用法

发布时间:2019-11-01 15:43编辑:数据库浏览(75)

    数据表定义

    数据表(或称表)是数据库最重要的组成部分之一,数据库中以表为组织单位存储数据,数据库只是一个框架,数据表才是其实质内容。数据库管理工具中可以显示数据库中的所有数据表,数据表是数据库中一个非常重要的对象,是其他对象的基础。

    事务

    事务用于将某些操作的多个SQL作为原子性操作,一旦有某一个出现错误,即可回滚到原来的状态,从而保证数据库数据完整性。

    图片 1图片 2

     1 delimiter \
     2 create PROCEDURE p1(
     3     OUT p_return_code tinyint
     4 )
     5 BEGIN 
     6   DECLARE exit handler for sqlexception 
     7   BEGIN 
     8     -- ERROR 
     9     set p_return_code = 1; 
    10     rollback; 
    11   END; 
    12  
    13   DECLARE exit handler for sqlwarning 
    14   BEGIN 
    15     -- WARNING 
    16     set p_return_code = 2; 
    17     rollback; 
    18   END; 
    19  
    20   START TRANSACTION; 
    21     DELETE from tb1;
    22     insert into tb2(name)values('seven');
    23   COMMIT; 
    24  
    25   -- SUCCESS 
    26   set p_return_code = 0; 
    27  
    28   END\
    29 delimiter ;
    

    支持事务的存储过程

    1 set @i =0;
    2 call p1(@i);
    3 select @i;
    

    正确使用索引

    数据库表中添加索引后确实会让查询速度起飞,但前提必须是正确的使用索引来查询,如果以错误的方式使用,则即使建立索引也会不奏效。
    即使建立索引,索引也不会生效:

     1 - like '%xx'
     2     select * from tb1 where name like '%cn';
     3 - 使用函数
     4     select * from tb1 where reverse(name) = 'wupeiqi';
     5 - or
     6     select * from tb1 where nid = 1 or email = 'seven@live.com';
     7     特别的:当or条件中有未建立索引的列才失效,以下会走索引
     8             select * from tb1 where nid = 1 or name = 'seven';
     9             select * from tb1 where nid = 1 or email = 'seven@live.com' and name = 'alex'
    10 - 类型不一致
    11     如果列是字符串类型,传入条件是必须用引号引起来,不然...
    12     select * from tb1 where name = 999;
    13 - !=
    14     select * from tb1 where name != 'alex'
    15     特别的:如果是主键,则还是会走索引
    16         select * from tb1 where nid != 123
    17 - >
    18     select * from tb1 where name > 'alex'
    19     特别的:如果是主键或索引是整数类型,则还是会走索引
    20         select * from tb1 where nid > 123
    21         select * from tb1 where num > 123
    22 - order by
    23     select email from tb1 order by name desc;
    24     当根据索引排序时候,选择的映射如果不是索引,则不走索引
    25     特别的:如果对主键排序,则还是走索引:
    26         select * from tb1 order by nid desc;
    27  
    28 - 组合索引最左前缀
    29     如果组合索引为:(name,email)
    30     name and email       -- 使用索引
    31     name                 -- 使用索引
    32     email                -- 不使用索引
    

    创建数据表

    方式一:打开数据库管理工具-》登录-》选择数据库-》选择表-》右键点击,选择新建表-》在右边视图中输入列名、数据类型、是否可空、在列属性中设置需要的属性-》点击保存(或ctrl+s)-》保存成功,刷新即可显示

    图片 3

    图片 4

    方式二:使用T-SQL脚本新建表

     1 --数据库声明
     2 use testss
     3 --建表语法声明
     4 create table test1
     5 (
     6 --字段声明
     7 id int identity(1,1) not null,
     8 name nvarchar(50) null,
     9 sex nvarchar(50) null,
    10 age nvarchar(50) null,
    11 classid int,
    12 primary key clustered(id asc) with(ignore_dup_key=off) on [primary]    --主键索引声明
    13 )on [primary]
    14 
    15 --字段注释声明
    16 exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'id主键' , @level0type=N'SCHEMA',
    17 @level0name=N'dbo', @level1type=N'TABLE',@level1name=N'test1', @level2type=N'COLUMN',@level2name=N'id';
    18 
    19 exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'姓名' , @level0type=N'SCHEMA',
    20 @level0name=N'dbo', @level1type=N'TABLE',@level1name=N'test1', @level2type=N'COLUMN',@level2name=N'name';
    21 
    22 exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'性别' , @level0type=N'SCHEMA',
    23 @level0name=N'dbo', @level1type=N'TABLE',@level1name=N'test1', @level2type=N'COLUMN',@level2name=N'sex';
    24 
    25 exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'年龄' , @level0type=N'SCHEMA',
    26 @level0name=N'dbo', @level1type=N'TABLE',@level1name=N'test1', @level2type=N'COLUMN',@level2name=N'age';
    27 
    28 exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'班级id' , @level0type=N'SCHEMA',
    29 @level0name=N'dbo', @level1type=N'TABLE',@level1name=N'test1', @level2type=N'COLUMN',@level2name=N'classid';
    30 
    31 go
    

     示例结果如下:图片 5

    函数

    MySQL中提供了许多内置函数,例如:

    图片 6图片 7

     1 CHAR_LENGTH(str)
     2         返回值为字符串str 的长度,长度的单位为字符。一个多字节字符算作一个单字符。
     3         对于一个包含五个二字节字符集, LENGTH()返回值为 10, 而CHAR_LENGTH()的返回值为5。
     4 
     5     CONCAT(str1,str2,...)
     6         字符串拼接
     7         如有任何一个参数为NULL ,则返回值为 NULL。
     8     CONCAT_WS(separator,str1,str2,...)
     9         字符串拼接(自定义连接符)
    10         CONCAT_WS()不会忽略任何空字符串。 (然而会忽略所有的 NULL)。
    11 
    12     CONV(N,from_base,to_base)
    13         进制转换
    14         例如:
    15             SELECT CONV('a',16,2); 表示将 a 由16进制转换为2进制字符串表示
    16 
    17     FORMAT(X,D)
    18         将数字X 的格式写为'#,###,###.##',以四舍五入的方式保留小数点后 D 位, 并将结果以字符串的形式返回。若  D 为 0, 则返回结果不带有小数点,或不含小数部分。
    19         例如:
    20             SELECT FORMAT(12332.1,4); 结果为: '12,332.1000'
    21     INSERT(str,pos,len,newstr)
    22         在str的指定位置插入字符串
    23             pos:要替换位置其实位置
    24             len:替换的长度
    25             newstr:新字符串
    26         特别的:
    27             如果pos超过原字符串长度,则返回原字符串
    28             如果len超过原字符串长度,则由新字符串完全替换
    29     INSTR(str,substr)
    30         返回字符串 str 中子字符串的第一个出现位置。
    31 
    32     LEFT(str,len)
    33         返回字符串str 从开始的len位置的子序列字符。
    34 
    35     LOWER(str)
    36         变小写
    37 
    38     UPPER(str)
    39         变大写
    40 
    41     LTRIM(str)
    42         返回字符串 str ,其引导空格字符被删除。
    43     RTRIM(str)
    44         返回字符串 str ,结尾空格字符被删去。
    45     SUBSTRING(str,pos,len)
    46         获取字符串子序列
    47 
    48     LOCATE(substr,str,pos)
    49         获取子序列索引位置
    50 
    51     REPEAT(str,count)
    52         返回一个由重复的字符串str 组成的字符串,字符串str的数目等于count 。
    53         若 count <= 0,则返回一个空字符串。
    54         若str 或 count 为 NULL,则返回 NULL 。
    55     REPLACE(str,from_str,to_str)
    56         返回字符串str 以及所有被字符串to_str替代的字符串from_str 。
    57     REVERSE(str)
    58         返回字符串 str ,顺序和字符顺序相反。
    59     RIGHT(str,len)
    60         从字符串str 开始,返回从后边开始len个字符组成的子序列
    61 
    62     SPACE(N)
    63         返回一个由N空格组成的字符串。
    64 
    65     SUBSTRING(str,pos) , SUBSTRING(str FROM pos) SUBSTRING(str,pos,len) , SUBSTRING(str FROM pos FOR len)
    66         不带有len 参数的格式从字符串str返回一个子字符串,起始于位置 pos。带有len参数的格式从字符串str返回一个长度同len字符相同的子字符串,起始于位置 pos。 使用 FROM的格式为标准 SQL 语法。也可能对pos使用一个负值。假若这样,则子字符串的位置起始于字符串结尾的pos 字符,而不是字符串的开头位置。在以下格式的函数中可以对pos 使用一个负值。
    67 
    68         mysql> SELECT SUBSTRING('Quadratically',5);
    69             -> 'ratically'
    70 
    71         mysql> SELECT SUBSTRING('foobarbar' FROM 4);
    72             -> 'barbar'
    73 
    74         mysql> SELECT SUBSTRING('Quadratically',5,6);
    75             -> 'ratica'
    76 
    77         mysql> SELECT SUBSTRING('Sakila', -3);
    78             -> 'ila'
    79 
    80         mysql> SELECT SUBSTRING('Sakila', -5, 3);
    81             -> 'aki'
    82 
    83         mysql> SELECT SUBSTRING('Sakila' FROM -4 FOR 2);
    84             -> 'ki'
    85 
    86     TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str) TRIM(remstr FROM] str)
    87         返回字符串 str , 其中所有remstr 前缀和/或后缀都已被删除。若分类符BOTH、LEADIN或TRAILING中没有一个是给定的,则假设为BOTH 。 remstr 为可选项,在未指定情况下,可删除空格。
    88 
    89         mysql> SELECT TRIM('  bar   ');
    90                 -> 'bar'
    91 
    92         mysql> SELECT TRIM(LEADING 'x' FROM 'xxxbarxxx');
    93                 -> 'barxxx'
    94 
    95         mysql> SELECT TRIM(BOTH 'x' FROM 'xxxbarxxx');
    96                 -> 'bar'
    97 
    98         mysql> SELECT TRIM(TRAILING 'xyz' FROM 'barxxyz');
    99                 -> 'barx'
    

    部分内置函数

    1、自定义函数

    图片 8图片 9

     1 delimiter \
     2 create function f1(
     3     i1 int,
     4     i2 int)
     5 returns int
     6 BEGIN
     7     declare num int;
     8     set num = i1 + i2;
     9     return(num);
    10 END \
    11 delimiter ;
    

    View Code

    2、删除函数

    1 drop function func_name;
    

    3、执行函数

    图片 10图片 11

    1 # 获取返回值
    2 declare @i VARCHAR(32);
    3 select UPPER('alex') into @i;
    4 SELECT @i;
    5 
    6 
    7 # 在查询中使用
    8 select f1(11,nid) ,name from tb2;
    

    View Code

     

    其他注意事项

    1 - 避免使用select *
    2 - count(1)或count(列) 代替 count(*)
    3 - 创建表时尽量时 char 代替 varchar
    4 - 表的字段顺序固定长度的字段优先
    5 - 组合索引代替多个单列索引(经常使用多个条件查询时)
    6 - 尽量使用短索引
    7 - 使用连接(JOIN)来代替子查询(Sub-Queries)
    8 - 连表时注意条件类型需一致
    9 - 索引散列值(重复少)不适合建索引,例:性别不适合
    

    删除数据表

    方式一:打开数据库管理工具-》登录-》选择数据库-》选择表-》右键点击,选择删除-》点击弹出框中的确定删除-》刷新数据库

    图片 12图片 13

    方式二:使用T-SQL脚本删除:drop table test2;

    图片 14

    limit分页

    无论是否有索引,limit分页是一个值得关注的问题

    图片 15图片 16

     1 每页显示10条:
     2 当前 118 120, 125
     3 
     4 倒序:
     5             大      小
     6    970  7 6  6 5  54  43  32
     7 19 98     
     8 下一页:
     9 
    10     select 
    11         * 
    12     from 
    13         tb1 
    14     where 
    15         nid < (select nid from (select nid from tb1 where nid < 当前页最小值 order by nid desc limit 每页数据 *【页码-当前页】) A order by A.nid asc limit 1)  
    16     order by 
    17         nid desc 
    18     limit 10;
    19 
    20 
    21 
    22     select 
    23         * 
    24     from 
    25         tb1 
    26     where 
    27         nid < (select nid from (select nid from tb1 where nid < 970  order by nid desc limit 40) A order by A.nid asc limit 1)  
    28     order by 
    29         nid desc 
    30     limit 10;
    31 
    32 
    33 上一页:
    34 
    35     select 
    36         * 
    37     from 
    38         tb1 
    39     where 
    40         nid < (select nid from (select nid from tb1 where nid > 当前页最大值 order by nid asc limit 每页数据 *【当前页-页码】) A order by A.nid asc limit 1)  
    41     order by 
    42         nid desc 
    43     limit 10;
    44 
    45 
    46     select 
    47         * 
    48     from 
    49         tb1 
    50     where 
    51         nid < (select nid from (select nid from tb1 where nid > 980 order by nid asc limit 20) A order by A.nid desc limit 1)  
    52     order by 
    53         nid desc 
    54     limit 10;
    

    View Code

    本文由金沙国际官网发布于数据库,转载请注明出处:慢日志查询,SQLServer数据表用法

    关键词: