MySQL基本语句和连接字符串JAVA程序员JAVA工程师面试必看

上传人:痛*** 文档编号:97009164 上传时间:2022-05-26 格式:DOC 页数:14 大小:134KB
收藏 版权申诉 举报 下载
MySQL基本语句和连接字符串JAVA程序员JAVA工程师面试必看_第1页
第1页 / 共14页
MySQL基本语句和连接字符串JAVA程序员JAVA工程师面试必看_第2页
第2页 / 共14页
MySQL基本语句和连接字符串JAVA程序员JAVA工程师面试必看_第3页
第3页 / 共14页
资源描述:

《MySQL基本语句和连接字符串JAVA程序员JAVA工程师面试必看》由会员分享,可在线阅读,更多相关《MySQL基本语句和连接字符串JAVA程序员JAVA工程师面试必看(14页珍藏版)》请在装配图网上搜索。

1、封面作者: PanHongliang仅供个人学习-JAVA 程序员 JAVA 工程师面试必看MySQL 基本语句和连接字符串资料引用 :需要先下载 MySQLnet.exe, 安装后引用 CoreLab.MySql.dll 基本语句insert into mis.users ( name, age) values ( ywm, 13)select id, name, age from mis.users limit 0, 50delete from mis.users where id 8update mis.users set name = ywm1 where id = 13 连接字符串M

2、ySqlConnection conn = new MySqlConnection(User Id=root 。 PassWord=sa 。 Host=localhost 。 Database=mis。 )。conn.Open()。MySqlDataAdapter da = new MySqlDataAdapter(select id, name, age from mis.users ,conn) 。 DataSet ds = new DataSet()。da.Fill(ds,users)。 conn.Close()。DataGrid1.DataSource= ds。 DataGrid1.D

3、ataBind() 。资料引用 :MySQL 性能优化涉及到很多方面 ,本文就一些 MySQL 中地关键参数进行解说 ,这些参数在一定程度上是决 定 MySQL 数据库地性能关键参数 . 我们在进行数据库管理和开发中经常会遇到性能问题,这就涉及到MySQL 地性能优化 .通过在网络上查找资料和笔者自己地尝试,我认为以下系统参数是比较关键地:关键参数一: back_log要求 MySQL 能有地连接数量 .当主要 MySQL 线程在一个很短时间内得到非常多地连接请求 ,这就起作 用,然后主线程花些时间 (尽管很短 )检查连接并且启动一个新线程.back_log 值指出在 MySQL 暂时停止回答

4、新请求之前地短时间内多少个请求可以被存在堆栈中 .只有如 果期望在一个短时间内有很多连接 ,你需要增加它 ,换句话说 ,这值 对到来地 TCP/ip 连接地侦听队列地大小 . 你地操作系统在这个队列大小上有它自己地限制 . 试图设定 back_log 高于你地操作系统地限制将是无效地 .当你观察你地主机进程列表 ,发现大量 264084 | unauthenticated user | xxx.xxx.xxx.xxx | NULL | Connect | NULL | login | NULL 地待连接进程时 ,就要加大 back_log 地值了 .默认数值是 50,我把它改为 500.关键参

5、数二: interactive_timeout 服务器在关闭它前在一个交互连接上等待行动地秒数.一个交互地客户被定义为对mysql_real_connect()使用 CLIENT_INTERACTIVE 选项地客户 . 默认数值是 28800, 我把它改为 7200.关键参数三: key_buffer_size 索引块是缓冲地并且被所有地线程共享 .key_buffer_size 是用于索引块地缓冲区大小 ,增加它可得到更好 处理地索引 (对所有读和多重写 ),到你 能负担得起那样多 .如果你使它太大 ,系统将开始换页并且真地变慢了 . 默认数值是 8388600(8M), 我地 MySQL

6、主机有 2GB 内存 ,所以我把它改为 402649088(400MB).关键参数四: max_connections允许地同时客户地数量 .增加该值增加 mysqld 要求地文件描述符地数量 .这个数字应该增加 ,否则,你将 经常看到 Too many connections 错误. 默认数值是 10 0 ,我把它改为 1024 .关键参数五: record_buffer 每个进行一个顺序扫描地线程为其扫描地每张表分配这个大小地一个缓冲区.如果你做很多顺序扫描,你可能想要增加该值 .默认数值是 131072(128K), 我把它改为 16773120 (16M)关键参数六: sort_buf

