精华内容
下载资源
问答
  • 数据库注意事项

    2018-04-18 16:42:41
    数据库注意事项 主要就是6点: 1. 必须考虑业务唯一性并建复合唯一索引 2. 所有字段尽量设置为not null 3. 区分度低的字段不要建索引 4. 逻辑外键要建索引 5. 用UUIDdelete_id varchar(32) NOT NULL DEFAULT ''...

    数据库注意事项

    主要就是6点:
    1. 必须考虑业务唯一性并建复合唯一索引
    2. 所有字段尽量设置为not null
    3. 区分度低的字段不要建索引
    4. 逻辑外键要建索引
    5. 用UUIDdelete_id varchar(32) NOT NULL DEFAULT ''做伪删除
    6. 建议确定无负数的字段设置unsigned

    具体说明

    1. 建表时必须考虑业务唯一性, 比如工单的目标上报sku表factory_mission_detail, 一个工单只会且只能有一条记录描述单个sku的目标数量, 这种情况下就应该给工单ID(mission_id)和sku_id建立复合唯一索引, 并且要注意, 复合索引的顺序很重要也很关键, 复合索引遵循左前缀原则, 就是查询的时候要数据库用上这个复合索引, 在where后面的条件就必须从左往右写, 比如上面的mission_id, sku_id的复合索引, 在查询的时候就必须写成where mission_id = '' and sku_id = '', 否则无法使用该索引. 还有一点是一般我们建复合索引都要考虑查询需求, 比如我们一般会查工单下的sku情况, 而不会出现查某个sku的工单, 所以这个复合索引应该要建成mission_id, sku_id而不是sku_id, mission_id. 总结来说, 就是表达范围大的放前面, 表达范围小的放后面.

      好处:

      1. 可以保证数据层面上不会出现重复数据, 是表单重复提交的最后一道屏障
      2. 提高查询效率
    2. 设计字段时尽量设置字段不能为NULL, 因为在MySQL, NULL值会影响加在字段上的索引效率, 并且会有额外的空间占用, 并且会给应用程序带来很多空指针风险. 具体使用分3种情况:

      1. 业务需求上要求不能为空并且指明有默认值, 比如状态会有个默认状态, 这种情况就设置为not null default '默认值'
      2. 业务需求上要求不能为空并且没有默认值, 这种情况表示没有该字段整条数据都没有意义, 比如节点上报的节点ID为空是没有意义的, 直接设置为not null即可
      3. 业务需求上要求必须有空值表达逻辑, 尽量不要出现这种情况, varchar可以用空字符串当默认值, int可以用0或者-1当默认值
    3. 索引不要随便建, 区分度小的字段建索引是没有意义的, 不能提高查询效率还影响增删改效率. 比如状态值status, 理论上所有枚举字段都不应该加索引.
    4. 一般需要join的字段(就是逻辑外键)应该要建普通索引, 否则在join的时候会全表扫描
    5. 假删除考虑唯一键问题, 使用一个无意义的UUID字段(delete_id varchar(32) NOT NULL DEFAULT '')表示被删除, 如果为空字符串则表示改数据没有被删除, 否则表示被删除. 这么做的话就需要把该表的所有唯一索引(注意是唯一索引)和该字段组成复合索引, 这里要特别小心不要把delete_id建到其它唯一索引的前面, 一定要跟在后面, 比如第一条的mission_id, sku_id复合唯一索引加上delete_id之后必须是mission_id, sku_id, deleted_id.
    6. 最后一条建议, 在设置数值的时候如果业务上确定不会有负数, 建议设置为unsigned(无符号), 可以在占用相同空间的前提下可以加大正数范围
    展开全文
  • SQL数据库注意事项

    2020-06-13 17:32:35
    然后用if exists (select * from sys.databases where name='数据库名称') 判断是否有这个数据库 然后删除 drop database 数据库名称 go 创建数据库 、使用数据库 create database 数据库名 ...

    为了使T-SQL代码一体化

    1. 先使用 use master  go 初始   多次使用批量处理关键字 go

       

    2. 判断是否有这个数据库 然后删除

       if exists (select * from sys.databases where name='数据库名称')   

       drop database 数据库名称

       go

    3. 创建数据库 、使用数据库

      create database 数据库名
      go

      use 数据库名
      go

    4. 创建表 (ps:创建多表时 注意表之间的主外键关系 优先创建 否则无法找到)

      create table 表名
      (
          字段名 数据类型 约束,

          字段名 数据类型 约束,(ps:字段与字段之间用英文,结尾  最后一行不使用)
      )
      go

    5. 常用数据类型:                                 常用约束:

      int 整数                                            not null  不能为空

      float 一位小数                                   identity(,) 标识列  (从某一位数,向后递增数)

      double 两位小数                               primary key 主键  (不允许为空不允许有重复值)

      char() 定长字符                                 unique 唯一  (不允许有重复值 但允许为空)

      varchar() 变长字符串                         check 检查   (检查是否符合规定规则)

      date 日期值                                       default 默认  (对字段设置默认值)

      time 时间值                                       foreign key 外键  (关键字:references)

      datetime 混合日期和时间值              (ps:一般直接在表中创建不使用foreign key 直接在要设                                                                                        置的外键字段设置使用关键字设置)

    6. 查询数据:  select * from 表名

      内连接查询:  select * from 表1,表2 where 表1.主键=表2.外键

    7. 添加数据:  insert into 表名 values('','','','')

      (ps:括号里的添加数据按照创表的字段顺序 用英文,隔开 ''可以用数据类型判断加不加  有自增约束不用添加  有默认值的字段可以使用 default  允许为空的字段可以使用 null)

    8. 删除数据: delete from 表名 where 主键=要删除数据对应的主键

    9. 修改数据: update 表名 set 列名(要改的)=  where 列名(被改的)=

      (ps: 要改的数据列如果是同一个被改的数据列 可以同时改多个 使用英文,隔开)

    展开全文
  • MySQL迁移DM8数据库注意事项 数据库安装时需要注意: 数据库安装后的常用工具: 数据库配置工具:兼容模式需设置为:4(兼容MySQL): 数据迁移工具: 数据管理工具: SQL改造需要...

    MySQL迁移DM8数据库注意事项

    数据库安装时需要注意:

    数据库安装后的常用工具:

     

     

    数据库配置工具:兼容模式需设置为:4(兼容MySQL):

    数据迁移工具:

     

    数据管理工具:

     

    SQL改造需要注意:

    1. MySQL中的“ ` ”无法使用,必须去除表名、字段名两端的“ ` ”
    2. 自增主键列无法插入主键,插入语句中不能存在主键列
    3. 历史数据中存在主表数据删除而关联表数据未删除的,添加自增数据时有可能会数据错误,如:

    student

    id

    name

    gender

    50

    王胜利

    再MySQL若此表主键自增至100,但Id在50之后的数据均被删除,再添加数据时自增主键为101,但在迁移后的DM8中自增主键值为51。

    student_class

    stu_id 

    课程名

    50

    数学

    51

    数学

    此表关联sutdent表,在Id为51的学生数据删除后数据{51,数学}本为无效数据,但在迁移后的DM8中添加了自增主键为51的数据后导致出现数据错乱。

    解决办法:手动新增一条最大的数据即可

    1. union不支持 text、ntext 或 image 数据类型,用 convert(varchar(8000), 字段) as 字段替换即可。
    2. OR 和AND的优先级问题

    MySQL中,AND的优先级高于OR,如果不写括号的情况下,OR默认只执行两边的条件。

    eg:

    SELECT * FROM table WHERE status = 1 AND state = 1 OR state=2

     AND name = ‘xiaoming’

    等同于

    SELECT * FROM table WHERE status = 1 AND (state = 1 OR state=2) 

    AND name = ‘xiaoming’

    在达梦数据库中较为特殊,OR优先级高于AND

    eg:

    SELECT * FROM table WHERE status = 1 AND state = 1 OR state=2

     AND name = ‘xiaoming’

    等同于

    SELECT * FROM table WHERE (status = 1 AND state = 1) OR (state=2   AND name = ‘xiaoming’)

    注意:虽然优先级不同,但是()的优先级都是最高,

    因此,以后写sql时,将OR条件最好进行(),方便兼容,更方便阅读

    1. dm.jdbc.driver.DmdbNClob@466f461b情况:

    有时候查询会出现的情况,考虑是长字段或所有字段总和过长引起的:

    解决方案:

    a、长字段单独查询;

    b、使用left(字段,index)或 convert(varchar(8000),字段) AS 字段(推荐)

    Eg:SELECT convert(varchar(8000),content_text) AS content_text FROM sys_article_system WHERE article_id = 1

     

    函数改造:

    函数FIND_IN_SET代替方案:

    create or replace FUNCTION FIND_IN_SET(piv_str1 varchar2, piv_str2 varchar2, p_sep varchar2 := ',') 

        RETURN NUMBER IS 

          l_idx    number:=0; -- 用于计算piv_str2中分隔符的位置 

          str      varchar2(500);  -- 根据分隔符截取的子字符串 

          piv_str  varchar2(500) := piv_str2; -- piv_str2赋值给piv_str 

          res      number:=0; -- 返回结果 

          res_place      number:=0;-- 原字符串在目标字符串中的位置 

        BEGIN 

        -- 如果字段是null 则返回

        IF piv_str2 IS NULL THEN 

          RETURN res; 

        END IF; 

        -- 如果piv_str中没有分割符,直接判断piv_str1piv_str是否相等,相等 res_place=1 

        IF instr(piv_str, p_sep, 1) = 0 THEN 

           IF piv_str = piv_str1 THEN 

              res_place:=1; 

              res:= res_place; 

           END IF; 

        ELSE 

         -- 循环按分隔符截取piv_str 

        LOOP 

            l_idx := instr(piv_str,p_sep); 

            -- 

            res_place := res_place + 1; 

            -- piv_str中还有分隔符时 

              IF l_idx > 0 THEN 

              -- 截取第一个分隔符前的字段str 

                 str:= substr(piv_str,1,l_idx-1); 

                 -- 判断 str piv_str1 是否相等,相等则结束循环判断 

                 IF str = piv_str1 THEN 

                   res:= res_place; 

                   EXIT; 

                 END IF; 

                piv_str := substr(piv_str,l_idx+length(p_sep)); 

              ELSE 

              -- 当截取后的piv_str 中不存在分割符时,判断piv_strpiv_str1是否相等,相等 res=res_path 

                IF piv_str = piv_str1 THEN 

                   res:= res_place; 

                END IF; 

                -- 无论最后是否相等,都跳出循环 

                EXIT; 

              END IF; 

         END LOOP; 

         -- 结束循环 

         END IF; 

         -- 返回res 

         RETURN res; 

    END FIND_IN_SET;

    函数GROUP_CONCAT代替方案:

    WM_CONCAT(‘’)

    展开全文
  • 1.没选数据库。。。 这个问题我遇到好几次了,每次打开软件都忘记选择自己要操作的数据库,导致半天愣在那里,到处找指令怎么用。。。 指令操作要对应选择要操作的数据库!!! ...

    1.没选数据库。。。

    在这里插入图片描述
    这个问题我遇到好几次了,每次打开软件都忘记选择自己要操作的数据库,导致半天愣在那里,到处找指令怎么用。。。
    指令操作要对应选择要操作的数据库!!!

    2.数据重复。。。

    刚遇到一个题目,子查询的时候有太多重复的cno,导致语句没有反应——根据我之前自制语言的经验,我估计,子查询获得的集合中的数据必须都是独一无二的,不然抛出异常,导致外面的语句失效!!!

    --删除没有人选的课程的记录。
    DELETE FROM course WHERE cno not in(SELECT cno FROM sc)   --incorrect
    DELETE FROM course WHERE cno not in(SELECT DISTINCT cno FROM sc)  --correct
    

    3.当没有用 EXISTS 引入子查询时,在选择列表中只能指定一个表达式。。。

    子查询中的选择项只能是一个!!!

    --显示VB课程的第2名到第4名的学生的学号、姓名、成绩。
    SELECT top 3
    		sc.sno,sname,grade FROM student 
    		JOIN sc on student.sno = sc.sno
    		JOIN course on course.cno = sc.cno
    		WHERE cname = 'VB基础' and grade not in (
    			
    			SELECT top 1 
    				sc.sno,sname,grade FROM student   --incorrect
    				grade FROM student    				--correct
    				JOIN sc on student.sno = sc.sno
    				JOIN course on course.cno = sc.cno
    				WHERE cname = 'VB基础'
    				ORDER BY grade DESC
    		
    		) 
    		ORDER BY grade DESC
    

    4.列名无效

    这往往是写错了单词,,,,

    5.Where中不能使用聚合函数时!

    学会使用\rightarrowHAVING
    当不能用Where实现约束条件时,先用GROUP BY进行分组,然后用HAVING子句!

    比如AVG这样的函数不能在WHERE中使用,但是可以在HAVING中使用!!!

    6.删除不了的问题

    选中某行但是删除不了,说找不到之类的!

    比如这样一个题目:建立一个触发器,当删除student中某个学生记录时,同时删除sc中该学生的记录!

    --1、建立一个触发器T_delsc,当删除STUDENT表中的某条记录时,
    --也删除SC表中与其相关联的记录。
    
    
    ----删除已有的触发器
    IF EXISTS( SELECT name FROM SYSOBJECTS WHERE name='T_delsc')
    	DROP TRIGGER T_delsc
    GO
    
    --创建新的触发器
    CREATE TRIGGER T_delsc
    	ON student
    	FOR DELETE
    	AS
    	BEGIN
    		DECLARE @NO char(8)						--定义中间变量
    		SELECT @NO=sno FROM DELETED				--在DELETED中查询要删除的学号
    		DELETE sc WHERE sno = @NO				--删除该学号的所有记录
    	END
    GO
    ----直接在student删除一条记录时,因为会删除sc中的多条记录,这多条记录的学号一样,SQL Server不知道要删除哪条,所以删除操作被SQL Server阻止!!!
    ----解决方式是设置sno为student的主键!!!
    
    

    执行完是成功的,但是手动去删除student中一条记录时就删不了——原因就是student表中的sno没有设置成主键!

    展开全文
  • 使用FIREBIRD数据库注意事项

    千次阅读 2018-08-25 12:54:04
    区分大小写,建议数据库表和语句都是大写 本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: **日期类型和映射得整型要注意 代码块高亮 图片链接和图片上传 LaTex数学公式 UML序列图和...
  • ORACLE数据库: 1,在数据库可视化工具中可以加 ;结束,但在java代码中不可以有 ;否者报错 ORA-00911 2,在对数据库操作完成后需要调用prepareStatement的方法(execute()或executeQuery()或executeUpdate()) 3,...
  • 数据库注意事项 命名规范,编码 线上环境、开发环境、测试环境数据库内网域名遵循命名规范 业务名称:xxx 线上环境:jsyf.×xx.db 预发布环境:jsyf.×xx.pdb 测试环境:jsyf.×xx.tdb 开发环境: jsyf.×xx.ddb 从库...
  • 后来在无意中看见一篇文章,说“使用CRecordset类简单是简单,但是有一个缺陷,就是不能对数据库里面的数据进行添加、删除、插入、修改的操作。不信你可以试试rs.AddNew(),系统一定会提示你错误的”。解决实例如下...
  • 数据库设计注意事项

    千次阅读 2019-03-30 12:17:40
    DBMS数据库管理系统 数据库设计 1、有效存储 2、高效访问 目的: 1、减少数据冗余 2、避免数据维护异常 3、节约存储空间 4、高效的访问 数据库设计过程: 1、需求分析: 分析需要存储的数据是哪些,这些数据有哪些...
  • 第一篇:Qt访问多线程需要注意的问题整体性描述 彻底抛弃MFC, 全面应用Qt 已经不少时间了。除了自己看书按步就班做了十几个验证性的应用,还正式做了3个比较大的行业应用,总体感觉很好。Native C++ 下, Qt 基本是...
  • 卸载文件最开始最好使用自带的卸载(开始菜单中),不行的话提示使用deinstall脚本,此工具也存在很多bug,如果删除一半就不可继续。此时,最直接的方法就是将安装目录app文件夹的相关用户权限给到,然后删除
  • 优化数据库注意事项 优化数据库注意事项:  1、关键字段建立索引。  2、使用存储过程,它使SQL变得更加灵活和高效。  3、备份数据库和清除垃圾数据。  4、SQL语句语法的优化。...
  • 数据库操作-注意事项

    2019-08-29 10:48:36
    注意属性约束这些,即使改了名字,不要忘了属性约束也要根据实际需要修改,比如用postgresql的pgAdmin进行修改字段名,字段类型变成新的字段,但是别忘了原来的属性约束也附着在新的字段上,如果不要这些属性约束...
  • 1、在对数据库表进行操作时,一定要注意当前操作的是哪一个数据库,否则很容易引起不必要的错误。对于master数据库中的数据文件,尽量不要去对其操作。 2、可通过图形方式对数据库进行备份操作,可通过数据库附加和...
  • oracle数据库开发注意事项

    千次阅读 2017-06-10 09:50:37
    作为java程序员对数据库有或多或少的了解,基本使用大家都会,一些关键性的细节可能在平时的开发过程中没有注意到,导致写出来的SQL查不出数据,或查询速度特别忙、超时等情况,以下是工作中常用oracle数据库的一些...
  • 数据库移植注意事项

    2004-11-10 13:26:00
    1.1 数据库移植注意事项1.1.1 取前n条记录SQL Server: Select top n * from xtableOracle: Select * from xtable where rownum DB2: Select * from xtable fetch first n rows only1.1.2 取当前日期SQL
  • 数据库建表注意事项

    千次阅读 2012-02-14 21:57:04
    为了以后维护,扩展方便,一般来说建立数据表的时候有几个字段都是需要的。...注意:数据字段最好使用单词加下划线的格式,免得以后数据迁移与其它数据库中的自定义关键词冲突引起不必要的麻烦。
  • 1、oracle修改数据库后需要提交,使用commit;指令。否则数据库修改不成功,web页面无法获取到数据。2、mapper.xml中的sql语句中字段没有取别名的,在页面中输出该字段需要使用大写; 若使用as “xxx”取别名后,在...
  • 1.删除无任何数据对象的表空间:首先使用PL/SQL界面化工具,或者使用oracle自带的SQL PLUS工具,连接需要删除的表空间的oracle数据局库。确认当前用户是否有删除表空间的权限,如果没有 drop tablespace,请先用更...
  • 2、对数据库有增删改的表,我们一般加上 删除标记符(对数据逻辑删除的时候做记录)、创建人、创建时间、更新人、更新时间、备注说明字段; 表字段的注释务必都写上; 多个单词用下划线分开;注册时间:...
  • SQLite轻量级数据库注意事项 因为博主在不断完善自己的APP的过程中,需要在原来已经创建好的SQLite数据库中的表格进行列的添加,这个时候我尝试在下面的这行代码中进行直接添加,但是结果是不成功的。(博主举的...
  • 数据库维护注意事项

    千次阅读 2004-12-17 18:06:00
    --压缩日志及数据库文件大小/*--特别注意 请按步骤进行,未进行前面的步骤,请不要做后面的步骤 否则可能损坏你的数据库. 一般不建议做第4,6两步 第4步不安全,有可能损坏数据库或丢失数据 第6步如果日志达到上限,...
  • image.png 记得这里不能搞数据迁移 迁移过去就本地混乱了
  • 注意:调用系统数据库master是为了方便我们之后删除数据库,解决无法删除数据库的问题。 2、判断所要创建的数据库当前是否已经存在,并删除该库,然后创建重新该数据库 if exists(select * from sys.databases ...
  • 2020.3.12#千锋逆战班,云计算201# 在千锋“逆战”学习第32天, 我在千锋逆战班学习“软件管理” 知道了在Linux系统中如何有修改数据库...DML语句 数据库操纵语言: 插入数据INSERT、删除数据DELETE、更新数据UPDATE...
  • Android Sqlite数据库升级时注意事项

    千次阅读 2018-08-30 11:23:38
    在app版本升级时,同时升级了...这里记录一下在onUpgrade处理升级的时候的一些注意事项。 先看下常用的SQLiteOpenHelper的方法: public class DatabaseHelper extends SQLiteOpenHelper { public DatabaseHe...
  • MySQL数据库的安装 ...在window系统中,安装了MySQL数据库以后,数据库的数据文件默认是存储在系统盘:C:/ProgramData/MySQL文件夹下的,需要删除该文件夹以彻底清理安装和卸载MySQ数据库时留下的数据,MySQ...
  • 数据库操作的注意事项

    千次阅读 2017-09-27 17:39:52
    1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2.应尽量避免在 where 子句中对字段进行 ...最好不要给数据库留NULL,尽可能的使用 NOT NULL填充数据库. 备注、

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 69,158
精华内容 27,663
关键字:

删除数据库注意事项