数据库和ADO

Jun 07, 2016 pm 03:11 PM
고객 데이터 베이스 프로세스 언어

数据库语言 数据库的简易流程(数据库客户端软件和数据库服务软件的执行流程) 主键的概念 如何创建主键 如何创建外键 主外键关系的概念以及使用 数据库的主要类型 数据库的主要数据类型 使用SQL语句来创建数据库和表 约束分类 top的使用 Distinct的使用(去除

  1. 数据库语言
  2. 数据库的简易流程(数据库客户端软件和数据库服务软件的执行流程)
  3. 主键的概念
  4. 如何创建主键
  5. 如何创建外键
  6. 主外键关系的概念以及使用
  7. 数据库的主要类型
  8. 数据库的主要数据类型
  9. 使用SQL语句来创建数据库和表
  10. 约束分类
  11. top的使用
  12. Distinct的使用(去除重复数)
  13. 聚合函数
  14. 聚合函数注意事项
  15. between and 和 in 的使用
  16. like, not like 通配符(%,_,[],^)
  17. 空值处理:null 是什么?
  18. 排序(order by id asc / desc)(默认是哪一种排序?)
  19. 分组(group by ),单条件分组,多条件分组(分组时,要注意的事情[位置,列])
  20. 筛选(Having的使用),它和where的区别
  21. 类型转换(CAST,CONVERT)
  22. union,union all的使用
  23. 一次插入多条数据
  24. 字符串函数
  25. ADO.NET主要类
  26. 数据库连接字符串
  27. SqlConnection类的State属性
  28. SqlCommand类的方法:
  29. StatementCompleted事件的触发
  30. 获得刚刚插入数据库的自增id
  31. Sql注入攻击(避免方式?)
  32. 如何使用迭代生成树形菜单
  33. 单例模式(单例模式的创建)
  34. DataTable的使用
  35. 类SqlDataAdapter的使用(重点)
  36. 类SqlCommandBuilder的使用(注意:他必须操作的是有主键的数据库)
  37. 提取查询语句,封装SqlHelper类(不仅要会,而且要理解思想)
  38. SQL中的Switch语句
  39. SQL中的子查询
  40. SQL中的Exists用法
  41. SQL中的Any
  42. SQL中的All
  43. SQL2008 微软官方推荐分页方式
  44. SQL中表等值连接(内连接) inner join
  45. SQL中表左连接(左外连接) left join
  46. SQL中表右连接(右外连接) right join
  47. SQL中表交叉连接(两张表的乘积)
  48. SQL中表全连接 full join
  49. SQL中变量
  50. SQL中的事务
  51. 创建存储过程
  52. 存储过程带输出参数
  53. 调用存储过程
  54. 触发器定义
  55. 触发器类型:
  56. 触发器触发条件:
  57. 什么是索引
  58. 索引类型
  59. 什么是填充因子
  60. 什么是临时表
  61. 什么是局部临时表
  62. 什么是全局临时表
  63. 什么是三层结构
  64. 三层结构的目的
  65. 具体的三层是哪三层
  66. 三层之间的关系
  67. 三层结构的优缺点
  68. 邮件发送方法
  69. Excel导入导出
  70. MD5加密解密方法
  71. 读取数据库后,判断dataset里列的值是否为空
  72. 项目术语
    • 数据库语言
      • DML(数据操作语言)
        • select
        • insert
        • delete
        • update
      • DDL(数据定义语言--建表建库等)
        • creat
        • drop
        • alter
      • DCL(数据控制语言)
        • grant
        • revoke
    • 数据库的简易流程(数据库客户端软件和数据库服务软件的执行流程)
      • 安装时有一个客户端管理软件和一个服务器。我们平常操作的是客户端软件,发送脚本到服务器DMSM(数据库服务器),服务器分析和解析并展示执行结果。
    • 主键的概念
      • 唯一的标识一行数据操作
      • 可以作为其他表的外键来引用
      • 业务主键:有意义(例:身份证号)
      • 逻辑主键:唯一的意义就是标识一行
    • 如何创建主键
      • ALTER TABLE [dbo].[OperateType]

        ADD CONSTRAINT [PK_OperateType]

        PRIMARY KEY CLUSTERED ([Id] ASC);

        GO 
    • 如何创建外键
      • ALTER TABLE [dbo].[RoleAction]

        ADD CONSTRAINT [FK_RoleAction_Role]

        FOREIGN KEY ([Role_RoleId])

        REFERENCES [dbo].[RoleInfo]

        ([RoleId])

        ON DELETE NO ACTION ON UPDATE NO ACTION;

        GO
    • 主外键关系的概念以及使用
      • 作用
        • 可以优化查询效率
        • 减少数据冗余
        • 维护方便
      • 两张聊存在依赖数据时,就可以使用主外键来解决,其中将依赖列作为主键的就叫作:主键表;另一个就叫作外键表,外键表的外键列数据取自主键表的主键
      • 主外键约束
        • 为什么
          • 为了避免两张表的主外键数据出现不一致的情况,需要建立主外键约束关系
        • 作用
          • 当两张表数据修改时出现主外键数据不一致,则报错,拒绝修改
    • 数据库的主要类型
      • 网状数据库、层次数据库和关系数据库
    • 数据库的主要数据类型
      • char类型:当储存的数据小于长度时,会自动用空格来补充
      • Nchar类型:使用Unicode编码,任意字符都占两个字节
      • varchar类型:当储存的数据小于长度时,不会自动用空格来表示
      • datetime类型:储存日期时间数据
    • 使用SQL语句来创建数据库和表
      • 创建数据库
        • create database MySchool

          on

          (

          --括号一定是圆括号

          name='MySchool_data',--数据库名称

          filename='d:\MySchool_data.mdf',--物理文件名

          size=5mb,--初始大小

          maxsize=10mb,--最大大小

          filegrowth=15% --主文件增长率

          )

          log on

          (

          name='MySchool_log',--日志文件名

          filename='d:\MySchool_log.ldf',--日志物理文件名

          maxsize=4mb,--最大大小

          size=2mb,

          filegrowth=1mb

          )

          go
      • 创建表
        • create table Student

          (--创建学生信息表

              sId int identity(1,1) primary key,--自动编号

              sClassId int not null,    --班级外键

              sName nvarchar(50) not null,

              sAge int not null,

              sNo numeric(18,0),--身份证号,十八位数字,小数为

              sSex char(2) not null,

              sEmail varchar(50)

          )
    • 约束分类
      • 非空约束
        • alter table Employees alter column EmpName varchar(50) not null
      • 主键约束
        • alter table Score

          add constraint PK_Score primary key(sId)
      • 唯一约束
        • alter table student

          add constraint UQ_student unique(sNo)
      • 默认约束
        • alter table student

          add constraint DF_student default('男') for sSex
      • 检测约束
        • alter table student

          add constraint CK_student check(sAge >=18 and sAge 100)
      • 外键约束
        • alter table Employees

          add constraint FK_DeptId_DepId foreign key(DeptId) references Department(DepId) 
    • top的使用
      • select top 2 * from teacher

      • select top 20 percent * from teacher--按百分比算行数,如果出现小数,则+1(类似天花板函数celling)

    • Distinct的使用(去除重复数)
      • select distinct(age) from teacher --求出不重复的age

      • select distinct age,salary from teacher --求出不重复的age和salary的组合(相当于将两个列的值加在一起的值不重复)

    • 聚合函数
      • MAX(最大数)
        • SELECT max(UserId),UserId from dbo.UserInfo GROUP BY UserId
      • MIN(最小数)
        • SELECT min(UserId),UserId from dbo.UserInfo GROUP BY UserId
      • AVG(平均数)
        • SELECT avg(UserId),UserId from dbo.UserInfo GROUP BY UserId
      • SUM(和)
        • SELECT sum(UserId),UserId from dbo.UserInfo GROUP BY UserId
      • COUNT(计数)
        • SELECT COUNT(UserId),UserId from dbo.UserInfo GROUP BY UserId
    • 聚合函数注意事项
      • 聚合函数对NULL值不计算
      • 聚合函数的结果集是单个的值,没办法与多个值的结果集集合
      • 不能整除的情况
        • 该列是小数列:如果除出来是小数,则返回带小数的结果
        • 该列是整数列:如果除出来是小数,也是直接当整数算,不会自动+1
    • between and 和 in 的使用
      • betwenn and
        • 求两个值的区间,推荐使用between and
        • select * from UserInfo where ID between 40 and 50
      • in
        • 当使用子查询配合in关键字时,子查询的结果集必须只有一个列,而且列的类型必须和条件列类型一直
        • select * from UserInfo Where ID in (40,41)
        • select * from teacher where id in (select id from Score where English>98 and Math> 98)
    • like, not like 通配符(%,_,[],^)
      • ^只有MSSQLServer支持,其他DBMS用not like,且只能放在[]里用
      • not like 不取like的值
      • _    代表单个任意字符;
      • %    代表任意长度任意字符
        • Select * from student where sName like '张%'
      • []    代表取值范围内的单个字符
      • ^    取非符号,必须和[]连用
    • 空值处理:null 是什么?
      • 查询列中null的值用is关键字
        • select *from teacher where name is NULL
      • isnull函数
        • 如果第一个参数为null,则使用第二个参数作为返回值,否则,返回第一个参数
        • SELECT ISNULL (Email ,'aaa')as Email from UserInfo
    • 排序(order by id asc / desc)(默认是哪一种排序?)
      • order by 子句要放到where子句之后
      • asc--默认是升序
        • select * from UserInfo where Sort=0 order by id asc
      • desc--降序
        • select * from UserInfo order by Phone desc,ID desc
        • 多条件排序时,如上,当Phone中有相等的值,那么这些值按ID排序
    • 分组(group by ),单条件分组,多条件分组(分组时,要注意的事情[位置,列])
      • 根据性别统计男女的人数
        • select count(*) gender from teacher group by gender
        • group by 子句必须放到where语句之后,group by 与 order by 都是对筛选后的数据进行处理,而where是用来筛选数据的
      • 多条件分组
        • 分组条件,是age和gender列的组合,只有当age和gender一样的值时,才分为一组
        •         select count(*),age, gender from teacher group by age,gender
      • 分组一般和聚合函数使用的
      • 分组的结果是组信息,与表里的当行信息无关
      • 一旦出现分组,前面要么是聚合函数,要么是分组的条件
    • 筛选(Having的使用),它和where的区别
      • having是group by的条件对分组后的数据进行筛选(与where类似,都是筛选,只不过having是用来筛选分组后的组)
      • 在where中不能使用聚合函数,必须使用having,having要位于group by之后
      • having的使用几乎是与where一样的,也可以用in
      • select sClassId,count(sName) from student group by sClassId having count(sName)>3
    • 类型转换(CAST,CONVERT)
      • cast
        • select cast(salary as int) from teacher
      • convert
        • select convert(int,salary) from teacher
    • union,union all的使用
      • 是对两个集合操作的,两个集合必须具有相同的列数,列具有相同的数据类型(至少能隐式转换的),最终输出的集合的列名由第一个集合的列名来确定(可以用来连接多个结果)
      • 要union的两个结果集的列数必须一样
      • 要连接的两个列的类型鼻血一直(或者类型兼容,比如varchar和nchar)
      • union默认去除了结果集中重复数据
      • 而union all 不会删除重复的数据;(因此,union all 的效率要比union的效果高一些)
    • 一次插入多条数据
      • insert into Score(studentId,english,math)

        select 1,80,100 union

        select 1,80,100 union

        select 3,50,59 union all

        select 4,66,89 union

        select 5,59,100
    • 字符串函数
      • LEN()
        • select len('字符串的长度')
          • 结果是6
        • LEN返回的是去掉尾部空格后的字符数
      • Datalength()
        • select datalength('字符串的长度')
          • 结果是12
        • 返回的是包含尾部空格的字符串的字节数
      • LOWER()
        • select lower('JJJJJj')
        • 转小写
      • UPPER()
        • 转大写
      • LTRIM()
        • 去除左边空格
      • RTRIM()
        • 去除右边空格
      • LEFT()
        • 从左边取指定长度字符串
      • RIGHT()
        • 从右边取指定长度字符串
      • SUBSTRING(string,start , length) 
        • 从指定位置取指定长度字符串
    • ADO.NET主要类
      • Connection
        • 主要是开启程序和数据库之间的连接,没有利用连接对象将数据库打开,是无法从数据库中取得数据的
        • Close和Dispose的区别
          • Close以后还可以Open,Dispose以后则不能再用
      • Command
        • 主要可以用来对数据库发出一些指令,例如可以对数据库下达查询、新增、修改、删除数据等指令,以及调用存在数据库中的存储过程等,这个对象是架构在Connection对象上,也就是Command对象是通过连接到数据源
      • DataAdapter
        • 主要是在数据源以及DataSet之间执行数据传输的工作,它可以透过Command对象下达命令后,并将取得的数据放入DataSet对象中,这个对象是架构在Command对象上,并提供了许多配合DataSet使用的功能
      • DataSet
        • 这个对象可以视为一个暂存区(Cache),可以把从数据库中查询到的数据保存起来,试着可以将整个数据库显示出来,DataSet是放在内存中的,DataSet的能力不只是可以存储多个Table而已,还可以透过DataAdapter对象取得一些例如主键等的数据结构,并可以记录数据表间的关联。DataSet对象可以说是ADO.NET中重量级的对象,这个对象架构在DataAdapter对象上,本身不具有和数据源沟通的能力,也就是说我们是将DataAdapter对象当作DataSet对象及数据源间传输数据的桥梁,DataSet包含诺干DataTable,DataTable包含诺干DataRow
      • DataReader
        • 当我们只需要循序的读取数据而不需要其它操作时,可以使用 DataReader 对象。DataReader 对象只是一次一笔向下循序的读取数据源中的数据,这些数据是存在数据库服务器中的,而不是一次性加载到程序的内存中的,只能(通过游标)读取当前行的数据,而且这些数据是只读的,并不允许作其它的操作。因为 DataReader 在读取数据的时候限制了每次只读取一笔,而且只能只读,所以使用起来不但节省资源而且效率很好。使用DataReader 对象除了效率较好之外,因为不用把数据全部传回,故可以降低网络的负载。 ADO.NET 使用 Connection 对象来连接数据库,使用 Command 或 DataAdapter 对象来执行SQL 语句,并将执行的结果返回给 DataReader 或 DataAdapter ,然后再使用取得的DataReader 或 DataAdapter 对象操作数据结果。
    • 数据库连接字符串
      • server=.;database='dbName';uid=sa;pwd=123
    • SqlConnection类的State属性
      • 是判断数据库连接状态的一组枚举值
    • SqlCommand类的方法:
      • ExecuteNonQuery()
        • 执行非查询语句(增、删、改),返回受影响函数
      • ExecuteScalar()
        • 返回查询结果集的首行首列,是一个Object类型。
      • ExecuteReader()
        • 返回一个游标指针,然后用read()方法一行一行的读。性能很好。
    • StatementCompleted事件的触发
      • 每条SQL语句执行完后会触发
    • 获得刚刚插入数据库的自增id
      • 方法一:string strSql="Insert into Student(name,age,cid) values ('{0}','{1}','{2}'); Select @@identity;"     
      • 方法二:string strSql="Insert into Student(name,age,cid) output inserted.id values('{0}','{1}','{2}') "
    • Sql注入攻击(避免方式?)
      • 参数化查询,SqlParameter
    • 如何使用迭代生成树形菜单
      • void BuildTree(TreeNode node, ListCategory> list) 

        {

              //获得父元素的ID

                      int pId = Convert.ToInt32(node.Tag);

              foreach (Category model in list)      

          {

             //找出集合中 父ID 和传入参数一致的         

             if (model.TParentId == pId)          

            {             

               //创建子节点              

              TreeNode sonNode = new TreeNode(model.TName);              

              //将子节点自己的ID存入 节点的 TAG中              

              sonNode.Tag = model.TId;              

              //将子节点 添加到父节点中              

              node.Nodes.Add(sonNode);             

               //迭代 调用(看看子节点还有没有子节点)              

              BuildTree(sonNode, list);          

            }      

          }  

      }

    • 单例模式(单例模式的创建)
      • 关闭要实现单例模式的类的构造函数(私有化构造函数)
      • 在类中添加一个私有的类的静态变量
      • 在类中添加一个共有的方法,返回当前的静态变量,在方法中判断静态变量是否为null,如果为null则先new在返回

        public Person GetSingleInstance()     

        {       

           //在多线程情况下,需要 加锁        

           //这里:第一,直接锁当前的对象; 第二,定义一个线程 锁的标识volatile,然后锁住标识         

          lock(_mySinglePerson)          

          {             

            if(_mySinglePerson == null || _mySinglePerson.IsDisPosed)           

             {              

               _mySinglePerson = new Person();           

             }      

          }        

        return _mySinglePerson;     

      }

    • DataTable的使用
      • DataTable dt = new DataTable(); foreach(DataRow row in dt.Rows) { string str = row["columnName"].ToString();         .... }

    • 类SqlDataAdapter的使用(重点)
      • Fill()方法
      • 注意:SqlDataAdapter的内部还是使用了SqlDataRader去读取数据,只不过读取的过程微软帮我们封装了
    • 类SqlCommandBuilder的使用(注意:他必须操作的是有主键的数据库)
      • 往里边传入一个DataAdapter对象,然后可以用相应方法直接执行对表的操作,使用相当简单,功能也很强大,主要是微软为我们做了一系列封装,简化了程序员的操作(但一般我们都不使用这种方式对数据表进行操作)
      • <span>//SQL命令生成助手(适配器)</span>  SqlCommandBuilder scb<span>=</span><span><strong>new</strong></span><span> </span>SqlCommandBuilder(da);    <span>//适配器在助手生成的SQL语句帮助下,成功的修改类数据库    da.Update(ds,"tempTable");</span>     MessageBox.Show(<span>"修改成功"</span>)

    • 提取查询语句,封装SqlHelper类(不仅要会,而且要理解思想)

    • SQL中的Switch语句
      • 直接对列进行值的判断
        • then的值必须是同一种类型(因为列的类型只能有一个)
        • select pId,

          case pTypeId

              when 1 then 'a'

              when 2 then 'b'

              else 'c'

              end,

              pName from PhoneNum
      • 一般用来为列的取值范围
        • case不一定非要和列在一起判断
        • select studentId,成绩=(    

              case

                  when english between 90 and 100 then 'A'

                  when english between 80 and 89 then 'B'

                  when english between 70 and 79 then 'C'

                  when english between 60 and 69 then 'D'

                  when english  60 then 'E'

                  else '缺考'

              end

          )

          from score
    • SQL中的子查询
      • 在结果集的基础上,再次查询,一定要给结果集取别名,否则会报错
      • select * from (select * from bc) as temp
    • SQL中的Exists用法
      • 先执行的是主查询,然后再执行子查询,将匹配行的数据显示出来
        • select * from tbl where exists(select * from phonType where tbl.pid=phonType.pid)
      • 判断结果集是否存在,但效率低
        • if exists(select * from tbl where ptId=1)

              select 1

          else

              select 2
    • SQL中的Any
      • Any相当于条件是很多个or
        • select * from Phone where pTypeID=any(select pType from b)
        • select * from Phone where pTypeID=1 or pTypeID=2
    • SQL中的All
      • All相当于条件是很多个and
        • select * from Phone where pTypeId=all(select pTypeId from b)
        • select * from Phone where pTypeId=1 and pTypeId=2
      • any、in、all匹配结果集时,结果集只能有一个列
    • SQL2008 微软官方推荐分页方式
      • select * from(

            select row_number() over(order by ar_id)as num,*from area

        )as t where runm between 10 and 14
    • SQL中表等值连接(内连接) inner join
      • 任何一方都必须满足连接条件,如果有一方不满足连接条件就不显示
      • select * from Phone inner join PhoneType on n.pTypeId=t.ptId
    • SQL中表左连接(左外连接) left join
      • 保证左边的数据都有,根据左边数据匹配,显示Join左边表的所有记录,右侧表中符合条件的显示,不符合条件的就显示null
      • select * from Phone n left join PhoneType t on n.pTypeId=t.ptId
    • SQL中表右连接(右外连接) right join
      • 保证右边的数据都有,根据右边数据匹配
      • select * from PhoneNum n right join PhoneType t on n.pTypeId = t.ptId
    • SQL中表交叉连接(两张表的乘积)
      • select * from student cross join Score
    • SQL中表全连接 full join
      • 左右两边的数据都进行匹配,相当于左连接和右连接相加和inner join刚好相反
      • select * from PhoneNum n full join PhoneType t on n.pTypeId = t.ptId

    • SQL中变量
      • 声明变量
        • declare @age int
      • 变量赋值
        • set @age=3
      • 声明并赋值
        • select @age=3
      • 如果表数据出现多行,则将最后一行的列赋值给变量
        • select @age=age from Student
      • 输出变量的值
        • print @age
    • SQL中的事务
      • begin transaction     开始事务
      • rollback transaction       回滚事务
      • commit transaction       提交事务
      • 银行事务转账例子
        • declare @err int

          set @err = 0

          begin transaction

              begin

                  print '开始事务'

                  update bank set balance=balance-1000 where cid='0001'

                  set @err=@err+@@ERROR

                  update bank set balance=balance + 1000 where cid='0002'

                  set @err=@err+@@ERROR

                  if(@err>0)

                      begin

                          rollback transaction

                          print '回滚事务'

                      end

                  else

                      begin

                          commit transaction

                          print '提交事务'

                      end

              end
    • 创建存储过程
      • create procedure usp_transferMoney

        @intPerson varchar(20)

        @outPerson varchar(20) '123' --可以给默认值,当参数有默认值的时候,执行的时候可以不传该参数

        @abcPerson varchar(20)

        as

        select @intPerson,@outPerson,@abcPerson
    • 存储过程带输出参数
      • --登陆成功返回用户名不存在返回密码错误返回登陆超过次返回试登陆次数超过次返回

        --drop proc login

        create proc Login

            @result int output,

            @times int output,

            @name varchar(10),

            @pwd varchar(10)

        as

            select @times = uTimes from [user] where uName=@name

            if(@times>=3)

                begin

                    set @result = 4

                    return

                end

            if exists(select * from [user] where uName=@name)

                begin

                    if exists(select * from [user] where uName=@name and uPwd=@pwd)

                        begin

                            set @result = 1

                        end

                    else --密码错误返回

                        begin

                            set @result = 3

                            update [user] set uTimes= uTimes+1 where uName=@name

                            select @times = uTimes from [user] where uName=@name

                        end

                end

            else --用户名不存在返回

                begin

                    set @result = 2

                end

        insert into [user] values('admin','000000',0)

        update [user] set uTimes=0

        select * from [user]

        declare @times int,@r int

        exec Login @r output,@times output ,'admin111','admin'

        print 'times'+cast(@times as varchar)

        print 'result'+ cast(@r as varchar)
    • 调用存储过程
      • 无参数的存储过程调用
        • Exec usp_upGrade
      • 有参数的存储过程两种调用法
        • EXEC usp_upGrade2 60,55 ---按次序
        • EXEC usp_upGrade2 @english=55,@math=60 --参数名
      • 参数名参数有默认值时
        • EXEC usp_upGrade2 --都用默认值

        • EXEC usp_upGrade2 1 --第一个用默认值

        • EXEC usp_upGrade2 1,5 --不用默认值

    • 触发器定义
      • 触发器是一种特殊的存储过程
      • 触发器不能传参,通过事件进行触发执行
      • 针对tbL_abc表的新增之后的触发器

        • Create Trigger triggerName on tbL_abc

          after

          insert

          as

          begin

              select * from inserted --保存了引发新增触发器的新增数据,只能在触发器中访问

          end

    • 触发器类型
      • after和for是在执行操作后触发
      • instead of 是在操作之前触发(替换触发器),但不会执行原语句
    • 触发器触发条件
      • update
      • insert
      • delete
    • 什么是索引
      • 就是为某个表,某个列建立一个查找目录,如果没有目录,汉语字典就要一页一页的翻,有了目录直接翻目录,快速定位到查找位置
    • 索引类型
      • 聚集索引(拼音目录)
        • 数据的排列顺序,按照聚集索引排列(控制表的物理顺序)
        • 每个表只能建立一个聚集索引
      • 非聚集索引(偏旁部首目录)
        • 非聚集索引不会改变表的物理顺序
        • 每个表可以建立多个非聚集索引
    • 什么是填充因子
      • 就是为每页索引设置预留空间,在将来加入新索引的时候,就只需要更新当前索引页,而不需要更新索引树
      • 如每页索引1M大小,当填充因子设置为60%,在每页只存放60%的数据,剩下40%留给将来要加入的索引项使用
    • 什么是临时表
      • 是存在缓存中,而不是写在文件中
      • 可以在系统数据库→tempdb中找到
    • 什么是局部临时表
      • 生命周期在当前会话,当前会话结束就销毁临时表
      • 相当于C#的局部成员
      • 创建时表名前加一个#号
      • create table #tempUsers

        (

            id int identity(1,1),

            name varchar(20)

        )
    • 什么是全局临时表
      • 多个用户可以共享这个全局临时表
      • 当所有会话都退出的时候,这个全局临时表才会被销毁
      • 相当与C#的static 静态成员
      • 创建时,表名前面加两个##号
      • create table ##tempUsers

        (

            id 

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Go 언어는 데이터베이스의 추가, 삭제, 수정 및 쿼리 작업을 어떻게 구현합니까? Go 언어는 데이터베이스의 추가, 삭제, 수정 및 쿼리 작업을 어떻게 구현합니까? Mar 27, 2024 pm 09:39 PM

Go 언어는 효율적이고 간결하며 배우기 쉬운 프로그래밍 언어입니다. 동시 프로그래밍과 네트워크 프로그래밍의 장점 때문에 개발자들이 선호합니다. 실제 개발에서 데이터베이스 작업은 필수적인 부분입니다. 이 기사에서는 Go 언어를 사용하여 데이터베이스 추가, 삭제, 수정 및 쿼리 작업을 구현하는 방법을 소개합니다. Go 언어에서는 일반적으로 사용되는 SQL 패키지, Gorm 등과 같은 타사 라이브러리를 사용하여 데이터베이스를 운영합니다. 여기서는 sql 패키지를 예로 들어 데이터베이스의 추가, 삭제, 수정 및 쿼리 작업을 구현하는 방법을 소개합니다. MySQL 데이터베이스를 사용하고 있다고 가정합니다.

PHP MQTT 클라이언트 개발 가이드 PHP MQTT 클라이언트 개발 가이드 Mar 27, 2024 am 09:21 AM

MQTT(MessageQueuingTelemetryTransport)는 IoT 장치 간 통신에 일반적으로 사용되는 경량 메시지 전송 프로토콜입니다. PHP는 MQTT 클라이언트를 개발하는 데 사용할 수 있는 일반적으로 사용되는 서버측 프로그래밍 언어입니다. 이 기사에서는 PHP를 사용하여 MQTT 클라이언트를 개발하는 방법을 소개하고 다음 내용을 포함합니다. MQTT 프로토콜의 기본 개념 PHPMQTT 클라이언트 라이브러리의 선택 및 사용 예: PHPMQTT 클라이언트를 사용하여 게시 및

에이전트의 경계 탐색: 대규모 언어 모델 에이전트의 성능을 종합적으로 측정하고 개선하기 위한 모듈형 벤치마크 프레임워크인 AgentQuest 에이전트의 경계 탐색: 대규모 언어 모델 에이전트의 성능을 종합적으로 측정하고 개선하기 위한 모듈형 벤치마크 프레임워크인 AgentQuest Apr 11, 2024 pm 08:52 PM

대규모 모델의 지속적인 최적화를 기반으로 하는 LLM 에이전트(이러한 강력한 알고리즘 엔터티)는 복잡한 다단계 추론 작업을 해결할 수 있는 잠재력을 보여주었습니다. 자연어 처리부터 딥 러닝까지 LLM 에이전트는 인간의 언어를 이해하고 생성할 수 있을 뿐만 아니라 전략을 수립하고 다양한 환경에서 작업을 수행하며 심지어 API 호출 및 코딩을 사용하여 빌드까지 할 수 있어 점차 연구 및 산업의 초점이 되고 있습니다. 솔루션. 이러한 맥락에서 AgentQuest 프레임워크의 도입은 LLM 에이전트의 평가 및 발전을 위한 모듈식 벤치마킹 플랫폼을 제공할 뿐만 아니라 연구원에게 이러한 에이전트의 성능을 추적하고 개선할 수 있는 강력한 도구를 제공합니다. 좀 더 세분화된 수준

PHP에서 MySQLi를 사용하여 데이터베이스 연결을 설정하는 방법에 대한 자세한 튜토리얼 PHP에서 MySQLi를 사용하여 데이터베이스 연결을 설정하는 방법에 대한 자세한 튜토리얼 Jun 04, 2024 pm 01:42 PM

MySQLi를 사용하여 PHP에서 데이터베이스 연결을 설정하는 방법: MySQLi 확장 포함(require_once) 연결 함수 생성(functionconnect_to_db) 연결 함수 호출($conn=connect_to_db()) 쿼리 실행($result=$conn->query()) 닫기 연결( $conn->close())

Hibernate는 어떻게 다형성 매핑을 구현합니까? Hibernate는 어떻게 다형성 매핑을 구현합니까? Apr 17, 2024 pm 12:09 PM

Hibernate 다형성 매핑은 상속된 클래스를 데이터베이스에 매핑할 수 있으며 다음 매핑 유형을 제공합니다. Join-subclass: 상위 클래스의 모든 열을 포함하여 하위 클래스에 대한 별도의 테이블을 생성합니다. 클래스별 테이블: 하위 클래스별 열만 포함하는 하위 클래스에 대한 별도의 테이블을 만듭니다. Union-subclass: Joined-subclass와 유사하지만 상위 클래스 테이블이 모든 하위 클래스 열을 통합합니다.

iOS 18에는 손실되거나 손상된 사진을 검색할 수 있는 새로운 '복구된' 앨범 기능이 추가되었습니다. iOS 18에는 손실되거나 손상된 사진을 검색할 수 있는 새로운 '복구된' 앨범 기능이 추가되었습니다. Jul 18, 2024 am 05:48 AM

Apple의 최신 iOS18, iPadOS18 및 macOS Sequoia 시스템 릴리스에는 사진 애플리케이션에 중요한 기능이 추가되었습니다. 이 기능은 사용자가 다양한 이유로 손실되거나 손상된 사진과 비디오를 쉽게 복구할 수 있도록 설계되었습니다. 새로운 기능에는 사진 앱의 도구 섹션에 '복구됨'이라는 앨범이 도입되었습니다. 이 앨범은 사용자가 기기에 사진 라이브러리에 포함되지 않은 사진이나 비디오를 가지고 있을 때 자동으로 나타납니다. "복구된" 앨범의 출현은 데이터베이스 손상으로 인해 손실된 사진과 비디오, 사진 라이브러리에 올바르게 저장되지 않은 카메라 응용 프로그램 또는 사진 라이브러리를 관리하는 타사 응용 프로그램에 대한 솔루션을 제공합니다. 사용자는 몇 가지 간단한 단계만 거치면 됩니다.

대형 모델에서 B-엔드 프런트엔드 코드 생성 지원에 대한 생각과 실습 대형 모델에서 B-엔드 프런트엔드 코드 생성 지원에 대한 생각과 실습 Apr 18, 2024 am 09:30 AM

1. 백그라운드 재구성 작업 중 코드 사양: B-엔드 프런트엔드 개발 프로세스 중에 개발자는 항상 반복 개발의 어려움에 직면하게 됩니다. 많은 CRUD 페이지의 요소 모듈은 기본적으로 유사하지만 여전히 수동으로 개발해야 합니다. , 간단한 요소 구성에 시간이 소요됩니다. 이는 비즈니스 요구 사항의 개발 효율성을 감소시키는 동시에 다양한 개발자의 코딩 스타일이 일관되지 않기 때문에 다른 개발자가 반복을 시작하는 데 더 많은 비용이 듭니다. AI는 단순한 두뇌 능력을 대체합니다. 대규모 AI 모델의 지속적인 개발로 AI는 간단한 이해 기능을 갖추고 있으며 언어를 지침으로 변환할 수 있습니다. 기본 페이지 구축에 대한 일반 지침은 일상적인 기본 페이지 구축 요구 사항을 충족하고 일반 시나리오에서 비즈니스 개발 효율성을 향상시킬 수 있습니다. 2. 링크 목록 생성 B면 페이지 목록, 양식 및 세부 정보 생성 링크는 대략 다음과 같은 범주로 나눌 수 있습니다.

HTML이 데이터베이스를 읽는 방법에 대한 심층 분석 HTML이 데이터베이스를 읽는 방법에 대한 심층 분석 Apr 09, 2024 pm 12:36 PM

HTML은 데이터베이스를 직접 읽을 수 없지만 JavaScript 및 AJAX를 통해 읽을 수 있습니다. 단계에는 데이터베이스 연결 설정, 쿼리 보내기, 응답 처리 및 페이지 업데이트가 포함됩니다. 이 기사에서는 JavaScript, AJAX 및 PHP를 사용하여 MySQL 데이터베이스에서 데이터를 읽는 실제 예제를 제공하고 쿼리 결과를 HTML 페이지에 동적으로 표시하는 방법을 보여줍니다. 이 예제에서는 XMLHttpRequest를 사용하여 데이터베이스 연결을 설정하고 쿼리를 보내고 응답을 처리함으로써 페이지 요소에 데이터를 채우고 데이터베이스를 읽는 HTML 기능을 실현합니다.

See all articles