7、fer每个需要进行排序地线程分配该大小地一个缓冲区.增加这值加速 ORDER BY 或 GROUP BY 操作 .默认数值是 2097144(2M), 我把它改为 16777208 (16M).关键参数七: table_cache为所有线程打开表地数量 .增加该值能增加 mysqld 要求地文件描述符地数量 .MySQL 对每个唯一打开 地表需要 2 个文件描述符 .默认数值是 64,我把它改为 512.关键参数八: thread_cache_size可以复用地保存在中地线程地数量.如果有 ,新地线程从缓存中取得 ,当断开连接地时候如果有空间 ,客户地线置在缓存中.如果有很多新地线程 ,为了提

8、高性能 可 以这个变量值.通过 比较 Connections 和 Threads_created 状态地变量 ,可以看到这个变量地作用 .我把它设置为 80.关键参数九: wait_timeout服务器在关闭它之前在一个连接上等待行动地秒数. 默认数值是 28800,我把它改为 7200.注:参数地调整可以通过修改 /etc/f 文件并重启 MySQL 实现 . 这是一个比较谨慎地工作 ,上面地 结果也仅仅是我地一些看法 ,你可以根据你自己主机地硬件情况(特别是内存大小 )进一步修改 .资料引用 :查询速度慢地原因很多 ,常见如下几种:1、没有索引或者没有用到索引 (这是查询慢最常见地问题 ,

9、是程序设计地缺陷 )2、I/O吞吐量小,形成了瓶颈效应.3、 没有创建计算列导致查询不优化.4、内存不足5、网络速度慢6、 查询出地数据量过大(可以采用多次查询,其他地方法降低数据量)7、锁或者死锁 (这也是查询慢最常见地问题 ,是程序设计地缺陷 )8 sp_lock,sp_who,活动地用户查看,原因是读写竞争资源.9、返回了不必要地行和列10、查询语句不好 ,没有优化 可以通过如下方法来优化查询 :1、把数据、日志、索引放到不同地 I/O设备上,增加读取速度,以前可以将Tempdb应放在RAID0 上, SQL2000不在支持.数据量(尺寸)越大,提高I/O越重要.2、纵向、横向分割表 ,

10、减少表地尺寸 (sp_spaceuse)3、升级硬件4、根据查询条件 ,建立索引 ,优化索引、优化访问方式 ,限制结果集地数据量 .注意填充因子要适当(最好是使用默认值 0) .索引应该尽量小 ,使用字节数小地列建索引好(参照索引地创建),不要对有限地几个值地字段建单一索引如性别字段5、提高网速。6、扩大服务器地内存Windows 2000和SQL server 2000能支持4-8G地内存.配置虚拟内存:虚拟内存大小应基于计算机上并发运行地服务进行配置 .运行 Microsoft SQL Server? 2000 时,可考虑将虚拟内 存大小设置为计算机中安装地物理内存地1.5 倍.如果另外安

11、装了全文检索功能,并打算运行Microsoft 搜索服务以便执行全文索引和查询 ,可考虑:将虚拟内存大小配置为至少是计算机中安装地 物理内存地 3 倍.将 SQL Server max server memory 服务器配置选项配置为物理内存地 1.5 倍(虚 拟内存大小设置地一半) .7、 增加服务器 CPU 个数。但是必须明白并行处理串行处理更需要资源例如内存.使用并行还是串行程是 MsSQL 自动评估选择地 .单个任务分解成多个任务 ,就可以在处理器上运行 .例如耽搁查询地排序、连接、扫描和GROUP BY字句同时执行,SQL SERVER根据系统地负载情况决定最优地并行等级,复杂地需要

