您的位置:68399皇家赌场 > 虚拟主机 > 郝斌–SQL Server2007学习笔记

郝斌–SQL Server2007学习笔记

发布时间:2019-05-07 08:36编辑:虚拟主机浏览(135)

    日增中间表之后: 中间表与老师表形成了一对多的涉及: 而且中间表是多表,维护了能够唯1找到一表的关联; 同样的,学生表与中间表也是三个1对多的关系: 1对多的涉嫌足以包容到关联表之间的数据.

    Having子句

    用来给分组织设立置标准

    示例:

    SELECT age,name from student group by age,name having name = '小李'
    

    3、表与表的关联

          通过安装分裂情势的外键来呈现表与表的不等关系。

    (1)一对一

            既能够把表A的主键作为表B的外键,也可把表B的主键作为表A的外键。

    (2)一对多

            将表A的主键增添到表B作为表B表的外键,要在“多”的1方加多外键。

    (3)多对多

            多对多必须透过单独的一张表来表示。

            举个例子:班级和教育工作者  –>  班级是一张表,教师是一张表,班级与导师的关系也是一张表。

    JAVA连接MySQL

    JDBC:JAVA DataBase Connectivity,Java应用程序接口,用来实行SQL语句

     

    视图

    在咱们数据库中其实存在许多的物理表。而视图正是凭仗物理表的查询结果,来变化的一张虚拟的数据表。

    贰、MS图形化操作

    第8章 函数

    数值类型函数

    # 绝对值函数
    select abs(-21), abs('-1'), abs(-91/4);
    # 取余函数
    select mod(10,3);
    # 平方根函数
    select sqrt(100);
    # 随机数函数
    select rand(), rand(2);
    # 四舍五入函数
    select round(4.5123,2);
    # 符号函数
    select sign('21');
    # 幂函数
    select power(8, 2);
    # 对数运算函数
    select log(5, 25);
    # pi
    select pi();
    # 三角函数
    select sin(pi()/2), sin(pi());
    # 获取最小正数
    select ceil(4.5);
    

    字符串函数

    # 合并字符串
    select concat('this','is','a','test');
    
    #计算长度,
    select length('1234');          --以字符为单位
    select char_length('1234');     --以字节为单位
    
    # 大小写转换
    select upper('abcd测试');
    select lower('ABCD测试');
    
    # 获取指定长度字符串
    select left(str, len);
    right(str, len);
    
    # 填充字符串
    lpad(str, len, padstr) -- 左边填充,若str<len则str保留len长度
    rpad(str, len, padstr)
    
    # 删除指定字符,,默认删除两端空格
    trim(both | leading |trailing remstr from str)
    
    # 删除字符串前端或后端的空格
    ltrim(str)
    rtrim(str)
    
    # 重复生成字符串
    repeat (str, count)
    
    # 空格函数
    space(num)
    
    # 替换函数
    replace(str, from_str, to_str)
    
    # 插入函数,将从pos起的len长度字符串替换
    INSERT(str, pos, len, newstr)
    
    # 比较字符串大小
    strcmp(str1, str2)
    
    # 获得子串,len参数可以省略
    substring(str, pos, len)
    
    # 逆序
    reverse(str)
    
    # 返回指定字符串位置的函数,返回位置序号1-2..
    field(str, str_1, str_2)
    

    日子和时间

    # 返回指定日期对应的工作日索引
    select dayofweek('2011-11-11')          --1表示周日,7表示周六
    select weekday(date)                   --0表示周一,6表示周日
    
    # 返回每月的日索引
    select dayofmonth('2007-3-20');
    
    # 年的日索引
    select dayofyear('2011-1-1');
    
    # 月份
    select month('2011-1-1');
    
    # 月名称
    select monthname('2011-1-1');
    
    # 星期几名称
    select dayname('2011-1-1');
    
    # 季度
    slelect quarter('2011-1-1');
    
    # 年份
    select year('2011-1-1');
    
    # 小时
    select hour('2011-1-1 12:22:00');
    
    # 分钟
    select minute('2011-1-1 12:22:00');
    select second(t'2011-1-1 12:22:00');
    
    # 增加月 date格式YYMM 或者 YYYYMM
    select period_add(201201, 5);
    
    # 取月份差 date格式YYMM 或者 YYYYMM
    select period_diff(1201,1206)
    
    # 返回当前日期函数
    select curdate();
    
    # 当前时间函数
    select curtime()
    
    # 当前日期时间
    select now()
    select sysdate()
    
    # 秒转换成时间
    select sec_to_time(seconds)
    
    # 时间转化成秒 格式:HH:MM:SS
    select time_to_sec(time)
    

    别的函数

    # 返回当前用户名
    select session_user();
    
    # 返回当前数据库
    database();
    
    # 返回字符串的md5校验
    select md5('md5test');
    

    一张表中(A)的一条记下可见对应另外一张表(B)中的多条记下; 同时B表中的一条记下也能对应A表中的多条记下: 多对多的关联

    语法:

    SELECT <字段列表> FROM <第一张表> <连接类型> <第二张表> <ON 连接条件>
    

        数据库(Database)狭义上是指累积数据的酒店,广义上带有对数据开始展览仓库储存和治本的软件(DBMS)和数量自个儿。数据库由关系操作组成。

    第一章 数据表的制造、修改删除

    数据类型

    数值类型

    • 整数:int、tinyint、smallint、bigint
    • 小数:decimal、float、double

    字符串类型
    char、varchar、binary、varbinary、blob(tinyblob、blob、mediumblob、longblob)、text(tinytext、text、mediumtext、longtext)

    日期类型
    datetime、date、timestamp、time

    枚举类型:enum
    聚拢类型:set
    位类型:bit、bool

    成立数据表

    # 创建数据表语法规则
    create TABLE table_name(
        column_name datatype,
        column_name datatype,
    );
    

    修改数据表

    # 修改表名称
    alter table table_name rename table_new_name;
    
    # 修改数据表语法
    ALTER TABLE table_name ADD column_name datatype;   --增加列
    ALTER TABLE table_name MODIFY column_name datatype;--修改列
    ALTER TABLE table_name DROP COLUMN column_name;     --删除列
    # 修改表中字段的名字
    ALTER TABLE table_name CHANGE old_colname new_colname datatype;
    
    ALTER TABLE product_info MODIFY proname varchar(30);
    ALTER TABLE product_info CHANGE proname pronamenew varchar(30);
    
    # 修改字段顺序
    ALTER TABLE 表名 MODIFY 字段名1 数据类型 FIRST | AFTER 字段名2;
    

    删除数据表

    DROP TABLE table_name;
    

    左表 [inner] join 右表 on 左表.字段 = 右表.字段; on表示连接条件: 条件字段就是意味着萧规曹随的事情含义(如my_student.c_id和my_class.id)

    创设带输入参数的积累进度

    语法

    CREATE PROC[EDURE] 存储过程名
    
    [@参数名1 数据类型 ][, [@参数名2 数据类型 ]]…
    
    AS   SQL语句序列……
    

    四、表中插入数据

            在表上右击,选用【编辑前200行】,插入多行数据时,要在多少输入完成后,单击【 * –> 执行】方可。

                              图片 1

    第21章 自定义函数

    create FUNCTION fu_name([param_name datatype[, ...]])
        RETURNS type
        routine_body
    
    # 创建函数,第一行指明结束标记
    delimiter //
    
    create FUNCTION myfstfun()
    RETURNS VARCHAR(5)
    
    BEGIN 
        RETURN 2 3;
    END//
    
    select myfstfun();
    
    # 创建带参数的函数
    DELIMITER //
    create FUNCTION
        test.myfstfun_2(in_id VARCHAR(20), in_str1 VARCHAR(20), in_str2 VARCHAR(20))
        RETURNS VARCHAR(5)
    
        begin
            DECLARE int_1 INT;
            DECLARE int_2 INT;
            IF(in_id IS NOT NULL) THEN
                select scores into int_1
                from scoresinfo
                where student_id = in_id and SUBJECT = in_str1;
                select scores into int_2
                from scoresinfo
                where student_id = in_id and SUBJECT = in_str2;
            end if;
            return int_1 int_2;
        end //
    
     select myfstfun_2('000002', '英语','数学');       
    

    函数的田间处理

    # 删除函数
    DROP {FUNCTION} [IF EXISTS]
    fn_name
    
    DELIMITER //
    DROP FUNCTION [if exists]
    myfstfun_4
    //
    
    • 基本语法

    CREATE语句

    它用来创制数据库对象

    3、update语句

    第4章 轻便询问和子查询

    运算符

    #查询信息,修改查询结果
    selcect name, expensive 5, expensive-5,subject, tel from examinfo;
    #修改信息
    UPDATE examinfo SET expense = expense  5 where name = '张三';
    # 乘除法
    select name, expensive*id, expensive/2,subject, tel from examinfo;
    select name, expensive%5,,subject, tel from examinfo;
    # 比较运算符
    select 5>10, 5 6>=10;
    select 5=10, 5<>10;
    
    # IS NULL 运算符
    select 10 IS NULL, NULL IS NULL;
    
    #BETWEEN 判断是否在某一范围内
    select 10 BETWEEN 1 and 10, 10 BETWEEN 11 and 100;
    
    #LEAST 用来得到一组数中的最小值
    select LEAST(5, 2,20), LEAST('a','b','c');
    
    # 逻辑运算符,逻辑非,NOT优先级非常低
    select NOT 10, NOT 0, NOT NULL;
    select !10, !0 ,!NULL;
    
    # 逻辑与
    select 2 and 3, 1 and 0 , NULL and 1;
    select 2 && 3, 1 && 0 , NULL && 1;
    
    # 逻辑或
    select 1 OR 2, 10 OR 0, NULL OR 2, 0 OR 0;
    select 1 || 2, 10 || 0, NULL || 2, 0 || 0;
    
    select 1 XOR 3, 2 XOR 2, NULL XOR 2, 0 XOR 1;
    
    #位运算符
    

    简言之询问

    select [* | DISTINCT | DISTINCTROW| col_name]       #去除查询结果中相同的行
    [from table_name]                                   
    [where condition]
    [group by col_name];
    #分组
    [having condition]          #分组条件语句,只能用在分组查询中,在group by后面
    [order by col_name [ASC|DESC]]
    [LIMIT [offset,] rowcount]
    
    select name subject from Examinfo;
    
    #使用别名
    select col_name1 AS 别名1, col_name2 AS 别名2...
    
    #单一条件查询数据
    select subject from examinfo where expense >100;
    
    #模糊查询,查询含有英语的信息
    select * from examinfo where subject LIKE '%英语%';
    
    # 多个条件查询
    select * from examinfo where name = '张三' OR subject ='英语口语';
    
    #查询结果排序
    select * from examinfo order by expense DESC;
    

    聚合函数

    select MAX(expense) from examinfo;
    select subject, MIN(expense) form examinfo;
    select AVG(expense) form examinfo;
    select SUM(expense) AS '总费用' from examinfo;
    select count(*) AS '报名总数' from examinfo;
    

    子查询
    查询语句中的查询语句。

    操作符 说明
    IN 表示在某一个范围内
    EXISTS 表示是否至少返回一行数据,返回则为True,否则False
    ANY(SOME) 是否至少有一条记录和ANY前面的值匹配,匹配返回True,否则False
    NOT IN
    NOT EXISTS

    常用操作符

    操作符 说明
    IN 表示在某一个范围内
    EXISTS 表示是否至少返回一行数据,返回则为True,否则False
    ANY(SOME) 是否至少有一条记录和ANY前面的值匹配,匹配返回True,否则False
    NOT IN
    NOT EXISTS
    select col_name1, col_name2, ... from table_name
    where col_name in (select ...);
    
    select * from examinfo where subject in ('数学', '英语');
    select * from examinfo where subjuect in (select name from subjectinfo);
    
    select name, expense from examinfo where exists(select * from subjectinfo where name = '数学');#true,查询examinfo全部数据!!
    
    select * from examinfo where subject = any(select name form subjectinfo);
    

    将设有传递正视的字段,以及依赖的字段本人单独收取,形成八个单身的表, 然后在急需相应的音信的时候, 使用相应的实体表的主键加进来.

    PRIMARY KEY

    安装该字段为主键

    4、View视图

          视图从代码上看是3个select语句,从逻辑上看被看做一个虚拟表看待。视图能够简化查询、制止了代码的冗余、制止了书写大盆重复的sql语句。

          视图不是物理表,是虚拟表,不建议通过视图更新视图所依赖的原始表的数量或结构。

    (壹)怎么着创造视图

      1  create view 视图的名字 as
      2      select语句  --select的前后都不能添加begin
    

    (二)注意的难点

      1 --创建视图的select语句必须为所有的计算列指定别名
      2 create  view v$_a   as   select avg(sal) as "avg_sal" from emp;
      3 
      4 create  view  v$_a  as   select avg(sal) from emp; --error
    

    (3)视图的优缺点

         视图的亮点:简化查询、扩张数量的保密性

         视图的后天不足:扩充了数据库维护的资金、视图只是简化了询问,不过并不能够加速查询的进程

    第10章 索引

    目录是有些表中一列可能若干列值的集纳和呼应的指向表中物理标记的那个值的数据页的逻辑指针清单。能够使用户急迅找到表中或索引视图的一定消息。索引包蕴从表中可能视图中一个或两个列生成的键,以及映射到钦命数量存款和储蓄地点的指针。能够明显升高数据库的查询质量,收缩查询读取的数据量,强制表中的笔录拥有唯①性,确定保证数量的完整性。

    分类

    • 普普通通索引:未有唯一性限制,允许再一次
    • 唯一索引:索引列值必要唯一,须求选择UNIQUE
    • 主键索引:特地为主键字段创立的目录
    • 全文索引:类型为FULLTEXT,可以VARCHARTEXT花色上创造

    作用

    • 增长速度数据检索速度
    • 主键约束列使用唯一索引
    • 询问中选择了order by和group by子句时,索引使用能够确定收缩查询时间
    • 表表连接查询时,创建索引列能增高表表连接速度

    注意事项

    • 目录占用数据库空间,须求记挂索引所占用的空中
    • 为增长查询速度,提议把表和表的目录放在不一致的磁盘上
    • 过多的目录能升高查询速度,可是会回落更新速度
    • 索引列应当是where子句中动用相对频仍的列
    • 始建索引的表应当是:数据大、查询频仍,但创新异常慢的表,小表不提出选用索引

    管制目录

    # 创建普通索引
    create index index_name
        on table_name (column_list(length));
    
    alter TABLE table_name
        ADD INDEX index_name(column_list);
    
    create INDEX idx_studentinfoix_one
        ON studentinfoix(NAME);
    
    ALTER TABLE studentinfoix
        ADD INDEX idx_studentinfoix_th(name(5));
    
    # 创建唯一索引
    create UNIQUE INDEX index_name
        ON table_name (column_list(length));
    
    ALTER TABLE table_name
        ADD UNIQUE INDEX index_name(column_list);
    
    create UNIQUE INDEX idx_studentinfoix_se
        ON studentinfoix (NAME, age(2), sex(1));
    
    ALTER TABLE studentinfoix
        ADD UNIQUE INDEX idx_studentinfoix_th(name(5),age(2), sex(1));
    
    # 创建主键索引
    ALTER TABLE table_name
        ADD PRIMARY KEY(column_list);
    ALTER TABLE studentinfoix
        ADD PRIMARY KEY(id(7));
    
    # 查看索引
    SHOW INDEX from tb_name;
    
    #删除索引
    DROP INDEX index_name ON table_name;
    ALTER TABLE table_name DROP INDEX index_name;
    

    班级表

    msdb

    提供了SQL Server的代表劳务中要施行的天职和调解安顿

    一、表的有关概念

         字段是多少个事物的某1特色,又称属性

         记录是字段的咬合,表示的是一个实际的职业,又称元组

         是记录的3结合,表示的是同样档期的顺序事物的集纳

    第二章 数据库创立、修改、删除

    系统数据库:mysql、test

    SHOW databases;
    # 创建数据库,制定数据库的字符集
    create DATABASE database_name character SET character_name;
    # 修改数据库使用的字符集(只能对字符集进行修改)
    ALTER DATABASE database_name character SET character_name;
    # 删除数据库
    DROP DATABASE database_name;
    

    GBK  下varchar的实际上顶配:3276陆字符

    肆、关闭游标

    close 游标名称
    

    游标使用完后,需求关闭。

    二、字段的牢笼

         约束是对贰个表中属性操作的限量,分为主键约束、外键约束、唯一约束、default约束、check约束和非空约束。

    (一)主键约束

          主键是指能唯1标志一个事物的1个字段也许七个字段的整合。若表中绝非主键,记录与记录之间能够完全同样,那样会导致数据冗余。设置主键约束,不一样意字段重复,能够制止了多少冗余。

    注:一 含有主键的表称为主键表,外键所在的表称为外键表

           二  若主键不是用来集群式服务,提出利用整型,不建议选用字符串

           叁 主键的值一般不建议修改,除非本条记录被去除

           四 主键不要定义为id,提出定义为表名id或表名_id

            伍不要使用有专门的职业含义的字段充当主键(业务主键),提出利用代理主键

    (②)外键约束

           若表中的若干个字段是根源此外若干个表的主键或唯1键,则这一个若干个字段就是外键。事物与事物之间的涉嫌是由别的键来反映的,通过外键约束从语法上保障了事务所关联的别的东西是存在的。

    注:一 外键日常是根源其余表的主键而不是唯一键,因为唯一键恐怕为null。

           贰 外键不断定来自其它的表,也恐怕来自本表的主键。

           叁删除全体外键约束的表,要先删除了那一个之外键表再删除主键表,不然会促成外键表中的多少援引战败

    (3)check约束

            保证了东西性质的取值在官方的限量以内。

    (4)default约束

            保障事物的属性一定会有几个值。

    (5)唯一约束

            保证了事物性质的取值差别意再次。SQL Server中允许当中有1列且不得不有1列为空,Oracle允许八个unique列为空。

    (6)非空约束

           须求用户在行使insert语句时必须为该属性赋予3个值,不然语法出错。字段默承认认为空。

    第14章 数据库的权柄与备份

    # 登录
    mysql -u root -p
    # 创建用户
    create USER
    'username'@'localhost' IDENTIFIED BY 'password'
    # 用户权限
    GRANT privileges
    ON databasename.tablename
    TO 'username'@'localhost'
    

    数据备份和重作冯妇

    # mysqldump备份
    mysqldump [OPTIONS] database [tables]
    mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2, DB3]
    mysqldump [OPTIONS] --all -databases [OPTIONS] 
    
    #备份一个数据库的多个表
    mysqldump -u root -p abcd1234 test_db book users>c:tabbak.sql
    # 备份多个数据库
    mysqldump -u root -p abcd1234 --databases test_db test >c:dbbak.sql
    # 备份所有数据库的结构
    mysqldump -u root -p abcd1234 -A-D>c:allbak.sql
    
    # 恢复操作
    mysql -u root -p abcd1234 test < c:tabbak.sql
    

    除去数据(删)

    waitfor等待

    当T-SQL执行到waitfor语句时,程序会进入等待情状,等侍钦赐时期今后,程序再继续施行前面的言语。

    三、连接查询

       连接查询是将七个表恐怕七个以上的表以一定的总是条件连接起来,从中搜索出满意条件的数量。

    (1)内连接

    第4章 约束

    主键约束:唯1标记表中的3个列,只好有八个主键约束,不过足以包括多列。

    create TABLE table_name{
      column_name1 datatype PRIMARY KEY,
      column_name2 datatype,
    };
    
    #联合主键
    create TABLE table_name{
      column_name1 datatype,
      column_name2 datatype,
      [CONSTRAINT constraint_name] PRIMARY KEY(column_name1, column_name2)
    };
    
    #添加主键约束
    ALTER TABLE table_name ADD CONSTRAINT pk_name PRIMARY KEY(column_name);
    
    #添加联合主键约束
    ALTER TABLE table_name ADD CONSTRAINT pk_name PRIMARY KEY(column_name1, column_name2);
    
    #删除主键约束,因为只有一个,所以不需要指定
    ALTER TABLE table_name DROP PRIMARY KEY;
    

    外键约束
    管教数量的不利。八个表之间的涉嫌,如若表A中的某列数据现身在表B中,那么A表称为父表,B表称为子表,A中的列要设置成主键约束,B表中与之一样的列本事安装为外键约束。

    create TABLE table_name{
      column_name1 datatype,
      column_name2 datatype,
      CONSTRAINT fk_name foreign key(column_name1) reference table_name1(column_name2)
    };
    
    #添加外键约束
    ALTER TABLE table_name ADD CONSTRAINT fk_name foreign key(column_name1) reference table_name2(column_name2);
    #删除外键约束
    ALTER TABLE table_name DROP foreign key fk_name;
    

    私下认可值约束

    create TABLE table_name(
    column_name1 datatype DEFAULT default_value
    );
    
    #修改默认值约束
    ALTER TABLE table_name ALTER column_name SET DEFAULT default_value;
    
    #删除默认值约束
    ALTER TABLE table_name ALTER col_name DROP default;
    

    非空约束

    create TABLE table_name{
        column_name datatype NOT NULL,
        column_name datatype 
    };
    
    #添加非空约束
    ALTER TABLE table_name MODIFY column_name datatype NOT NULL;
    

    自己探讨约束
    反省字段有效性,检查约束在表中是不见效的,依然能够插入不符合条件的数码。

    create TABLE table_name{
        column_name datatype CHECK(expression),
        column_name datatype
    };
    
    #添加表级约束
    ALTER TABLE table_name ADD CONSTRAINT ch_name CHECK(expression);
    

    唯1约束
    保险列的唯1性,能够有多少个唯1约束,允许有空值,但是只好有3个空值。

    create TABLE table_name{
        column_name datatype UNIQUE,
        column_name2 datatype
    };
    
    create TABLE table_name{
        column_name datatype,
        column_name2 datatype,
        [CONSTRAINT constraint_name] UNIQUE (column_name1, column_name2)
    };
    
    #修改时添加约束
    ALTER TABLE table_name ADD CONSTRAINT uq_name UNIQUE (column_name1, column_name2);
    
    #删除唯一约束
    DROP INDEX column_name  and table_name;
    

    实施各种: A表内连接B表,获得贰个2维表, 左连接C表变成二维表...

    DELETE语句

    delete dbo.student where id=14
    

    壹、数据库简要介绍

    第拾章 复杂查询

    分组查询:group by

    # 单列分组查询
    select subject, count(*) from studentinfo group by subject;  
    
    # 使用having的分组查询
    # where查询效率更高,因为where先过滤,再分组
    select subject, AVG(score) from studentinfo group by subject having subject = '英语';
    select subject, AVG(score) from studentinfo where subject = '英语';  
    
    # 多列分组查询
    select subject,techer, AVG(score) from studentinfo group by subject, teacher;
    
    # 分组查询后排序, order by 在所有子句后面
    select teacher,sum(score) from studentinfo group by teacher order by SUM(score) DESC;
    

    多表查询

    # 等值连接:将多个表之间的相同字段作为条件查询数据,一般是主键、外键
    select newsstudentinfo.name,subjectinfo.subjectname from newstudentinfo, subjectinfo where newstudentinfo.subjectid = subjectinfo.id;
    
    
    select newsstudentinfo.name,subjectinfo.subjectname teacherinfo.teachername from newstudentinfo, subjectinfo, teacherinfo where newstudentinfo.subjectid = subjectinfo.id and newstudentinfo.teacherid = teacherinfo.id;
    
    # 笛卡尔积:所有列的和以及行的积,没有上面的等值连接,一般没有意义
    select * from newstudentinfo, subjectinfo;
    
    # 左外链接:返回表中符合条件的记录和左表中剩下的全部记录
    select colname1, colname2
    from table_name1 left/right outer join table_name2
    on 条件
    
    # 左外连接,subjectname列可能出现null
    select newstudentinfo.name,subjectinfo.subjectname from newstudentinfo, subjectinfo left outer join subjectinfo on newstudentinfo.subjectid = subjectinfo.id;
    
    # 右外连接, name列可能出现null
    select newstudentinfo.name,subjectinfo.subjectname from newstudentinfo, subjectinfo right outer join subjectinfo on newstudentinfo.subjectid = subjectinfo.id;
    
    # 内连接:类似等值连接,都是符合条件的结果;好处是更好地明确数据表的连接方式
    select colname1, colname2...
    from table_name1 inner join table_name2 
    on 条件
    
    select newstudentinfo.name,subjectinfo.subjectname,teacherinfo.teachername
    from newstudentinfo subjectinfo inner join subjectinfo inner join teacherinfo ON newstudentinfo.subjectid = subjectinfo.id and newstudentinfo.teacherid = teacherinfo.id;
    

    合并查询结果
    UNION:连接多个查询结果,查询结果中的列数和数据类型务必一律

    select col_name from tabel_name1
    UNION[ALL]
    select col_name from table_name2;
    
    select * from subjectinfo
    UNION
    select * from teacherinfo;
    
    select id AS '编号', subjectname AS '名称' from subjectinfo
    UNION
    select * from teacherinfo;
    
    # 合并后的查询结果排序
    (select col_name from tabel_name1)
    UNION[ALL]
    (select col_name from table_name2)
    order by colname;
    
    (select id, subjectname from subjectinfo)
    UNION
    (select * from teacherinfo)
    order by id;
    
    # 限制组合查询结果的行数
    (select col_name from tabel_name1)
    UNION[ALL]
    (select col_name from table_name2)
    LIMIT 行数;
    

     图片 2

    对已存在的数据表增添check约束

    ALTER TABLE dbo.employee
    
    ADD CONSTRAINT CN_AGE_MORE_ZERO
    
    --约束的名称
    
    CHECK
    
    --说明这是一个CHECK约束
    
    (eAge>=0 AND eAge<250)
    

    在意:加多CHECK约束的时候,数据表中今后的数码必供给满足约束标准。

    三、建构外键约束

           在表结构的侧面栏右击【关系】,在弹出的窗口中设置完外键名称后,单击【表和列标准】的最右面就可以安装外键关系。

                               图片 3

            依附【外键字段所在的表是外键表,外键参照的字段所在的表称为主键表】设置表与列的关联。

                                 图片 4

             设置达成后,点击明确后,并在表设计分界面上按【Ctrl S】将设计的外键关系展开保存。

                             图片 5

           能够在表的【展现正视关系】查看表与表的借助关系

              图片 6    图片 7 

                          图 二-三-一依赖于class表的对象                                   图 二-3-二stu正视的靶子

           也足以在外键表的【键】中查阅表中的外键关系(棕黄的是主键约束、藏水绿的是外键约束)。

                                  图片 8

                    

          外键关系设置完毕后,在外键表stu的class_id字段中不得不插入属于主键表class中的id字段值。若插入范围外的值,则会弹出更新失败窗口。

             图片 9  图片 10

                  图  二-叁-一 class的id字段只有一和2                      图贰-3-二 若在stu表的class_id字段中插入三则退步

    第9章 视图

    询问结果集/逻辑表,里面包车型客车数额允许开拓者举办查询,可是数量更新有限定。当基本表中的数据产生转移时,视图中的数据也会时有发生改变。
    优势:可简化复杂数据,扩充数量安全性,隔开数据。

    创制视图

    create 
        view view_name [(column_list)]
        as select_statement
        [WITH CHECK OPTION]
    
    # 单源表视图创建:视图只有一个基表
    # test数据库创建view_st_score视图
    create 
        VIEW 'test'.'view_st_score'
        as
        (
        select sc.id, sc.scores,sc.subject, st.name,st.age, st.sex
        from scoresinfo sc, studentinfo st
        where sc.student_id = st.id
        )
    # 查看视图中的数据
    select * FORM view_st_score where sex = 1;
    
    # 多源表视图创建:数据来源于两张或者多张表
    create 
        VIEW 'test'.'view_st_score'
        as
        (
        select sc.id, sc.scores,sc.subject, st.name,st.age, sx.name
        from scoresinfo sc, studentinfo st, sexinfo sx
        where sc.student_id = st.id
        and sx.id = st.sex
        )
    # 查看视图中的数据
    select * from view_st_score where age>17 order by age;
    

    修改视图

    create [OR REPLACE]
        VIEW view_name [(column_list)]
        as select_statement
        [WITH CHECK OPTION]
    # 修改为sex列数据为0的记录    
    create OR REPALCE
        VIEW 'test'.'view_st_score'
        as
        (
        select sc.id, sc.scores,sc.subject, st.name,st.age, st.sex
        FORM scoresinfo sc, studentinfo st
        where sc.student_id = st.id
        and st.sex = 0
        )
    

    去除视图

    DROP VIEW [IF EXISTS]
        view_name [, view_name]...
    
    #防止删除错误
    drop VIEW  EXISTS view_st_score_se;
    

    翻开视图

    DESCRIBE view_name;
    DESC view_name;
    # 查看创建视图的语句,格式化显示
    show create VIEW view_nameG;
    

    图片 11

    示例:

    declare @i int
    
    set @i=0
    
    while @i<3
    
    begin
    
    waitfor delay '00:00:02'
    
    set @i=@i 1
    
    print @i
    
    end
    

    2、分组查询

    (一)、聚合函数

            聚合函数:多行记录重回至多少个值,平常用于总括分组的新闻,暗许把具备的新闻当做一组

            单行函数:每1行重回二个值

            多行函数:多行重回二个值,聚合函数是多行函数

      1 --单行函数
      2 select lower(ename) from emp; --返回各行的小写形式
      3 
      4 --多行函数
      5 select avg(sal) from emp;--返回sal的平均值,默认把所有的信息当做一组
      6 select min(sal) from emp;--返回sal的最小值
      7 select max(sal) from emp;--返回sal的最大值
      8 
      9 select count(*) from emp;--返回表中所有的记录的个数
     10 select count(comm) from emp;--返回sal字段非空记录个数,重复的记录也会被当做有效的记录
     11 select count(distinct deptno) from emp; --返回字段不重复并且非空的记录的个数
     12 
     13 select max(sal), lower(ename) from emp; --error单行函数和多行函数不能混用
    

    (2)、group by

         格式: group by 字段的联谊
          作用:  把表中的笔录遵照字段分成区别的组,最后总计的是细微分组的音信
          比方:  group by a, b,c的用法 –> 先按a分组,假设a一样,再按b分组,假诺b一样,再按c分组, 最后总计的是微小分组的新闻。

      1 -- 查询不同部门的平均工资
      2 select deptno, avg(sal) as "部门平均工资" from emp group by deptno;
      3 
      4 -- 使用了group by 之后select中只能出现分组后的整体信息,不能出现组内的详细信息
      5 select deptno, avg(sal) as"部门平均工资", ename from emp  group by deptno;
      6 select deptno,ename from emp group by deptno;
      7 select deptno,job, sal from emp group by deptno, job;
    

    (3)、having

            having子句是用来对分组之后的多寡开始展览过滤,由此使用having时一般都会先选取group by,  即便没动用group by但运用了having,则代表having把全数的记录作为一组来拓展过滤。
            having子句出现的字段必须的是分组之后的组的完整音讯,having子句不允许出现组内的详细新闻。此外,固然select字段中能够现身外号,可是having子句中不能够冒出字段的别称,只可以选择字段最原始的名字。

    having和where的异同
          相同的:
                    ① 都以对数码过滤,只保留有效的数目
                    二 where和having一样,都不容许出现字段的外号,
                    3只同意出现最原始的字段的名字,此结论在SQL和Oracle都建设构造
         不同:
                    一  where是对原有的记录过滤having是对分组之后的记录过滤
                    2 where必须的写在having的前方,顺序不可顺倒 不然运营出错

      1 select count(*) from emp having avg(sal)>1000 --直接使用having语句
      2 
      3 ----统计 输出部门平均工资大的部门的部门编号和部门的平均工资
      4 select deptno, avg(sal) "平均工资",count (*)"部门人数",
      5    max(sal) as "部门的最高工资"
      6      from emp
      7        where sal>2000  --where是对原始的记录过滤
      8          group by deptno
      9            having avg(sal)>3000  --一对分组之后的记录过
     10 
     11 --判断入选语句是否正确
     12 select deptno, avg(sal)"平均工资",count (*)"部门人数",
     13       max(sal)"部门的最高工资"
     14         from emp
     15            group by deptno
     16              having avg(sal)>300 --对分组之后的记录过滤
     17                where sal>2000   --where写在Thaving的后面  error
    

    第2二章 存储进程

    积攒进度:SQL语句集,当实施成功后会被积存在数据库服务器中,并同意客户端间接调用,而且蕴藏进度能够提升SQL语句的实施功效。允许包括一条或许多条SQL语句,完毕二个或多少个逻辑作用。

    优点:

    • 打包复杂的操作:把SQL语句包蕴到3个单身的单元中
    • 使数据独立:调仓库储存进程代替SQL语句,隔断用户和数目
    • 增加安全性:外部程序不能够直接操作数据表
    • 升高品质:SQL语句在服务器中从来实行,客户端调用,防止了往往接连和出殡和埋葬SQL语句的进度
    # 创建存储过程
    create PROCEDURE sp_name ([IN | OUT | INOUT] param_name type[,...])
    body
    
    DELIMITER //
    create PROCEDURE test.fst_prc(OUT param1 INT)
        begin
            select count(*) INTO param1 from scoresinfo;
        end//
    
    # 创建无参存储过程
    DELIMITER //
    create PROCEDURE test.fst_scoresinfo_proc()
        begin 
            UPDATE scoresinfo SET remark = '优秀' where scores >= 90;
        end//
    
    DELIMITER ;
    CALL fst_scoresinfo_proc//
    
    # 创建含参存储过程
    DELIMITER //
    create 
        PROCEDURE test.se_scoresinfo_proc(IN param1 INT)
        BEGIN
            IF (param1 IS NOT NULL) THEN
                UPDATE scoresinfo SET remark = '一般' where scores <= 70;      
            END IF;
        END//
    
    DELIMITER //
    CALL SE_scoresinfo_proc(1)
    //
    
    # 创建OUT类型参数存储过程
    DELIMITER //
    create 
        PROCEDURE test.th_proc(OUT param1 INT)
        BEGIN
            select count(*) INTO param1 from studentinfo;
        END//
    DELIMITER //
    CALL th_proc(@X)
    //
    select @x
    //
    
    # 创建INOUT类型参数存储过程
    DELIMITER //
    create 
        PROCEDURE test.fo_scoresinfo_proc(INOUT param1 INT)
        BEGIN
            IF (param1 IS NOT NULL) THEN 
                select count(*) INTO param1 from studentinfo;
            END IF;
        END//
    DELIMITER //
    SET @a = 1//
    CALL fo_scoresinfo_proc(@a)
    //
    select @a
    //
    

    修改存款和储蓄进度
    使用SQLyog工具修改。

    删除存储进度

    DROP PROCEDURE
    [IF EXISTS]
    sp_name
    

    积累进度中的变量

    # 声明
    DECLARE var_name[, ...] type [DAFAULT value]
    # 赋值
    SET var_name =expr [, var_name = expr]...
    

    组织决定语句

    # IF
    IF search_condition THEN statement_list
        [ELSEIF search_condition and THEN statement_list]
        [ELSE statement_list]
    END IF
    
    # CASE
    # 存储过程中的CASE语句与函数里的CASE语句有差别,存储过程里的CASE语句不能有ELSE NULL子句,并且用END CASE终止。
    CASE case_value
        WHEN when_value THEN statement_list
        [WHEN when_value THEN statement_list]
        [ELSE statement_list]
    END CASE
    
    CASE
        WHEN search_conditi and THEN statement_list
        [WHEN search_conditi and statement_list]
        [ELSE statement_list]
    END CASE
    
    # LOOP循环控制语句
    [begin_label:]LOOP
        statement_list
    END LOOP [end_label]
    
    create PROCEDURE prcloop(x INT)
    BEGIN 
        label1:LOOP
        SET x =x 1;
        IF x<8
        THEN ITERATE label1;
        END IF;
        # 退出LOOP语句
        LEAVE  label1; 
        END LOOP label1;
        SET @xx =x;
    END
    
    #另一种方法
    create PROCEDURE prcloopse(x INT)
    BEGIN 
        label1:LOOP
            SET x =x 1;
            IF x>=8
                THEN LEAVE  label1;
            END IF;
        END LOOP label1;
        SET @xx =x;
    END
    
    # while语句的使用
    [begin_label:]while search_condit and DO
        statement_list
    END while [end_label]
    
    DELIMITER //
    create 
        PROCEDURE test.prcwhile()
        BEGIN
        DECLARE vx INT DEFAULT 10;
         vx>0 DO
            SET vx = vx-1;
        END while 
        SET @xx = vx;
        END //
    select @xx    
    

     

    T-SQL运算符

    壹、单表查询

          select  关键字  字段列表/总结列     from  表名 as 小名  

                     join   表名  on   where  过滤条件;

                    group by分组     having 过滤

                    order by 排序

    (一)展现字段

    一 select变量字段

      1   1 select * from emp;   -- 显示emp表中的所有字段
      2   2 select ename,sal from emp;  --仅显示emp表中的ename和sal字段
      3   3 select ename,sal,* from emp;  -- 显示emp表中的ename、sal和所有字段
    

    ② select 计算列

      1  select '2018年' as "年份",
      2      ename as "姓名",
      3        sal  as" 月薪",
      4        sal * 12 as "年薪" -- 多行函数,计算年薪
      5  from emp; 
    

           图片 12

      1 select 5;  -- 输出一行,显示5
      2 select 5 from emp;  -- 输出行数是emp行数,每列值是5
    

      ① * 是指表中的成套字段,在多表查询时,要指明表名。如:表名.*

       二 SQL Server允许别称使用单引号括起来,但Oracle不容许,因而为了包容性,提议使用双引号表示

           别名,单引号表示字符串常量。

        3 建议引用表中的字段时,使用表的别称,而非表名

    (2)distinct【不容许再度】

          distinct能够过滤字段或字段列表重复的值,对于多少个null值最后也只会输出二个null。

      1 select  distinct  deptno  from  emp;--会过滤重复的deptno
      2 select  distinct  comm  from  emp;--会过滤掉重复的null,或者所:有多个null,最终也只会输出一个
      3 select  distinct  deptno,  comm  from  emp;--对deptno和comm组合进行过滤
      4 
      5 select  deptno,  distinct  comm  from  emp;--error  逻辑上有冲突
    

    (叁)between【在某些范围】

      1 --查找工资在1500到3000之间(包括和)的所有员工信息
      2 select *  from  emp where  sal >=1500 and  sal <=3000
      3 select *  from  emp where  sal  between  1500  and  3000;
      4 
      5 --查找工资不在1500到3000之间(包括和)的所有员工信息
      6 select *  from  emp where  sal <1500 or  sal >3000;
      7 select *  from  emp where  sal  not  between  1500  and  3000;
      8 select *  from  emp where  not sal  between  1500  and  3000;
      9 
     10 --error,求的是不大于1500且小于3000的工资
     11 select *  from  emp where  not sal >=1500 and  sal <=3000;
    

           注:  SQL Server中可用来判定大小的记号【 =   <>   !=     >   <     >=   <=  between and   in   not】

    (4)in

      1 --把sal是1500 或是 3000 或是 5000 的记录输出
      2 select * from emp where sal in (1500, 3000,  5000)
      3 select * from emp where sal=1500 or sal=3000 or sal=5000
    

    图片 13

      1 --把sal不是1500 也不是3000 也不是5000 的记录输出
      2 select * from emp where sal not in (1500, 3000,5000)
      3 select*from emp where sal<>1500 and sal<>3000 and sal<>5000
    

    图片 14

          注:一 数据库中不等于有三种象征 ! 和   <> ,建议使用第三种。
                ② 对 或 取反是 并且  对 并且 取反是 或。

    (5)top

    器重字top能够显示最前方的几何条记下,专项于Sql语法,不可移植。

      1  select top 3 * from emp;
      2  select top 15 percent * from emp;--进位取整,emp记录为14条,输出的是3个,不是2个
      3  select top 3  from emp;--error
    

    图片 15

    分页查询:

      1 --假设每页显示n条记录,当前要显示的是第m页
      2 
      3 --表名是A 主键是A_id
      4 
      5 Select  top n  * From  A
      6       where A_id not in (select top  (m-1)*n  A_id from emp)
    

    (6)null【空值】

    一 null的判定形式

          零和null是差异的,null表示空值,未有值,而零是多少个确定的值。

          null不能够到庭如下运算:<>  !=  =

          null能够参加如下运算:is 和 not is

      1 select * from emp where comm is null;  --输出奖金为空的员工的信息
      2 select * from emp where comm is not null; --输出奖金不为空的信息
      3 
      4 select * from emp where comm < > null;--输出为空error
      5 select * from emp where comm != null; --偏出为空error
      6 select * from emp where comm = null; --输出为空error
    

    2 任何数据与null进行演算的结果长久是null值

      1 --输出每个员工的姓名年薪(包含了奖金) comm假设是一年的奖金
      2 -- 错误写法,计算结果存在null值
      3 Select  empno,  ename,  sal*12   comm "年薪"  from  emp;
      4 
      5 --正确写法:使用isnull (comm, 0)表示 如果comm是null 就返回零 否则返回comm的值
      6 select ename, sal*12 isnull(comm, 0)"年薪" from emp;
      7 
    

    (7)order by

      1 --先按照deptno升序排序,如果deptno相同,再按照sal升序排序
      2 select * from emp order by deptno, sal;
      3 
      4 --先按deptno降序排序 如果deptno相同,再按照sal升序排序
      5 Select  *  from  emp  order  by  deptno  desc,  sal;
      6 
      7 --先按deptno升序,如果deptno相同,再按sal降序
      8 select * from emp order by deptno, sal desc
    

          注:1 使用首要字desc降序排列,假使不点名排序的正统,则暗中认可是升序 (asc)

                 二为三个字段钦点的排序规范并不会对另3个字段发生潜移默化,强烈提议为每八个字段都钦定排序的正规化

    (八)模糊查询

    (1)格式
             select  字段列表  from   表名  

                     where   字段   like   相称原则

            注:1 相称的标准化必须的用单引号括起来  无法省略 也不可能改用双引号
                  2 相配的准绳一般含有通配符;相称结果不区分轻重缓急写
    (2)通配符  

      1 -- %:表示任意0个或多个字符
      2 select * from emp where ename like '%A%'  --ename只要含有字母A就输出
      3 select * from emp where ename like 'A%'  --ename只要首字母是A的就输出
      4 select * from emp where ename like '%A'  --ename只要尾字母是A的就输出
      5 
      6 -- _  [这是下划线 不是减号]:表示任意单个字符
      7 select *from emp where ename like '_A%'  --ename只要第二个字母是A的就输出
      8 
      9 --[a-f]:a到f中的任意单个字符 只能是a b c d e f中的任意一个字符
     10 select * from emp where ename like '_[A-F]%';--把ename中第二个字符是A或B或C或D或E或F的记录输出
     11 
     12 --[a, f]:a或f
     13 select * from emp where ename like '_[a,F]%';
     14 
     15 --[^a-c]:不是a也不是b也不是c的任意单个字符
     16 select * from emp where ename like '_[^A-F]%';
     17 
    

    (三)通配符作为普通字符使用

      1 select * from student where name like '%%%' escape '';   --把name中含有%的输出
      2 select * from student where name like '%_%' escape '';   --把name中含有_的输出;
    

    第四章 DML语言操作数据表

    DML:数据操作语言,首要不外乎数据表数据的增加和删除改查。

    加上数量INSERT

    # 语法
    INSERT [INTO] table_name [(col_name, ...)]  VALUES (col_value,...);
    
    #指定字段插值
    INSERT [INTO] table_name SET col_name = col_value,...;
    
    #插入查询结果
    INSERT [INTO] table_name [(column_name1, column_nam2,..)] select * from table_name2;
    
    #为表添加多条数据
    INSERT INTO table_name VALUES (value_list1),...,(value_listn);
    

    修改数据UPDATE

    #指定修改符合修改条件的修改顺序,限制修改行数
    UPDATE table_name 
    SET col_name1 = value1,col_name2 = value2,...
    [where 条件] 
    [order by col_name1 DESC/ASC, col_name2,DESC/ASC] 
    [LIMIT row_count];
    
    #修改表中的全部数据
    UPDATE table_name SET col_name1 = value1,col_name2 = value2,...;
    

    删除数据DELETE

    DELETE from table_name{
        [where 条件]
        [order by ...]
        [LIMIT row_count]
    }
    
    #另一种删除全部数据,不会返回删除数据的行数
    TRUNCATE TABLE tablename;
    

    亮点:格外直白

    透过SQL语句来创制外键

    4、delete语句

    第13章 触发器

    触发器只好由数据库的特定事件来触发,并且无法经受参数。特定事件包涵:插入、退换、删除。
    用途

    • 严防误操作
    • 评估修改前后状态,选取对应措施
    • 实现多少的级联修改,保障了数码的完整性
    • 记录操作事件,实现日志

    成立触发器

    留意:在同1个表下,不只怕有三个一律时间或事件的触发器。

    # 语法
    create TRIGGER tigger_name trigger_time trigger_event
    ON tbl_name for EACH ROW                    #tbl_name 触发器宿主
    trigger_stmt
    
    # BEFORE INSERT类型的触发器
    DELIMITER //
    create TRIGGER test.fstINSERTting
        BEFORE INSERT ON newsstudentinfo
        FOR EACH ROW
        BEGIN 
            INSERT INTO Logtab(oname, otime) VALUES('test', SYSDATE());
        END
    //
    
    # AFTER INSERT 类型的触发器
    DELIMITER //
    create trigger test.secINSERTtrg
        # 增加数据时触发该触发器
        AFTER INSERT ON newsstudentinfo 
        FOR EACH ROW
            BEGIN
                INSERT INTO Logtab(oname, otime) VALUES ('test_after', SYSDATE());
            END
    //
    
    INSERT INTO tst.studentinfo VALUES('111111', '测试', 12.0);//
    INSERT * from test.logtab;//
    

    管理触发器

    # 删除触发器
    drop TRIGGER
    [schema_name.] trigger_name 
    
    DELIMITER //
    DROP TRIGGER test.fivdeltrgger//
    #修改触发器:删除,重新创建
    

    一张表能够有四个外键

    建立目录

    1、为啥必要数据库

        数据库简化了对数据的操作,差不离具有的行使软件的后台都急需数据库;且数据仓库储存款和储蓄数据占用空间小、存款和储蓄安全、轻松持久保存 以及 数据水库蓄水体积易有限帮忙、晋级和移植等。

    select * from 表名 where 字段<>值

    视图结构的改变

    实质上正是修改生成视图的select语句

    Alter view 视图名 as 新查询语句
    

    三、怎么着学习数据库

    (1)数据库是如何存款和储蓄数据的

         字段 记录 表 约束 (主键 外键 唯一键 非空 check  default 触发器)

    (2)数据库是何许操作数据的

         insert  update  delete  T-SQL 存储进程 函数 触发器

    (三)数据库是怎么着展现数据的

         Select (珍视的重要

    频率高,不安全,断电丢失

    top子句

    2、创设登⑥用户

       在成立登入用户时务必删除勾选【强制密码过期】。

                                图片 16

    图片 17

    封锁的分类

    5、事物管理

    (一)事务是用来探讨什么的

            壹 幸免数据处于不客观的中间状态,比方:转账

            二 怎么样保险多用户同时做客同二个数据时显示给用户的数据是在理的

    (二)事务和线程的关系

          事务是经过锁来消除出现访问的,线程同步也是透过锁来化解出现访问的  synchronized,所谓并发访问是指多用户同时做客同贰个数码

    (三)事务和第三方插件的涉嫌

          直接采纳事务库才干难度不小过多个人是依靠第一放插件来落实,由此我们一般人没有必要细细的探讨数据库福建中华工程公司作的语法细节。

          第2方插件要想形成预期的法力,一般必须的依赖性数据库中的事物机制来达成

    附录:

           索引、存款和储蓄进度、游标、TL-SQL   

    多字段分组: 先依据1个字段举行分组,然后对分组后的结果再度依据别的字段进行分组

    创立带输出参数的存款和储蓄进度

    语法

    CREATE PROC 存储过程名
    
    [@参数名1 数据类型 ][, [@参数名2 数据类型 ]]…
    
    [@输出参数名 数据类型 ] OUTPUT
    
    AS   SQL语句序列……
    

    三、数据库是什么存款和储蓄数据的

         数据库是透过表(字段)来解决事物的仓库储存难题;通过自律来消除事物取值的实用和合法性的标题以及表述表与表之间的关联;建表的进程纵使钦赐事物性质及其种种束缚的历程。

    一对多(多对一)

    暌违数据库

    数据库暗中同意的积存地点

    C:Program FilesMicrosoft SQL ServerMSSQL10.MSSQLSERVERMSSQLDATA

    借使大家必要将它移动地点的话,就必要首先分离数据库:

    右击数据库Logo弹出菜单à义务à分离à弹出分手数据库窗口à选中”删除连接”à鲜明

    诸如此类大家就足以复制和撤销合并数据库了。

    5、数据库是何许浮现数据的

    从已有表拷贝数据到新表中

    在sql management中成立视图

    比如:

    幸存三个事实上存在数据表student

    接下来根据student 中保有年龄大于20岁的学习者来生成一张虚拟表,也正是视图。

    在数据库下的“视图”节点上点右键菜单 à “新建视图” à 在增多表中选中须要的数量表 à 在视图的打算分界面写入SQL语句,比如:

    select id,name,age from student where age>=20

    2、数据结构与数据库的差别

        数据库是在运用软件等级商量对硬盘数据的贮存和操作,数据结构是在系统软件品级讨论对内部存款和储蓄器数据的积攒和操作。

     

    示例1:

    BEGIN TRAN --开始事务
    
    DECLARE @errorSum int --定义错误计数器
    
    SET @errorSum=0
    
    update student set age = 11 where id=1
    
    --在事务中操作SQL语句
    
    SET @errorSum=@errorSum @@ERROR
    
    --@@ERROR是上一次t-sql发生的错误的编号
    
    --此处用来判断是否有出错,没错时@@ERROR的值为零
    
    --有错时就将错误编号进行累加
    
    exec jfdsa --执行一个不存在的存储过程来人为制造错误
    
    SET @errorSum=@errorSum @@ERROR
    
    if @errorSum<>0
    
    begin
    
    print '有错误,事务开始回滚'
    
    ROLLBACK TRAN --事务回滚
    
    end
    
    else
    
    begin
    
    print '成功,事务已提交'
    
    COMMIT TRAN --事条提交
    
    end
    

    一、数据库的叠加与分离

         分离时,必须挑选删除链接(保险数据分离后不得在更新)和翻新计算(保险数据分离时的数额是时尚的)。

                             图片 18

                                                             图 二-一-一数据库分离

        mdf文件是储存数据的文本、ldf是积攒操作日志的公文,附加时只需选中mdf文件就可以。

                               图片 19

                                                             图二-一-二数据库附加

     

    练习

    一、模拟提款机,达成3个银行转化的例子,制造帐户表account表(id、accName、accNum、money),达成从一个帐户转4000块到此外多个帐户,假设现身谬误,则事务回滚,未有不当则成功转帐。

     

    4、数据库是哪些操作数据的

    Where子句重回结果: 0照旧一, 0代表false,1意味着true.

    子查询

    它是指一个select查询语句,并不是一向从数据表中来获得数码,而是从其它3个查询语句的结果聚焦来拓展询问。

    示例:

    select s.name,s.age,s.sex from (
    
    select * from student where sex = 0
    
    ) as s
    
    where age >20
    

    里面,在from关键字的末端,并不是数据表而是select语句。

    1、create语句

      1  1 create table 表名(
      2   2    字段名1  数据类型 字段约束,
      3   3    字段名2  数据类型 字段约束
      4   4 );
    

       注:create table最终3个字段的前边建议不要写逗号(SQL server能够辨认,但在Mysql和Oracle中会报做错)。

             identity:主键自动拉长,用户不要求为identity修饰的主键斌值

    连天查询的意思: 在用户查看数据的时候,供给出示的数额来源多张表.

    字符数据

    数据类型

    存储空间

    char(n)

    每字符1字节,最大可以存储8000字节

    varchar(n)

    每字符1字节,最大可以存储8000字节

    text

    每字符1字节,最大可以存储2GB

    nchar(n)

    每字符2字节,最大可以存储4000字节

    nvarchar(n)

    每字符2字节,最大可以存储4000字节

    ntext

    每字符2字节,最大可以存储2GB

    说明:

    一、 个中帮衬Unicode字符集的以n早先。

    2、 大家能够用varchar(max),表示可变长度。

    2、insert语句

    • 断开链接

    示例:

    CREATE PROC  addNum 
    @num1 int,@num2 int,
    @result int OUTPUT
    --定义输出变量@result,它的值会被自动输出
    AS
    select @result=@num1 @num2
    -------执行存储过程-----
    DECLARE @result2 int;
    --定义变量@result2
    execute addNum 8,1,@result2 OUTPUT
    --执行存储过程addNum将其输出结果存放在@result2中
    select @result2
    --显示@result2中的内容
    

    语法

    练习:

    一、 现存学生表如下(age、name、phoneNum、sex(nvarchar))

    限制age 必须0到50。

    限制phoneNum必须是11位数字

    范围性别只好输入“男”或“女”

    文本能够达成快捷的相配数据, 并且能够不慢的找到相应表中的记录.

    练习:

    创立一个班级表,并与学生表建构级联关系。须求删减班级的时候,这么些表中的学习者音信也同时被删除。

    (未有原则非凡), 而连接本人字段就能加多(保留),最后产生的结果叫做: 笛Carl积.

    剥夺触发器

    disable trigger [触发器名] on 表名
    
    示例:
    
    disable trigger mytrgger3 on student
    

    Delete from 表名 [where条件] [limit 数量];

    LOCAL和GLOBAL只好二选一

    用于定义游标的功效域,LOCAL是指游标可以在时下批管理、函数或存款和储蓄进度中动用,GLOBAL是指游标对于当前数据连接来讲在大局有效。

    示例:

    declare myCursou1 cursor GLOBAL for
    
    select id,name from student
    
    
    
    declare myCursou2 cursor LOCAL for
    
    select id,name from student
    
    go
    
    open myCursou1 --全局游标在批处理之外也可以访问
    
    open myCursou2 --局部游标当批处理执行完之后就不存在了
    

    自然连接

    ALTEKuga修改语句

    ALTER <数据对象类型><数据对象名称>
    
    • 蠕虫复制的意义

    外键约束

    纵然为了保障数据的准头,举例:确认保障每一条论坛贴子的发贴人都是的确存在于用户表的。

    零填充的含义(展现上涨的幅度)保险数据的格式

    多列索引

    是指贰个目录依据多少个字段进展排序。其排序格局:第三个目录排序之后,对其中的值同样重复的数目,再遵照第三个字段来排序。

     图片 20

    语法:

    SELECT <字段列表> FROM <左表><LEFT | RIGHT > [OUTER] JOIN <右表> ON <连接条件>
    

    万一运用LEFT正是显得左表中的全部数据,假若选用Right正是显示右表中的全数数据

    捆绑参数

    语法:

    ROLLBACK TRAN [SACION ] [<事务名称>|<保存点名称>| <@事务参数>|<@保存点参数> ]
    
    • 不留余地方案

    创建UDF

    CREATE FUNCTION [模式] 函数名
    
    ([@参数名 [AS] 参数类型 [=默认值] [READONLY] [,………]])
    
    RETURNS 返回值的类型
    
    AS
    
    BEGIN
    
    [若干语句]
    
    RETURN (返回单一值)
    
    END
    

    班级表:班级名字、班级编号

    表面连接

    其间连接有明确的排他性,第壹张表是对第3张表的互补,假诺第2张表不须求第壹张表中的有些数据,那么第三张表中不被须求的数据就不会被出示出来。

     图片 21

    专门的学问视图

    就是由三个或多个物理表通过标准查询语句组成的视图,理论上全部用select语句询问出的结果集都能够用来扭转视图。

    同时,我们对视图中的数据开始展览更改时会直接影响到其本来的大要数据表。

    增加数据库(增)

    示例:

    BEGIN TRY
    
    exec getPage 'student',2,8,'sid'
    
    END TRY
    
    BEGIN CATCH
    
    print '错错错错错错'
    
    END CATCH
    
    • 翻看全体数据库

      show databases;

    • 默许数据库

      use xiu;

    目录的相关sql指令

    1. 与此同时知足三个规范 and

    开创不带参数的积攒进度

    语法:

    CREATE PROC[EDURE] 存储过程名 AS   SQL语句序列……
    

    图片 22

    语法:

    BEGIN TRY
    
    执行存储过程
    
    END TRY
    
    BEGIN CATCH
    
    ……
    
    END CATCH
    

    除非当try中的语句发生错误的景色下,才会去实践CATCH中的语句。

    但是数据库不单是要缓和空间难题,要力保功效难点: 范式只为消除空间难题, 所以数据库的设计又不或许完全遵照范式的渴求兑现: 一般情形下,只有前三种范式供给满意.

    练习:

    1、现成字符串如下:”二:80,三:玖一,四:75”,个中,逗号用于分隔分化的教程和实际业绩。在那之中一:语文,二:数学,叁:土耳其(Turkey)语,四:物理。将看似那样的数额存放在上学的小孩子数量表中。然后,建设构造二个仓库储存进程,输入学生id,再次回到这么些学生的各科成绩(每列的名目必须是科目名。)、各科总分,全部科指标平均分。

    (假使那四门都以选修课,也正是说有个外人想必有陆个战绩,有个外人想必唯有三个成就)

    declare @id int,@scoreChar char(30),
    
    @isCharOver bit
    
    select
    
    @id=1, --要查询的学生记录的id
    
    @isCharOver =0 --用来判断成绩字符串是否结束。
    
    set @scoreChar=(select score from dbo.student
    
    where id=@id
    
    ) --得到存放成绩的字符串
    
    declare @scroeWithNum1 char(5), --语文成绩
    
    @scroeWithNum2 char(5), --数学成绩
    
    @scroeWithNum3 char(5), --英语成绩
    
    @scroeWithNum4 char(5) , --物理成绩 @scroeWithNum char(5) --临时存放成绩的变量
    
    while @isCharOver=0
    
    begin
    
    declare @douIndex int
    
    set @douIndex= charIndex(',',@scoreChar) --获取逗号出现的位置。
    
    if @douIndex = 0 --如果没有找到逗号的话
    
    set @isCharOver=1 --就设置字符串结束的标记为
    
    set @scroeWithNum = LTRIM( RTRIM(substring(@scoreChar,0,@douIndex))) --打印截取出的成绩
    
    set @scoreChar =  LTRIM( RTRIM( substring(@scoreChar,@douIndex 1,30)))
    
    ------如果是最后一个成绩的话-----------------
    
    if @isCharOver = 1
    
    begin
    
    set @scroeWithNum= @scoreChar
    
    end
    
    ------End___如果是最后一个成绩的话-----------------
    
    ---第二次分隔成绩-----------
    
    declare @sNum char(1),@RealScore char(3)
    
    set @sNum = substring(@scroeWithNum,0,2)
    
    set @RealScore =substring(@scroeWithNum,3,3)
    
    if @sNum=1
    
    set @scroeWithNum1 =@RealScore;
    
    else if @sNum=2
    
    set @scroeWithNum2 =@RealScore;
    
    else if @sNum=3
    
    set @scroeWithNum3 =@RealScore;
    
    else if @sNum=4
    
    set @scroeWithNum4 =@RealScore;
    
    ---End__第二次分隔成绩-----
    
    end
    
    select @scroeWithNum1 as '语文',
    
    @scroeWithNum2 as '数学',
    
    @scroeWithNum3 as '英语',
    
    @scroeWithNum4 as '物理'
    

    Limit子句是一种范围结果的说话: 限制数量.

    修改字段类型

    ALTER TABLE 表名 ALTER COLUMN 字段名 类型
    

    示例:

    ALTER TABLE dbo.student
    
    ALTER COLUMN sAge nvarchar(30)
    

    外键不可修改: 只好先删除后新扩充

    sql server中的索引的归类

    性别依赖助教、助教正视主键、 体育场面重视班级、班级信赖主键、性别和教室都设有传递正视.

    ON

    若果数据库由四个部分组成,大家得以钦命数据表存款和储蓄在哪些部分。

    如:enum(‘男’,’女’)

    在开创数据表的同时对有个别字段加多外键

    CREATE TABLE ticketVIP
    (
    tid int identity primary key not null,
    cid int not null
    FOREIGN KEY REFERENCES customer(id)
    )
    

    其间,FOREIGN KEY REFERENCES之后的表名(字段名)便是表示字段与哪张表的哪位字段创设外键关系。

    图片 23

    什么给一张并未有主键的表加多主键

    ALTER TABLE Table_1
    
    ADD CONSTRAINT PK_table111
    
    PRIMARY KEY (id)
    

    私下认可值的见效: 在数额实行扦插的时候,不给改字段赋值

    练习:

    1、 在查询学生数量的时候,根据学生年龄,来显示学生表中的每种学员是还是不是已成年。通过自定函数达成。

    二、 在查询学生数量的时候,依照学生的地点,来剖断在那之中是或不是带有“加纳阿克拉”多少个字,包罗突显”本地球科学生”,不分包则展示“各省学生”。通过自定函数达成。

    三、 针对student表,用用户自定义函数,完成每页为10条的分页。传入参数是页数pageIndex,传出参数是存放了每页数据的结果集。

    create function getPage(@pindex int,@psize int)
    
    returns table
    
    as
    
    return(select top(@psize) * from student 
    
    where id not in
    
    (
    
    select top(@psize*(@pindex-1)) id from student order by id
    
    ) order by id
    
    )
    
    select * from dbo.getPage(3,3)
    

    sqlServer_游标

    图片 24

    col_length(表名,字段名)

    重返表中的字段的长度,示例:

    select col_length('Product','ProductName')
    

    PHP操作MySQL

    SQL Server Management Studio

    它正是SQL server的图形化的保管分界面,也正是客户端。

    • Having子句

    示例:

    declare @id int,@name nvarchar(50)
    
    --临时变量
    
    declare myCursor cursor LOCAL for
    
    select id,name from student
    
    --定义游标
    
    open myCursor --打开游标
    
    fetch next from myCursor into @id,@name
    
    print @name
    

    SQL:结构化查询语言(Structured Query Language)

    示例:

    CREATE PROC  addNum 
    
    @num1 int=1,@num2 int=1
    
    AS
    
    select @num1 @num2
    
    execute addNum 8
    

     图片 25

    ISNUMERIC()

    决断是不是为客体的数值,固然这几个数值以字符串的款型存在。

    select ISNUMERIC('123f457')

    是返回1,否返回0

    添加表(增)

    目前禁止使用约束

    ALTER TABLE employee
    
    NOCHECK
    
    CONSTRAINT CK_ageMoreZero
    
    --这里要指定约束的名字
    

    图片 26

    基本概念

    职业需求显然的起初和截至点,就比方内定在哪一步开始记录“历史记录”,然后在哪一步甘休历史记录。

    SQL server中的select、insert、update和delete语句都能够成为专门的职业的壹部份。

    • 1NF

    遵循施行的操作分类

    壹、数据垄断(monopoly)语言DML触发器,是指触发器所在数据表中发生了insert、update、delete操作时接触。

    二、数据定义语言DDL触发器,那类触发器是指当服务器或数额中施行了create、alter、drop语句时被触发。

    叁、登陆触发器:是指当用户登入sql server时触发。

    范式在数据库的铺排当中是有指引意义: 但是还是不是强制标准.

    示例:

    CREATE PROC  addNum 
    
    @num1 int,@num2 int
    
    AS
    
    select @num1 @num2
    
    execute addNum 25,13
    

    接力连接

    成立一时半刻表

    set:陆15个成分数量

    SQL server的管理工科具

    Min(): 计算最小值

    索引视图

    不怕给视图增添索引

    CREATE [UNIQUE][CLUSTERED][NonClustered] index 索引名 on <表 / 视图名>(字段 asc/desc)

    设若大家为1个视图创造了聚焦索引,那么大家就将以此视图叫做索引视图。

    也便是给视图加多了二个主键,然后系统会为索引视图创设缓存,由此索引视图的品质要高于标准视图。

     图片 27

    实体约束

    它用来针对行开始展览封锁。

    诸如:要求每种学员的姓名、电话、地址都不能出现重复。

    一样的值不能够在其行出现。

    select * from 表名 where 字段=值

    手动在SQL management中丰硕引用

    右击钦命数量表弹出右键菜单 à ‘设计’ à 在编辑表结构分界面空白处没点击右键 à “索引/键” à点击“加多”来创造新的索引 à 在“列”选项中选用对哪1个字段实行排序,以什么方式排序。

    $mysqli = new mysqli("localhost","root","123","test");//链接数据库服务器并选择test数据库
    $query = "select id, name, age from xiu";//创建查询语句
    $result = $mysqli -> query($query,MYSQLI_STORE_RESULT);//$query()方法负责将query发送到数据库
    while(list($id,$name,$age) = $result -> fetch_row()){//fetch_row()方法将获得的值生成一个数组
        printf("%d*%d*%d",$id,$name,$age);
    }
    $mysqli -> close();//关闭数据库链接
    

    语法:

    cteate table #临时表名(字段列表)
    

    图片 28

    聚合函数

    AVG() 求平均值

    SUM() 求合

    MIN()/MAX() 求最大最小值

    COUNT() 总括行数

     呈现升幅的意义在于数量不够显示上升的幅度的时候,会活动让多少形成对应的显得升幅

    因而巡回(协作游标)来遍历数据表

    declare CursorX cursor SCROLL for
    
    select id,name from student
    
    --定义游标
    
    open CursorX
    
    declare @id int,@name nvarchar(50)
    
    FETCH NEXT FROM CursorX INTO @id,@name
    
    while @@FETCH_STATUS=0 --游标执行后的状态
    
    begin
    
    print CAST(@id as nvarchar(10)) @name
    
    FETCH NEXT FROM CursorX INTO @id,@name
    
    end
    
    close CursorX
    
    deallocate CursorX
    
    --其中,@@FETCH_STATUS代表上一条游标语句执行后的状态,它的返回值有三个:
    

     

    返回值

    说明

    0

    FETCH 语句执行成功

    -1

    FETCH 语句失败或行不在结果集中

    -2

    提取的行不存在

     

    • 明显所挑选的行和受影响的行

    练习

    一、通过游标和巡回,查询学生表中的奇数行的数据。

    二、通过游标和存款和储蓄过程来促成对学生表的分页成效。

    sqlServer_事务

    举例说你去银行转账,你从帐户A转四千元到帐户B,实际上那就要分两步来操作,第三步,帐户A上扣除5000元。第一步,在帐户B上存入四千元。纵然第3步已形成,然则由于一些原因导致第1步未有科学执行的话。就能够导致相当的惨重的损失。

    之所以,大家就要求1种机制,来担保率先条语句执行之后,第一条语句也会举行。可是真实情形下,大家相当的小概百分之百保障这点。因而退而求其次,用1种体制来担保,要是第1条语句未有科学实施的话,那么大家就撤销第2条语句所实践的操作,那种机制就称为事务。

    能够形象的将其精通为操作软件时的历史记录。

     图片 29

    按集中性分类

     图片 30

    COLLATE

    用来拍卖排序和字母大小写等主题材料

     

     图片 31

    事情的实操

    当大家张开事务之后,大家操作的实在都是缓存中的数据。唯有当提交业务的时候,操作才会写入日志。

    其实, 内连接和外连接都可以萧规曹随自然连接: 使用同名字段,合并字段

    语法:

    DECLARE 游标名称 cursor
    
    [ LOCAL | GLOBAL ]
    
    [ FORWARD_ONLY | SCROLL ]
    
    [ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ]
    
    [ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ]
    
    [ TYPE_WARNING ]
    
    FOR
    
    select 查询语句
    
    [ FORUPDATE [OF 字段名列表…] ]
    

    概念游标的时候,大家要游标类型和游标变量,对于游标变量来说,便是遵照t-sql的变量的规则来定义的。

    外连接分为三种: 是以某张表为主: 有主表

    BEGIN TRAN

    表示3个专业单元起头,在此之后没有交给的保有语句都属于工作的一某些。

    • 查阅数据

    二、张开游标

    open 游标名称

    游标须要开拓技巧够利用

    • 自行拉长(auto_increment)

    COMMIT TRAN

    交付事条,也正是事情的极限,当施行了commit tran之后,大家所试行的操作就落到实处保存。

     图片 32

    赋值运算符

    = 等号 ,与其它编写制定语言相同,将左侧的值赋值到左臂。

    学员表与班级表的涉嫌关系正是实业与实体之间的涉及

    在创制数据表的时候增加唯一约束

    CREATE TABLE USERINFO(
    
    uid int identity primary key NOT NULL,
    
    uName nvarchar(50),
    
    uPhone char(20) UNIQUE
    
    )
    

    留意:唯一约束与唯一索引达到的成效是同等的。

    当主键存在争执的时候(Duplicate key),能够选拔性的开始展览管理: 更新和替换

    游标变量

    我们能够在概念时先对游标变量赋值,或然定义完以往再赋值。

    --在定义时直接赋值
    
    declare myCursou cursor for
    
    select id,name from student
    
    
    
    --先定义后赋值
    
    declare @myCursou cursor
    
    set @myCursou = cursor for select id,name from student
    

    讲师表:姓名、性别、年龄、工资

    DML触发器描述

    1、 在sql server 二〇〇八中,DML触发器通过利用两张逻辑表DELETED和INSERTED。那两张是身无寸铁在数码服务器的内部存款和储蓄器中的,我们唯有只读取权限。DELETED和INSERTED表的字段结交涉触发器所在的表的构造是同样的。触发器推行增加和删除改操作后,那两张中的记录也会被同时立异。

    2、 触发器能够由此数量表中的相关表实现级联操作,能够运用比约束更盘根错节的级联操作,也能够兑现比约束更复杂的封锁。

    三、 触发器的功能很有力,能够完成广大参差不齐的操作,不过过多利用触发器会导致数据库品质的骤降和程序维护的艰苦。

     图片 33

    TRUSTWORTHY

    为sql server数据库文件加多安全层

    在学员表中增添八个班级表中的3个字段来指向班级(必须能唯1找到八个班级的音讯)

    练习:

    用上例中的表,尽管结束学业年龄2二,推断年龄字段产生更新,其值更新为超过等于2二的时候,就活动决断这一个学生已经结束学业了,因此删除那么些学生的学生表和借书表中的相关数据记录。

    一、 如何决断你更新的是年龄字段?

    if update(age)
    
    2、 如何明确刚刚被修改的是哪一条记录。
    
    select age from deleted
    
    select id, age from inserted
    

    作者们可以透过上述两条代码获得更新前后的年华,和所更新记录的id。

    create trigger studentAgeChange on student for update
    
    as
    
    if update(age) --判断是否是指定的字段的值发生了改变
    
    begin
    
    --需要变量:修改后的年龄、学号、id
    
    declare @age int,@sNum int,@id int
    
    set @age = (select age from inserted)
    
    set @sNum = (select sNum from inserted)
    
    set @id = (select id from inserted)
    
    if @age>= 22
    
    begin
    
    delete from student where id=@id
    
    delete from borrowRecord where sNum=@sNum
    
    end
    
    end
    

    一时半刻表与表变量

    Smallint: 小整型,使用1个字节存款和储蓄,表示的气象最多为6553陆种

    启动Management Studio

    在登入界面输入相关的音讯:

    服务器类型:数据库引擎

    服务器名称:咱俩得以输入IP地址, Computer名称。假如是访问本机的SQL server服务并且未有更动暗中同意端口号的话,只供给输入2个点 ” . ”,它就意味着本机的SQL Server正式版的服务端。(体验版是.SQLEXPRESS)

    身份验证:SQL Server身份验证

    用户名:sa

    密码:sa

    $mysqli = new mysqli("localhost","root","123","test");//链接数据库服务器并选择test数据库
    $query = "select id, name, age from xiu";//创建查询语句
    $result = $mysqli -> query($query);//$query()方法负责将query发送到数据库
    while($xiu = $result -> fetch_object()){//fetch_object()方法将结果集放入对象中
        $id = $xiu -> id;
        $name = $xiu -> name;
        $age = $xiu -> age;
        printf("id:%d,name:%s,age:%d",$id,$name,$age);
    }
    $mysqli -> close();//关闭数据库链接
    

    贰回插入多行数据

    insert into student (name,age,sex,address,phone) values
    ('大宝',28,1,'城革大本营',12345678),
    ('小宝',13,1,'城革大本营',12345678),
    ('老宝',82,1,'城革大本营',12345678);
    

    double: 双精度,占用八个字节存款和储蓄数据, 精度方位大致为15人左右

    2进制数据类型

    数据类型

    值范围

    存储空间

    bit

    null , 0 和 1

    1比特

    binary

    固定长度的二进制数据

    8000字节

    varbinary

    可变长度的二进制数据

    最大8000字节

    image

    可变长度的二进制数据

    最大2G

     

    除此以外还有xml、table类型。

    多表连接: A表 inner join B表 on 条件 left join C表 on条件 ...

    示例2:

    create table #tt2(
    
    id int identity primary key,
    
    name nvarchar(50),
    
    age int
    
    )
    
    insert into #tt2 values('小强',17),
    
    ('小明',19),('小红',20)
    
    select * from #tt2
    
    • 空属性NULL/NOT NULL

    在成立数据库的同时加多外键与级联合浮动作

    譬如:现创制一张报酬表与职工表并创设级联关系。就是说当职员和工人音信被剔除的时候,其工资记录一齐被去除。

    CREATE TABLE EMoney(
    
    mid int identity primary key not null,
    
    mtime datetime,
    
    howMuch float not null,
    
    eid int not null,
    
    CONSTRAINT FK_money_give_to_employee
    
    FOREIGN KEY(eid)
    
    REFERENCES employee(eid)
    
    ON UPDATE NO ACTION
    
    ON DELETE CASCADE
    
    --当主键列的相关数据被删除后,外键列的相关数据也一起被删除
    
    )
    

    其间,CONSTRAINT 与FOREIGN KEY、REFERENCES语句正是创办外键并扬言数据的借助关系。

    删除数据

    str()

    连天查询: 将多张表(可以超越二张)举行记录的连天(根据有些钦定的口径进行多少拼接): 最后结出是: 记录数有相当大大概变动, 字段数一定会加多(至少两张表的合并)

    主干语法:

    update 表名 set 字段 = 值 [where条件];

    练习:

    成立几个表变量用于存放彩票号码,有两字段(id,num char(八))。

    用于随机函数生成四十八个彩票号码,存入那个表变量中。然后显示出装有的彩票号码。

    用户自定义函数UDF

    user define function
    

    它不行接近于积存进度依然js中的function,经常来讲它都是分外select语句来进展应用的,它的用法很像针对某些字段进行操作的聚合函数。

    • Group by子句

    删去视图

    Drop view 视图名
    
    • 浮点型

    加多字段

    ALTER TABLE dbo.student
    
    ADD --这个关键字代表添加
    
    phoneNum char(20) DEFAULT '00000000',
    
    sAddress nvarchar(100) ,
    
    createTime DateTime DEFAULT GETDATE()
    
    --GETDATE()代表获取系统当前时间
    
    • 以上关联:

    依赖约束范围

    实业约束

    域约束

    参照完整性约束

    缺点:只好选择多个字段作为主键

    系统数据库

    图片 34

    示例:

    Create view View_22 as select id,name,age from student where id>3
    
    alter table kang change age sex varchar(10);
    

    缺点

    1、品质不高,查询耗费时间开销财富。

    二、对于由复杂的select语句生成的视图来讲,修改视图中的数据时有相当大或然会错误。

    因此,视图平常只可以使用于小型或对质量供给不高的体系上。

    删去置空的前提条件: 外键字段允许为空(假如不满意条件,外键不能够创制)

    convert()

    convert( 目标数据类型(长度) , 供给被转移的数目或字段名 ),示例:

    select '我们班上有' CONVERT( varchar(2),10) '个同学'
    

    图片 35

    数据表的自引用

    正是约束三个张表中的某些字段的值必须符合另2个字段的已存在的值的限制。

    举个例子现存一张职员和工人表,职员和工人表中字段如下(职员和工人id、职员和工人姓名、上级领导id),在此大家得以约束“上级领导id)”必须属于“职员和工人id”的限定内。

    create table employee(
    
    eid int identity primary key not null,
    
    eName nvarchar(10),
    
    lindaoID int
    
    FOREIGN KEY REFERENCES
    
    employee(eid)
    
    )
    

    只顾:成立自引用的法门与创立外键的秘诀一样,差异是表名与字段都以时下表中的。

    依然故小编用ALTEOdyssey语句也足以增加自引用

    ALTER TABLE employee
    
    ADD CONSTRAINT
    
    FK_linDao_Must_Be_employee
    
    --自引用的名字
    
    FOREIGN KEY (lindaoID)
    
    --指定当前表的字段
    
    REFERENCES employee(eid)
    
    --指定与哪个字段建立自引用关系
    

    所有的SQL语句

    当SQL Server身份验证不能登录时

    壹、 用windows身份验证(也正是用本机管理员来登入,无需输入用户名密码的)。

    二、 张开左边目录中的 SQL Server à 安全性 à 登入名 à 双击sa à 展开sa 用户的性质窗口。

    三、 修改密码

    4、 撤废”强制施行密码战略”

    伍、 在“状态”选项卡中,对“是或不是允许连接到数量引擎”和“登录”分别选取“授予”和“运维”。

    陆、 点击明显关闭sa 用户的特性窗口

    七、 右键点击服务器根节点,选拔属性打开“服务器品质”弹窗。

    8、 选用“安全性”选项卡,设置“服务器身份验证”为“SQL Server和Windows身份验证”。

    九、 鲜明并关闭“服务器品质”弹窗,然后在SQL server配置管理器中重启数据服务端,再用sql server 帐户密码来登入就可以。

    redis

    示例二,单选决断题

    DECLARE @N char(2)
    
    SET @N='C'
    
    SELECT
    
    CASE @N
    
    WHEN 'A' THEN '正确'
    
    WHEN 'B' THEN '错误'
    
    WHEN 'C' THEN '错误'
    
    WHEN 'D' THEN '错误'
    
    END
    

    持有的涉嫌都以指的表与表之间的关系.

    查看函数的推搡消息

    将光标移动到函数之上按下F一键,就足以张开联机丛书并显示该函数的相干文档。

    不留余地了实体的设计表难点, 不过没有消除事关难题: 孩子找不出妈,妈也找不到孩子.

    if语句

    在贰个或多个规格的判别下决定流程的走向。能够协作and、or等逻辑运算符来。

    范式: 是一种分层结构的正经, 分为陆层: 每叁遍层都比上一层越发严格: 若要满意下一层范式,前提是满意上1层范式.

    if..else语句

    如果…或者

    两段代码中只会实行一段

    总是查询

    业务的标识点

    BEGIN TRAN 设置专门的职业的初始点。

    COMMIT TRAN 提交业务,保存你所实践的操作,让其不可防止。

    ROLLBACK TRAN 回滚事务,打消你已经进行的操作。

    SAVE TRAN 保存标识符,保存点,正是将你的操作在此存档,允许将事情回滚到您如今保存的操作地点。

    孩子表

    撤除规则绑定

    exec sp_unbindrule 'employee.eAge' --‘表名.字段名’
    
    • Where子句

    多表连接,示例:

    select student.name,classInfo.className,teacher.name from student
    INNER JOIN 
    classInfo  ON student.cid = classInfo.cid
    INNER JOIN 
    teacher ON classInfo.teacher= teacher.tid
    

    varchar的实际上存款和储蓄长度能达标多少啊? 看字符集编码.

    用途:

    一、在循环语句中著录循环的次数或然用于调节循环的尺度。

    贰、调整流程语句的走向。

    3、存款和储蓄函数或存储进程的再次回到值。

    • 客户端接收结果

    备份

    争执于分别数据库,备份的时候大家无需截止数据库的运维。备份能够在用户正在使用数据库的情形下开始展览。在钦点数据库的右键菜单中à职分à备份à在“目录-备份到”区域中钦点数据库备份的渠道(暗许路线是在sql server的装置目录下,假若急需更动备份路线,要求先删除暗许路线,再点击增加)

    $mysqli = new mysqli("localhost","root","123","test");//链接数据库服务器并选择test数据库
    $query = "select id,name,age from xiu";//创建查询即相对应的占位符(?)
    $stmt = $mysqli -> stmt_init();//创建语句对象
    $stmt -> prepare($query);//为执行准备语句
    $stmt -> execute();//执行语句
    $stmt -> bind_result($id,$name,$age);//绑定结果参数
    while($stmt -> fetch()){//fetch()获取准备语句结果的每一行
        printf("id:%d,name:%s,age:%d",$id,$name,$age);
    }
    $stmt -> close();//恢复语句资源 
    $mysqli -> close();//关闭数据库链接
    

    DateLength()

    收获数码的莫过于尺寸,示例:

    select
    
    CompanyName,
    
    DATALENGTH(CompanyName)/2 as '名称长度'
    
    from dbo.Customer
    

    修改多少个列(改)

    getDate()

    赢妥当前时光,比方:

    select GETDATE()
    

    无数时候在急需为日期类型的字段增多当前时刻为暗中认可值的时候必要选择到该函数。

    unique key:可以为空,多少个为空、能够约束三个字段不重复

    视图的创立

    Create View 视图名 as 查询语句

    将id=一的数据的name字段的值修改为"user"

    while循环

    当规则为true时施行循环代码,当条件为false时退出循环

    declare @num1 int
    
    set @num1=0
    
    while @num1<10
    
    begin
    
    print @num1
    
    set @num1=@num1 1
    
    end
    

    突发性需求选用无符号数据,供给给数据类型限定 unsigned 无符号,从0早先

    非聚集索引

    举例说:对于新华字典来讲,它有二种补充性的排列方式,按偏旁部首、按笔画。

    非聚焦索引是指,非物理上的实际上排列情势的逻辑目录顺序的目录。

    对于数据表来说,创建了主键之后,别的的目录都以非集中索引。

    一张表中最多能够加上二伍十三个非聚焦索引。

    Order by 字段名 [asc|desc]; -- asc是升序(默认的),desc是降序

    CREATE TABLE创设数据表

    CREATE TABLE 数据表名
    

    成立表在此之前明确是或不是业已挑选当前数据库

     

    • 枚举字符串(单选框)

    语法

    declare @变量名 table(字段列表….)
    

     图片 36

    规则

    平整与check约束是十二分接近的,它们的区分是规则只好限量二个字段,可是规则定义3次,能够频仍行使。

    就比方:年龄无法为负数,这么些规则能够行使于客户表、职员和工人表、学生表。

    内连接: [inner] join, 从左表中抽取每一条记下,去右表中与具备的笔录进行相称: 相配必须是某些条件在左表中与右表中一样最后才会保留结果,不然不保留.

    常用全局变量

    Tinyint: Mini整型,使用3个字节存款和储蓄, 表示的情景最多为25陆种(常用)

    删去与革新

    当我们在数据库中举行增加和删除改操作的时候,系统会在sql server服务器的内部存款和储蓄器中修改两张暂且表Deleted和Inserted一时半刻表。

    假定大家后天亟待开拓一个学校图书管理种类,每一个同学前去借书都会变卦2个借书记录。

    1、首先学生数据表中供给二个sNum学号字段

    二、制造借书记录表,当中借书记录须求与学号相关联(不是id)。

    CREATE TABLE borrowRecord(
    
    bid int identity primary key not null,
    
    sNum int, --关联学生表学号
    
    borrowDate datetime, --借书日期
    
    returnDate datetime --还书日期
    
    )
    
    1.  加多唯1键(壹)

    where子句

    where运算符

    =,>,<,>=,<=,<>,!=,!>,!<

    <>表示不等于,!>不大于。

    AND 、OR、NOT

     

    BETWEEN

    select * from student 

    where age BETWEEN 13 AND 19

     

    查询指定的数据值是否在第一个值和第二个值的范围内。

    LIKE

    select * from student 

    where name LIKE '%小%'

     

     

    模糊查询,可以使用通配符,

    %用来表示任意个任意字符,

    _ 下划线用来表示一个字符。

     

    select * from student 

    where name LIKE '_白'

     

     

     

    IN

    是指从一个集合中去逐一匹配,只要数据值在集合中能找到相同的项,where条件就成立了。

     

    select * from student 

    where name IN ('小张','小黑','小平','小李')

     

    ----------------------------------

    select * from student 

    where name IN (select name from student where age <20)

     

     

     

     

     

    EXISTS

    用来判断一个子查询是否有结果,当子查询返回了至少一个结果时,where条件成立。

     

    select * from student 

    where exists(select * from student where age =99)

     

     

     

    借使一张表中有3个字段(非主键)指向其它一张表的主键,那么将该字段称之为外键(foreign key)

    FOR ATTACH

    将已存在的一些数据库文件附加到当下服务器上。当前,这么些文件必须是数据库的一局地。

     

    datetime: 时间日期 YYYY-mm-dd HH:ii:ss  从一千到9999年 0000-00-00 00:00:00

    得到一张表的字段的总量

    select COUNT(1) from syscolumns where id=OBJECT_ID('Customer')
    

    删除三个列(删)

    GOTO语句

    让近来程序试行的相继爆发转移,跳转到钦赐的标志处。

    示例:

    print '今天是星期天'
    
    goto theDay
    
    print '今天是星期一'
    
    print '今天是星期二'
    
    theDay:
    
    print '今天是星期三'
    

     图片 37

    UPDATE语句

    update dbo.student set name='小白龙' where id = 14
    

     图片 38

    练习:

    1、 用create成立学生表(sid、sname、sage、cid)和班级表(cid、cname、cteacher)

    二、 对那两张表增添外键约束,班级表是主键表、学生表是外键引用表。

    三、 在学生表中增添3个不存在的班级试一下。

    肆、 在班级表中删除三个早已被引用的班级试一下。

     

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
        <table border="1px" style="margin:100px auto">
            <tr>
                <td>序号</td>
                <td>姓名</td>
                <td>年龄</td>
                <td>操作</td>
            </tr>
            <?php while($xiu = $result -> fetch_array()){ ?>
                <tr>
                    <td><?php echo $xiu["id"]; ?></td>
                    <td><?php echo $xiu["name"]; ?></td>
                    <td><?php echo $xiu["age"]; ?></td>
                    <td><a href="#">操作</a>||<a href="#">删除</a></td>
                </tr>
            <?php } ?>
            <tr>
                <td><a href="index.php ? page = 1">首页</a></td>
                <td><a href="index.php ? page = <?php echo $prev ?>">上一页</a></td>
                <td><a href="index.php ? page = <?php echo $next ?>">下一页</a></td>
                <td><a href="index.php ? page = <?php echo $pages ?>">尾页</a></td>
            </tr>
        </table>
    </body>
    </html>
    

    如何添扩展列索引

    由此右击钦点数量表弹出右键菜单à “设计” à在编辑表结构分界面空白处点击右键 à “索引/键” à“增加”或选中钦命的索引à点击“列”之后的小开关à在弹出窗口中加多多个“列名”。

    memcached

    出口变量

    enum:恐怕出现的因素列表(655三十八个选项量)

    T-SQL基本语法

    • 删除数据只是不删除表结构

    语句块

    if 9-5=5
    
     begin --相当于{
    
    print '你说对了'
    
     end --相当于}
    
    else
    
    begin
    
    print '你说错了'
    
    end
    
    1. 当表已经创办好之后, 额外追加主键: 能够因而修改表字段属性, 也足以直接追加.

    WITH DB_CHAINING

    超出数据库全部权

     

    外键纵然很有力, 能够举办种种束缚: 然而对于PHP来说, 外键的牢笼下跌了PHP对数据的可控性: 常常在骨子里开荒中, 很少使用外键来管理.

    始建触发器

    姓名,性别,年龄,身高,体重属于常用数据

    删除规则

    drop rule 规则名

    示例:

    drop rule age_rule

    索引 index

    目录是1个排列、排序的法子,索引之后的结果正是目录。

    譬如说:新华字典,它就有种二种索引排序格局:拼音、扩偏旁部首,按笔画。

    • 内部联系

    视图的相干SQL指令

    助教代课表

    级联合浮动作

    当大家转移数据记录的时候,能够同时操作两张表中的有关系的数据。

    相似来讲增多数据不要求级联操作,唯有删除和更改的时候有非常大概率因为破坏了外键约束而致使七个表之间数据的一无可取,由此就需求一块的改变或删除四个表之间的数量。

     图片 39

    日子与时光等级次序

    数据类型

    值范围

    精度

    存储空间

    smalldatetime

    01/01/1900 到06/06/2079

    1分钟

    4字节

    datetime

    01/01/1753到

    12/31/9999

    0.0033秒

    8字节

    datetime2

    01/01/0001到12/31/9999

    100纳秒

    3字节

    date

    01/01/0001到12/31/9999

    1天

    3字节

    time

    00:00:00.0000000

    23:59:59.9999999

    100纳秒

    3到5字节

     

     图片 40

    日后触发器

    当用户实践某种操作完成之后,才会被触发的触发器。

    图片 41

    字符串函数

    操作对象只限:char、varchar、binary、nvarchar、varbinary类型

    Ltrim() 去掉字符串左侧的空格。select  LT揽胜极光IM( '      abc     ')

    途观trim() 去掉字符串右侧的空格。select  RT瑞鹰IM( '      abc     ')

    ascii() 将字符转变为在这之中ascii码表中的地点。select ascii('A')

    char() 将ascii码转变为字符。如:select char(六5)

    lower() 调换字母为小写。如:select LOWE库罗德('Hello Kitty')

    upper() 调换字母为大写。如:select upper('Hello Kitty')

    str() 将数字转变为字符串。语法:str(数值,字符串长度,小数位数)比方:select '圆周率是' str(三.1415九二陆,5,三)

    charIndex 再次来到子字符串在另三个字符串中率先次面世的地点。语法:

    charIndex(子串,母串),正是判断前者是或不是为后任的子集,假若未有在母串中找到子串则再次回到0。比方:select charindex('day','today is a good day')

    substring(字符串,初步地方,截取长度) 截取字符串,示例:

    select substring('today is a good day',12,4)

    图片 42

    GO指令

    代表开头运营,GO之后的话语属于另二个批次的代码。

    declare @num1 int
    
    set @num1=10
    
    go
    
    select @num1 1
    

    举行报错,那是因为用户定义的有个别变量只好够在同3个批次中有效,而go指令将代码分隔成了三个批次。

    老母与儿女的关联: 阿妈,孩子多少个实体

    语法:

    部分变量必须以@开首

    Declare @变量名 类型 [,@变量名2 类型]…..

    宣称一个或三个变量,示例:

    declare @num1 int ,@num2 int

     时间日期类型

    示例:

    比方说成立二个触发器mytrigger用来监视student那张表的update操作,只要施行update语句,就能够激活触发器mytrigger

    create trigger mytrgger3 on student for update
    as
    print '这是第三个触发器'
    update student set name = '小小白' where id=1
    

    注:当大家本着同一张表的1律操作定义了多少个触发器的时候,那多少个触发器会被同时触发。

    内连接

    创办规则并将其利用到钦赐的字段

    --创建规则
    
    create rule age_rule as @eAge>0
    
    --把自定义的规则绑定到字段
    
    exec sp_bindrule 'age_rule' ,'employee.eAge'
    
    --‘规则名’,’表名.字段名’
    

    连接查询分类

    model

    被SQL server用于数据库模板音信的积存

    同台查询: 将多次询问(多条select语句), 在记录上打开拼接(字段不会扩大)

    一般外键在外键引用表上增多

    第一要分别哪张表是主键表(是指用已经存在的值作为约束范围),哪张表是外键表(是指加多数码时被封锁必须符合范围的那张表) 。

     

    创制外键的时候,经常是在外键表上创造的。

    询问数据

    按单列或多列分类

    将代课时间拆分成五个字段就缓慢解决难点.

    幂函数

    power() 次方,比如:select POWER(2,10) --2的10次方

    sqrt() 开(平) 方 , select sqrt(81)

    square 平方, select SQUARE(9)

    Log() 对数, select Log(9)

    Set null: 置航空模型式: 父表的操作之后,子表对应的多寡(外键字段)被置空

    ALTELX570 DATABASE 修改数据库

    • 问题

    成立带暗中同意值的输入参数的囤积进程

    饱含暗中同意值参数,能够不输入具体的参数值,在不输入值使用默许值。

    语法

    CREATE PROC[EDURE] 存储过程名
    
    [@参数名1 数据类型=默认值 ]…
    
    AS   SQL语句序列……
    

    在制造表的时候,字段之后一向更unique或unique key

    逻辑运算符

    AND 逻辑与

    OR 逻辑或

    NOT 逻辑非

     SQL中的数值全都是暗许有标记:分正负

    FORWARD_ONLY和SCROLL二选一

    FORWARD_ONLY只可以壹行一行的进化,而不可能后退或跳过中间的行。

    SCROLL定义的游标能够在数据集的任何方向的别的地点移动。

    示例:

    declare Cursou_test cursor for --未定义移动方式
    
    select id,name from student
    
    declare Cursou_test2 cursor FORWARD_ONLY for --只进游标
    
    select id,name from student
    
    declare Cursou_test3 cursor SCROLL for --滚动游标
    
    select id,name from student
    
    open Cursou_test
    
    open Cursou_test2
    
    open Cursou_test3
    
    FETCH NEXT FROM Cursou_test --只能一行行前进
    
    FETCH NEXT FROM Cursou_test2 --只能一行行前进
    
    FETCH ABSOLUTE 1 FROM Cursou_test3 --表中的绝对位置的正序第条
    
    FETCH RELATIVE 2 FROM Cursou_test3 --相对于当前针对位置前进条
    
    FETCH RELATIVE -2 FROM Cursou_test3 --相对于当前针对位置后退条
    
    FETCH FIRST FROM Cursou_test3 --第一条
    
    FETCH LAST FROM Cursou_test3 --最后一条
    

    在SQL中,将字符串类型分成了6类: char、varchar、text 、 blob、enum、set

    示例

    --内连接写法

    select * from classInfo
    
    inner join teacher
    
    on classInfo.teacher=teacher.tid
    

     

    --交叉连接写法

    select * from classInfo,teacher
    
    where classInfo.teacher=teacher.tid
    

     

     

    二者的结果是千篇壹律的

     

    • 蠕虫复制: 先查出数据, 然后将摸清的多少新添三回

    修改触发器

    固然有八个字段作为主键,能够是复合主键

    目录的用途和成效

    是增高多少查询的质量和频率。

    比方:大家依照用户年龄创立了目录。

    实践用户年龄的查询操作时,品质会有比十分的大的晋升。

    select age from student order by age where age>20

    • 唯一键(unique key)

    示例三,根据学生的年华来判断是不是成年

    SELECT ID,NAME,
    
    CASE
    
    WHEN AGE>18 THEN '成年人'
    
    WHEN AGE<=18 THEN '未成年人'
    
    END AS 成年否
    
    FROM student
    

    从地点例子中我们得以见见,CASE语句能够在select查询数据表的时候,通过规范来判定相应字段的值,并按规则自定义重回结果。

    login.html

    算术函数

    操作对象只限于:int、float、money、smallmoney、decamal

     图片 43

    字符串连接

    select '阿姨' '你好'
    

    一般来说索引: index

    键约束

    主键、外键、替换键、倒置键

    insert into 表名[(字段列表)] select 字段列表/* from 数据表名;

    print

    一次只可以输出3个变量: print @num一

    time: 时间(段), 钦命的某部区间之间, -时间到 时间

    剥夺约束

    突发性大家须求近期停止或剥夺约束。

    某1种数据会日常性的现身有些具体的值, 能够在1始发就内定好:

    CREATE DATABASE创造数据库

    新成立的数据库,除了创制者、系统管理员、数据库全体者以外,别的人都无法访问。

    运用基本语法

    触发器的行使

    笛Carl积未有趣: 应该尽量幸免(交叉连接没用)

    set

    3次只好对3个变量进行赋值

    示例1:

    declare @num1 int ,@num2 int,@num3 int
    
    set @num1=10
    
    set @num2=25
    
    set @num3= @num1 @num2
    
    select @num3
    

    示例2:

    declare @num1 int
    
    set @num1 =(select top 1 age from student)
    
    select @num1
    

    ( select语句中的top关键字表示询问到的数据集的最上边包车型客车几条数据记录。举个例子:查询最下边包车型地铁三条学生数量select top 三 * from student )

    示例3:

    declare @num1 int
    
    set @num1 = (select COUNT(1) from
    
    student where age>19)
    
    print @num1
    

    text:存款和储蓄文字

    @@IDENTITY

    上一次施行insert语句后插入的多少记录的id

    示例:

    insert into teacher values('小李',22,'19119111011')
    
    select @@IDENTITY
    

    保障实体内部,实体与实体之间的联系

    示例:

    declare @age int;
    
    set @age=61
    
    if @age<12
    
    print '儿童'
    
    else if @age<20
    
    print '少年'
    
    else if @age<30
    
    print '青年'
    
    else if @age<50
    
    print '中年'
    
    else
    
    print '中老年'
    

    用来唯一约束该字段里面包车型大巴数额, 不能够再一次: 那种称为主键.

    语法:

    Commite tran[SACTION] [<事务名称>|<@事务参数>]
    

    图片 44

    写法:

    @@变量名

    例子:

    SELECT @@SERVERNAME,@@CONNECTIONS
    

    全局变量只好访问,不能够赋值。

     

    各类学生自然属于某些班级,有个别班级一定某些许学生(1对多)

    全局变量

    在全方位SQL Server中都能访问到的变量,平常用来代表SQL server的连串参数。

    图片 45

    在已存在的表中增多唯1约束

    ALTER TABLE dbo.employee
    
    ADD CONSTRAINT UQ_name_no_repeat
    
    UNIQUE(eName)
    
    •  改动服务器默许字符集

      set character_set_client = gbk;

    反三角函数

    asin()、acos()、atan()

    Alter table 表名 add [constraint 外键名字] foreign key(外键字段) references 父表(主键字段);

    按激活顺序分类

     图片 46

    select

    2次输出多少个变量

    示例:

    select  @num1 as 总数,@num2
    

     图片 47

    翻开存款和储蓄进程的音信

    EXEC sp_help 存款和储蓄进度名

    示例:EXEC sp_help porcTest

    • 上述提到:

    DROP删除数据库

    DROP DATABASE 数据库名
    

    表明字段存款和储蓄的数码是数值:

    sqlServer_基础概念

    第二列只可以放性别

    DEFAULT 默认值

    指该字段在未曾输入值的情状下暗中同意使用的值。

    •  客户端发送SQL指令

    数值类型

    数据类型

    取值范围

    存储空间

    tinyint

    0~255

    1字节

    smallInt

    -2768到32767

    2字节

    int

    -231到231-1

    4字节

    bigint

    -263到263-1

    8字节

    decimal(p,s)

    -1038 1到1038-1

    5到17字节

    numeric(p,s)

    -214748.3648到214748.3647

    4字节

    smallmoney

    -922337203685477.5808到

    922337203685477.5807

    9字节

    money

    -3.438到-1.1838,0, 3.438到1.1838

    4字节

    real

    -1.79308到-2.23308, 0, 1.79308到2.23308

    4字节或8字节

    注脚:decimal(8,三) 表示存款和储蓄了二个5人数字,小数位数是三位。

    PHP操作mysql的扩大还挺多: mysql, mysqli和PDO扩张.

    开启触发器

    enable trigger [触发器名] on表名
    
    示例:
    
    enable trigger mytrgger3 on student
    

    浮点数即使进位导致长度溢出从未难题,可是确定地点数不行

    按唯一性分类

    由来:客户端数据只可以是GBK,而服务器以为是UTF八

    开创数据库示例:

    CREATE DATABASE TESE22BB
    ON
    (
    NAME =TEST22BB,
    FILENAME = 'e:test22bb.mdf',
    SIZE =30MB,
    MAXSIZE = 50MB
    )
    LOG ON
    (
    NAME = 'TEST22BBLOG',
    FILENAME='e:test22bb.ldf',
    SIZE = 10MB,
    MAXSIZE = 20MB
    )
    GO
    

     

    用那种办法,大家能够在内定的硬盘或U盘路线之下创造数据库。

     

    只顾:如若急需对数据库文件进行理并答复制、剪切或删除操作。

     

    1. 消除方案

    修改数据库大小

    ALTER DATABASE test MODIFY FILE (SIZE = 500MB)
    

    瞩目:不可能变小,只好叠加它的体量。

     图片 48

    封锁的命名

    主键约束的命名:PK_student,PK代表主键Primary Key 。

    CHECK约束:CK_ students_4j432j,CK_ students_ageNotSmall0

    • 管理计划语句

    对应用游标时品质上的部分提出

    一、 游标对品质的花费极度严重的。

    二、 用完游标之后自然要关闭和刑释。

    三、 尽量不要在数据量相当的大的时候利用游标。

    四、 尽量选取FAST_FOEvoqueWA奥迪Q7D飞快只进格局来操作游标。

    5、 使用游标日常会比直接select 查询慢二-3倍,假如数据量相当大那么些比例还会大增。即使得以用别的措施消除的难题尽量幸免使用游标,它只是最终的一种选拔。

    若想拜会服务器必须经过客户端(服务器一向运行, 客户端在必要选用的时候运营).

    参照完整性约束

    某一字段的值,必须带有于(当前表或任何表的)其余字段值的界定内。

     图片 49 

    简写语法

    CREATE INDEX 索引名 ON 数据表 ( 字段名 desc )
    

     图片 50

    唯1约束

    尽管约定二个字段中的值不可能重复,每种值都是无可比拟的。

    名师教学: 先生和学生

    删除字段

    ALTER TABLE 表名 DROP COLUMN 字段名
    

    示例:

    ALTER TABLE dbo.student
    
    DROP COLUMN sAddress
    

    字段的值会被一道删除

    • 除去主键

    省略字段名按表的字段顺序来插入数据

    insert into student values('小白楼',60,1,'沙坪坝',12345678)
    

    小心:那种艺术必须按照表的字段顺序(除了主键ID)来排列语句中的字段值,并且具有字段都无法不填写值

    唯一索引: unique key

    修改字段名

    EXEC sp_rename ‘表名.原字段名’ , ’新字段名’ , ’COLUMN’
    

    示例:

    EXEC sp_rename 'student.createTime','regTime','COLUMN'
    

    创建表的时候增添外键

    用途:

    它的能够起到简化查询语句的法力,幸免编写制定重复的讲话。

    并且要留意,它还足以重临表

    • 3NF

    Try……Catch语句

    当大家进行顺序出现谬误的时候,一般都会报错,并且结束试行。然则即使在try语句的限定内失误的话,程序会持续运营,并且将错误音讯在catch语句范围内进行拍卖。

    • SQL分为三个部分

    重命名索引

    Exec sp_rename ‘表名.原索引名’ , ’新索引名’ ,’index’
    

    示例:

    Exec sp_rename 'student.IX_ageMore','IX_AM','index'
    

    本文由68399皇家赌场发布于虚拟主机,转载请注明出处:郝斌–SQL Server2007学习笔记

    关键词: 68399皇家赌场 数据库 数据库系统

上一篇:数据库的总是

下一篇:没有了