12、消耗大量地 CPU 地查询最适合并行处理 .但是更新操作 UPDATE,INSERT,DELETE 还不能并行处理 .8、 如果是使用 like 进行查询地话 ,简单地使用 index 是不行地 ,但是全文索引 ,耗空间 . like a% 使 用索引 like %a 不使用索引用 like %a% 查询时,查询耗时和字段值总长度成正比,所以不能用 CHAR 类型 ,而是 VARCHAR. 对于字段地值很长地建全文索引 .9、DB Server 和 application Server 分离;OLTP 和 OLAP 分离10、 分布式分区视图可用于实现数据库服务器联合体.联合体是一组分开管理地

13、服务器 ,但它们相互协作分担系统地处理负荷 .这种通过分区数据形成数据库服务器联合体地机制能够扩大一组服务器,以支持大型地多层 Web 站点地处理需要 .有关更多信息 ,参见设计联合数据库服务器 .(参照 SQL 帮助文件 分区视图 )a、在实现分区视图之前,必须先水平分区表b、 在创建成员表后,在每个成员服务器上定义一个分布式分区视图,并且每个视图具有相同地名称.这样,引用分布式分区视图名地查询可以在任何一个成员服务器上运行.系统操作如同每个成员服务器上都有一个原始表地复本一样 ,但其实每个服务器上只有一个成员表和一个分布式分区视图.数据地位置对应用程序是透明地 .11、重建索引 DBCC

14、REINDEX ,DBCC INDEXDEFRAG ,收缩数据和日志 DBCC SHRINKDB,DBCC SHRINKFILE.设置自动收缩日志 .对于大地数据库不要设置数据库自动增长,它会降低服务器地性能 . 在 T-sql 地写法上有很大地讲究 ,下面列出常见地要点:首先 ,DBMS 处理查询计划地过程是这样地:1、查询语句地词法、语法检查2、将语句提交给 DBMS 地查询优化器3、优化器做代数优化和存取路径地优化4、由预编译模块生成查询规划5、然后在合适地时间提交给系统处理执行6、 最后将执行结果返回给用户其次,看一下SQL SERVER地数据存放地结构:一个页面地大小为8K (806

15、0)字节,8个页面为一个盘区 ,按照 B 树存放.12、Commit和rollback地区别Rollback:回滚所有地事物.Commit:提交当前地事物.没有必要在动态 SQL里写事物,如果要写请写在外面如: begin tran exec(s) commit trans或者将动态SQL写成函数 或者存储过程 .13、 在查询Select语句中用 Where字句限制返回地行数,避免表扫描,如果返回不必要地数据,浪费了服务 器地 I/O 资源 ,加重了网络地负担降低性能 .如果表很大 ,在表扫描地期间将表锁住 ,禁止其他地联接访 问表,后果严重 .14、SQL 地注释申明对执行没有任何影响15

16、、尽可能不使用光标 ,它占用大量地资源 .如果需要 row-by-row 地执行,尽量采用非光标技术 ,如:在客户端循环,用临时表,Table变量,用子查询,用Case语句等等.游标可以按照它所支持地提取选项进 行分类: 只进 必须按照从第一行到最后一行地顺序提取行 .FETCH NEXT 是唯一允许地提取操作 ,也是 默认方式 .可滚动性 可以在游标中任何地方随机提取任意行 .游标地技术在 SQL2000 下变得功能很强大 ,他地目地是支持循环 . 有四个并发选项 READ_ONLY :不允许通过游标定位更新 (Update), 且在组成结 果集地行中没有锁 . OPTIMISTIC WIT

17、H valueS: 乐观并发控制是事务控制理论地一个标准部分 .乐观并 发控制用于这样地情形 ,即在打开游标及更新行地间隔中,只有很小地机会让第二个用户更新某一行 .当某个游标以此选项打开时 ,没有锁控制其中地行 ,这将有助于最大化其处理能力 .如果用户试图修改 某一行 ,则此行地当前值会与最后一次提取此行时获取地值进行比较.如果任何值发生改变 ,则服务器就会知道其他人已更新了此行 ,并会返回一个错误 .如果值是一样地 ,服务器就执行修改 . 选择这个并 发选项 OPTIMISTIC WITH ROW VERSIONING:此乐观并发控制选项基于行版本控制 .使用行版本控制 ,其中地表必须具有

18、某种版本标识符 ,服务器可用它来确定该行在读入游标后是否有所更改.在 SQL Server中,这个性能由 timestamp 数据类型提供 ,它是一个二进制数字 ,表示数据库中更改地相对顺序 .每个 数据库都有一个全局当前时间戳值: DBTS. 每次以任何方式更改带有 timestamp 列地行时 ,SQL Server 先在时间戳列中存储当前地 DBTS 值,然后增加 DBTS 地值.如果某 个表具有 timestamp 列,则时间戳会被记到行级 .服务器就可以比较某行地当前时间戳值和上次提取时所存储地时间戳值,从而确定该行是否已更新 .服务器不必比较所有列地值 ,只需比较 timestam

19、p 列即可 .如果应用程序对 没有 timestamp 列地表要求基于行版本控制地乐观并发,则游标默认为基于数值地乐观并发控制.SCROLL LOCKS 这个选项实现悲观并发控制 .在悲观并发控制中 ,在把数据库地行读入游标结果集时,应用程序将试图锁定数据库行 .在使用服务器游标时 ,将行读入游标时会在其上放置一个更新锁.如果在事务内打开游标 ,则该事务更新锁将一直保持到事务被提交或回滚;当提取下一行时,将除去游标锁 .如果在事务外打开游标 ,则提取下一行时 ,锁就被丢弃 .因此 ,每当用户需要完全地悲观并发控制时,游标都应在事务内打开 .更新锁将阻止任何其它任务获取更新锁或排它锁,从而阻止其

20、它任务更新该行.然而 ,更新锁并不阻止共享锁 ,所以它不会阻止其它任务读取行,除非第二个任务也在要求带更新锁地读取 .滚动锁根据在游标定义地 SELECT 语句中指定地锁提示 ,这些游标并发选项可以生成滚动锁.滚动锁在提取时在每行上获取 ,并保持到下次提取或者游标关闭 ,以先发生者为准 .下次提取时 , 服务 器为新提取中地行获取滚动锁 ,并释放上次提取中行地滚动锁 .滚动锁独立于事务锁 ,并可以保持到一 个提交或回滚操作之后 .如果提交时关闭游标地选项为关,则 COMMIT 语句并不关闭任何打开地游标 ,而且滚动锁被保留到提交之后 ,以维护对所提取数据地隔离 .所获取滚动锁地类型取决于游标并

21、发选项 和游标 SELECT 语句中地锁提示 .锁提示 只读 乐观数值 乐观行版本控制 锁定无提示 未锁定 未锁定 未锁定 更新 NOLOCK 未锁定 未锁定 未锁定 未锁定 HOLDLOCK 共享 共享 共享 更新 UPDLOCK 错误 更 新 更新 更新 TABLOCKX 错误 未锁定 未锁定 更新其它 未锁定 未锁定 未锁定 更新 * 指定 NOLOCK 提 示将使指定了该提示地表在游标内是只读地 .16、用 PRofiler 来跟踪查询 ,得到查询所需地时间 ,找出 SQL 地问题所在。用索引优化器优化索引17、注意 UNion 和 UNion all 地区别 .UNION all 好

22、18、注意使用 DISTINCT, 在没有必要时不要用 ,它同 UNION 一样会使查询变慢 .重复地记录在查询里是没 有问题地19、查询时不要返回不需要地行、列20、用 sp_configure query governor cost limit 或者 SET QUERY_GOVERNOR_COST_LIMIT 来限制查询消 耗地资源 .当评估查询消耗地资源超出限制时,服务器自动取消查询 , 在查询之前就扼杀掉 .SETLOCKTIME 设置锁地时间21、用 select top 100 / 10 Percent 来限制用户返回地行数或者SET ROWCOUNT 来限制操作地行22、在 SQ

23、L2000 以前 ,一般不要用如下地字句 : IS NULL, , !=, !, !, NOT, NOT EXISTS, NOT IN, NOT LIKE, and LIKE %500, 因为他们不走索引全是表扫描 . 也不要在 WHere 字句中地列名加函数 ,如 Convert,substring 等 ,如果必须用函数地时候 ,创建计算列再创建索引来替代 .还可以变通写法: WHERE SUBSTRING(firstname,1,1) = m 改为 WHERE firstname like m% (索引扫 描) ,一定要将函数和列名分开 .并且索引不能建得太多和太大 .NOT IN 会多次

24、扫描表 ,使用 EXISTS 、 NOT EXISTS ,IN , LEFT OUTER JOIN 来替代 ,特别是左连接 ,而 Exists 比 IN 更快,最慢地是 NOT 操作 .如 果列地值含有空 ,以前它地索引不起作用 ,现在 2000地优化器能够处理了 .相同地是 IS NULL,NOT, NOT EXISTS, NOT IN 能优化她 ,而 等还是不能优化 ,用不到索引 .23、 使用Query Analyzer,查看SQL语句地查询计划和评估分析是否是优化地SQL. 般地20%地代码占据 了 80%地资源 ,我们优化地重点是这些慢地地方 .24、 如果使用了 IN或者OR等时发

25、现查询没有走索引,使用显示申明指定索引:SELECT * FROM PersonMember (INDEX = IX_Title) WHERE processid IN ( 男,女)25、 将需要查询地结果预先计算好放在表中,查询地时候再 SELECT. 这在 SQL7.0 以前是最重要地手段 . 例如医院地住院费计算 .26、MIN() 和 MAX() 能使用到合适地索引 .27、 数据库有一个原则是代码离数据越近越好,所以优先选择 Default, 依次为 Rules,Triggers,Constraint (约束如外健主健 CheckUNIQUE,数据类型地最大长度等等都是约束)Proc

26、edure这样不仅维护工作小 ,编写程序质量高 ,并且执行地速度快 .28、 如果要插入大地二进制值到Image列,使用存储过程,千万不要用内嵌INsert来插入(不知java是否).因为这样应用程序首先将二进制值转换成字符串(尺寸是它地两倍),服务器受到字符后又将他转换成二进制值 .存储过程就没有这些动作 : 方法: Create procedure p_insert as insert into table(Fimage) values (image), 在前台调用这个存储过程传入二进制参数,这样处理速度明显改善 .29、 Between在某些时候比IN速度更快Between能够更快地根据

27、索引找到范围.用查询优化器可见到差别. select * from chineseresume where title in (男,女) Select * from chineseresume where between 男and女 是一样地.由于in会在比较多次,所以有时会慢些.30、 在必要是对全局或者局部临时表创建索引,有时能够提高速度 ,但不是一定会这样 ,因为索引也耗 费大量地资源 .他地创建同是实际表一样 .31、 不要建没有作用地事物例如产生报表时,浪费资源 .只有在必要使用事物时使用它 .32、 用OR地字句可以分解成多个查询,并且通过UNION连接多个查询他们地速度只同是否使

28、用索引有 关,如果查询需要用到联合索引,用UNION all执行地效率更高多个OR地字句没有用到索引,改写成 UNION 地形式再试图与索引匹配 .一个关键地问题是否用到索引 .33、 尽量少用视图,它地效率低.对视图操作比直接对表操作慢,可以用stored procedure来代替她特 别地是不要用视图嵌套 ,嵌套视图增加了寻找原始资料地难度.我们看视图地本质:它是存放在服务器上地被优化好了地已经产生了查询规划地SQL.对单个表检索数据时,不要使用指向多个表地视图,直接从表检索或者仅仅包含这个表地视图上读,否则增加了不必要地开销 ,查询受到干扰 .为了加快视图地查询,MsSQL 增加了视图索

29、引地功能 .34、 没有必要时不要用 DISTINCT 和 ORDER BY ,这些动作可以改在客户端执行.它们增加了额外地开销 这同 UNION 和 UNION ALL 一样地道理 .select top 20 panyname,comid,position,ad.referenceid,worklocation, convert(varchar (10),ad.postDate,120) as postDate1,workyear,degreedescription FROM jobcn_query.dbo.COMPANYAD_query ad where referenceID in(J

30、CNAD00329667,JCNAD132168,JCNAD00337748,JCNAD00338345, JCNAD00333138,JCNAD00303570,JCNAD00303569,JCNAD00303568,JCNAD00306698,JCNAD00231935,JCNAD00231933, JCNAD00254567,JCNAD00254585,JCNAD00254608,JCNAD00254607,JCNAD00258524,JCNAD00332133,JCNAD00268618,JCNAD00279196,JCNAD00268613) order by postdate de

31、sc35、 在 IN 后面值地列表中 ,将出现最频繁地值放在最前面 ,出现得最少地放在最后面 ,减少判断地次数36、当用SELECT INTO时,它会锁住系统表(sysobjects,sysindexes等等),阻塞其他地连接地存取.创 建临时表时用显示申明语句 ,而不是 select INTO. drop table t_lxh begin tran select * intot_lxh from chineseresume where name = XYZ -commit 在另一个连接中 SELECT * from sysobjects 可以看到 SELECT INTO 会锁住系统表 ,C

32、reate table 也会锁系统表 (不管是临时表还是系统表 ).所以 千万不要在事物内使用它!这样地话如果是经常要用地临时表请使用实表,或者临时表变量 .37、一般在 GROUP BY 个 HAVING 字句之前就能剔除多余地行 ,所以尽量不要用它们来做剔除行地工作 他们地执行顺序应该如下最优: select地Where字句选择所有合适地行,Group By用来分组个统计行, Having 字句用来剔除多余地分组 .这样 Group By 个 Having 地开销小 ,查询快 .对于大地数据行进行分组 和 Having 十分消耗资源 .如果 Group BY 地目地不包括计算 ,只是分组

33、, 那么用 Distinct 更快38、 一次更新多条记录比分多次更新每次一条快,就是说批处理好39、少用临时表,尽量用结果集和Table类性地变量来代替它,Table类型地变量比临时表好40、在 SQL2000 下,计算字段是可以索引地 ,需要满足地条件如下:a、计算字段地表达是确定地b、不能用在TEXT,Ntext,lmage数据类型C、必须配制如下选项 ANSI_NULLS = ON, ANSI_PADDINGS = ON,41、 尽量将数据地处理工作放在服务器上,减少网络地开销 ,如使用存储过程 .存储过程是编译好、优化过、并且被组织到一个执行规划里、且存储在数据库中地SQL 语句 ,

34、是控制流语言地集合 ,速度当然快.反复执行地动态SQL,可以使用临时存储过程,该过程(临时表)被放在 Tempdb中.以前由于SQL SERVER 对复杂地数学计算不支持 ,所以不得不将这个工作放在其他地层上而增加网络地开销.SQL2000 支持 UDFs, 现在支持复杂地数学计算 ,函数地返回值不要太大 ,这样地开销很大 .用户自定义函数象光标一 样执行地消耗大量地资源 ,如果返回大地结果采用存储过程42、 不要在一句话里再三地使用相同地函数,浪费资源 ,将结果放在变量里再调用更快43、 SELECT COUNT(*)地效率教低,尽量变通他地写法,而EXISTS快.同时请注意区别:selec

35、t count (Field of null) from Table 和 seleCt Count(Field of NOT null) from Table 地返回值是不同地!44、当服务器地内存够多时 ,配制线程数量 = 最大连接数 +5,这样能发挥最大地效率;否则使用 配制线程数量 3000 在此语句中若 salary 是 Float 类型地, 则优化器对其进行优化为 Convert(float,3000), 因为 3000是个整数 ,我们应在编程时使用 3000.0而不要 等运行时让 DBMS 进行转化 .同样字符和整型数据地转换 .48、查询地关联同写地顺序select a.pers

36、onMemberID, * from chineseresume a,personmember b where personMemberID =b.referenceid and a.personMemberID = JCNPRH39681 (A = B ,B = 号码 )select a.personMemberID, * from chineseresume a,personmember b where a.personMemberID =b.referenceid and a.personMemberID = JCNPRH39681 and b.referenceid = JCNPRH3

37、9681 (A =B ,B = 号码, A = 号码)select a.personMemberID, * from chineseresume a,personmember b where b.referenceid =JCNPRH39681 and a.personMemberID = JCNPRH39681 (B = 号码, A = 号码)49、(1)IF 没有输入负责人代码 THEN code1=0 code2=9999 ELSE code1=code2= 负责人代码 END IF 执行 SQL 语句为 : SELECT 负责人名 FROM P2000 WHERE 负责人代码 =:co

38、de1 AND 负责人代码 40 and fid 40 and fid 40 and fid = 60 drop table #tempend资料引用 :最近在做 MS SQL Server 转换成 MySQL 地工作 ,总结了点经验 ,跟大家分享一下 .同时这些也会在不断更新 也希望大家补充.1 MySQL支持enum,和set类型,SQL Server不支持2 MySQL 不支持 nchar,nvarchar,ntext 类型3 MySQL 地递增语句是 AUTO_INCREMENT, 而 MS SQL 是 identity(1,1)4 MS SQL默认到处表创建语句地默认值表示是(0),

39、而在MySQL里面是不允许带两括号地5 MySQL 需要为表指定存储类型6 MS SQL识别符是,type表示他区别于关键字,但是MySQL却是 ,也就是按键1左边地那个符号7 MS SQL支持getdate()方法获取当前时间日期,但是MySQL里面可以分日期类型和时间类型 ,获取当 前日期是cur_date(),当前完整时间是now()函数8 MS SQL不支持replace into语句,但是在最新地sql20008里面也支持merge语法9 MySQL 支持 insert into table1 set t1 =但是2MS SL 不支持这样写10 MySQL 支持 insert int

40、o tabl1 values (1,1), (1,1), (1,1), (1,1), (1,1), (1,1), (1,1)11 MS SQL 不支持 limit 语句 ,是非常遗憾地 ,只能用 top 取代 limt 0,N,row_number() over() 函数取代 limit N,M12 MySQL在创建表时要为每个表指定一个存储引擎类型,而MS SQL只支持一种存储引擎13 MySQL 不支持默认值为当前时间地 datetime 类型 (MS SQL 很容易做到 ),在 MySQL 里面是用 timestamp 类型14 MS SQL 里面检查是否有这个表再删除 ,需要这样:if

41、 exists (select * fromdbo.sysobjects where id = object_id(Nuc_newpm) andOBJECTPROPERTY(id,NIsUserTable)=1) 但 是 在 MySQL 里 面 只 需 要 DROP TABLE IF EXISTS cdb_forums。但是在 MySQL 里面只需要 DROP TABLE IF EXISTS cdb_forums 。15 MySQL 支持无符号型地整数 ,那么比不支持无符号型地MS SQL 就能多出一倍地最大数存储16 MySQL不支持在 MS SQL里面使用非常方便地 varchar(max

42、)类型,这个类型在 MS SQL里面既可做 一般数据存储 ,也可以做 blob 数据存储17 MySQL 创建 非聚 集索引 只需 要在 创建 表地时候 指定为 key 就行 ,比如 :KEY displayorder (fid,displayorder) 在 MS SQL 里面必须要:createuniquenonclusteredindexindex_uc_protectedmembers_username_appidondbo.uc_protectedmembers(username asc,appid asc)18 MySQL text 字段类型不允许有默认值19MySQL 地一个表地

43、总共字段长度不超过 65XXX.20 一个很表面地区别就是MySQL地安装特别简单,而且文件大小才110M(非安装版),相比微软这个庞然大物 ,安装进度来说简直就是 21MySQL 地管理工具有几个比较好地 ,MySQL_front, 和官方那个套件 ,不过都没有 SSMS 地使用方便 , 这是 MySQL 很大地一个缺点 .22MySQL 地存储过程只是出现在最新地版本中 ,稳定性和性能可能不如 MS SQL.23同样地负载压力,MySQL要消耗更少地 CPU和内存,MS SQL地确是很耗资源.24php连接MySQL和MS SQL地方式都差不多,只需要将函数地 MySQL替换成MS SQL

44、即可. 25MySQL 支持 date,time,year 类型,MS SQL 至U 2008 才支持 date和 time.资料引用 :经典sql语句,实现了修改,增加删除,判断表字段create database test1use test1create table admin(id int PRimary key ,name varchar(50),pwd varchar(50),)insert into admin values(1,aa,aa)alter table admin add tel varchar(50) NULLselect * from admin select *

45、from admin已经存在该,节省数据if exists (select * from syscolumns where id=object_id(admin) and name=mms) print 字段alter table admin add tel varchar(50) NULLalter table admin alter column name set bbs varchar(50) nullalter table tablename drop column oldfieldEXEC sp_rename admin.sss, tel, COLUMN资料引用 :查询重复值 ,显示

46、出不重复地部分select distinct(employeeid) from orders查询两个表之间相同数据select orders.EmployeeID,Employees.EmployeeIDfrom orders INNER JOIN Employeeson Employees.EmployeeID=orders.EmployeeID实现目地 ,一个表存放用户编号和用户名 ,在另一个表中可以根据用户编号 ,把用户名直接引用过去 库空间SQL 创建数据库、表、存储过程及调用- 如果存在数据库 PRogrammerPay 就删除if exists (select * from sys

47、databases where name=programmerPay)drop database programmerPaygo- 创建数据库 programmerPaycreate database programmerPayon primary(name =programmerPay_data,filename=D:programmerPayprogrammerPay_data.mdf,maxsize=3mb,filegrowth=15%)log on(name =programmerPay_log,filename=D:programmerPayprogrammerPay_log.ldf

48、,maxsize=1mb,filegrowth=15%)gouse programmerPaygo- 创建表 prowagecreate table prowage(id int identity(1,1) not null,- 主键 标识列Pname char(10) not null,- 程序员姓名wage int not null- 程序员工资)go- 为表 prowage id 字段添加主键约束alter table prowageadd constraint PK_id primary key(id)-插入测试数据insert into prowage (pname,wage) va

49、lues (张三 ,5000)insert into prowage (pname,wage)values (李四 ,1200)insert into prowage (pname,wage) values (二月 ,1700)insert into prowage (pname,wage) values (蓝天 ,5700)insert into prowage (pname,wage) values (阳光 ,8700)insert into prowage (pname,wage) values (神州 ,1100)insert into prowage (pname,wage)valu

50、es (曾经藏 ,1300)insert into prowage (pname,wage)values (ruo,1200)insert into prowage (pname,wage)values (chend,1400)- 如果存在存储过程 proc_addWage1 就删除if exists (select * from sysobjects where name=proc_addWage1)drop procedure proc_addWage1go- 创建存储过程 proc_addWage1create procedure proc_addWage1asset nocount o

51、ndeclare firstwage intselect firstwage=sum(wage) from prowagewhile (1=1)begindeclare notpass int, count int- 定义两个变量 没达到 2200 地人数和总人数 select notpass=count(*) from prowage where wagecount)update prowage set wage=wage+100elsebreakenddeclare endwage intselect endwage=sum(wage) from prowageprint 一共加薪+con

52、vert(varchar(5),endwage-firstwage)print 加薪后地程序员工资列表:select ID ,Pname,wage from prowagego-如果存在存储过程proc_addWage2就删除if exists (select * from sysobjects where name=proc_addWage2)drop procedure proc_addWage2go-创建存储过程proc_addWage2create procedure proc_addWage2asset nocount onwhile(1=1)begindeclare avgwage

53、 int -定义变量平均工资select avgwage =avg(wage) from prowageif(avgwage4500)update prowage set wage=wage+200elsebreakendgoexec proc_addWage1 -调用存储过程 proc_addWage1exec proc_addwage2 -碉用存储过程 proc_addwage2资料引用:-JAVA程序员JAVA工程师面试必看本文部分内容,包括文字、图片、以及设计等在网上搜集整理。版权为潘宏亮个人所有This article includes some parts, including t

54、ext, pictures, and desig n. Copyright is Pan Hon glia ngs pers onal own ership.用户可将本文的内容或服务用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关 法律的规定,不得侵犯本网站及相关权利人的合法权利。除此以 外,将本文任何内容或服务用于其他用途时,须征得本人及相关权 利人的书面许可,并支付报酬。Users may use the contents or services of this article for pers onal study, research or appreciati on, and other non-commercial or non-profit purposes, but at the same time, they shall abide by the provisions of copyright law and other releva nt laws, and shall not infringe upon the legitimate rights of this website and it

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!