数据库基础DDL

一、字段属性

合适的字段类型对于高性能来说非常重要,基本原则如下:简单的类型占用资源更少;在可以正确存储数据的情况下,选最小的数据类型。

1、数据类型选择

  • 整数类型

TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT,根据数据类型范围合理选择即可。

  • 实数类型

FLOAT、DOUBLE、DECIMAL,建议资金货币相关类型使用高精度DECIMAL存储,或者把数据成倍扩大为整数,采用BIGINT存储,不过处理相对麻烦。

  • 字符类型

CHAR、VARCHAR,长度不确定建议采用VARCHAR存储,不过VARCHAR类型需要额外开销记录字符串长度。CHAR适合存储短字符,或者定长字符串,例如MD5的加密结构。

  • 时间类型

DATETIME、TIMESTAMP,DATETIME保存大范围的值,精度秒。TIMESTAMP以时间戳的格式,范围相对较小,效率也相对较高,所以通常情况建议使用。

MySQL的字段类型有很多种,可以根据数据特性选择合适的,这里只描述常见的几种类型。

2、基础用法操作

  • 数据类型

2.1 修改字段名称:

sqlserver:

alter table T_TEST_ANALYTE rename column NOREP to REPEATNO;alter table T_TEST_RESULT rename column NOREP to REPEATNO;

oracle:

alter table T_TEST_ANALYTE rename column NOREP to REPEATNO;alter table T_TEST_RESULT rename column NOREP to REPEATNO;

mysql:

ALTER TABLE T_TEST_ANALYTE CHANGE NOREP REPEATNO VARCHAR(36) DEFAULT NULL COMMENT '重复样';ALTER TABLE T_TEST_RESULT CHANGE NOREP REPEATNO VARCHAR(36) DEFAULT NULL COMMENT '重复样';


 

2.2 修改字段类型:

sqlserver:

ALTER TABLE T_TEST_RUN ALTER COLUMN FULLNAME varchar(120);ALTER TABLE T_TEST_RUN ALTER COLUMN CHECKFULLNAME varchar(120);

mysql:  

alter table T_TEST_RUN modify column FULLNAME varchar(120) DEFAULT NULL COMMENT '检验人';      alter table T_TEST_RUN modify column CHECKFULLNAME varchar(120) DEFAULT NULL COMMENT '复核人';

Oracle:

alter table T_TEST_RUN modify (FULLNAME varchar2(120));alter table T_TEST_RUN modify (CHECKFULLNAME varchar2(120));    

2.3 新增字段:

sqlserver:

alter table T_TEST_RESULT add slope VARCHAR(36) NULL;EXEC sys.sp_addextendedproperty @name=N'MS_Description',@value=N'斜率' ,@level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'T_TEST_RESULT',@level2type=N'COLUMN',@level2name=N'slope';

mysql:

ALTER TABLE t_lims_run_preprocessinfo ADD COLUMN `TESTID` bigint(20) 
DEFAULT NULL COMMENT '测试' AFTER `ORDTASKID`;ALTER TABLE T_LIMS_CULTUREMEDIUM_INVENTORY ADD COLUMN `invoiceNo` VARCHAR(66) 
DEFAULT NULL COMMENT '库存编号' AFTER `parentId`;

oracle:


alter table t_lims_run_preprocessinfo add (METHODRELATEDID NUMBER NULL);COMMENT ON COLUMN t_lims_run_preprocessinfo.METHODRELATEDID IS '检验项目关联方法ID';alter table T_LIMS_CULTUREMEDIUM_INVENTORY add (invoiceNo VARCHAR2(66) NULL);COMMENT ON COLUMN T_LIMS_CULTUREMEDIUM_INVENTORY.invoiceNo IS '库存编号';

2.4 索引:

      索引类型:主键索引,普通索引,唯一索引,组合索引,全文索引。这里演示普通索引的操作。MySQL的核心模块,后续详说。

添加索引

ALTER TABLE ms_user_wallet ADD INDEX user_id_index(user_id) ;
CREATE INDEX state_index ON ms_user_wallet(state) ;

查看索引

SHOW INDEX FROM ms_user_wallet;

删除索引

DROP INDEX state_index ON ms_user_wallet ;

修改索引

不具有真正意义上的修改,可以把原有的索引删除之后,再次添加索引。

  • 外键关联

用处:外键关联的作用保证多个数据表的数据一致性和完整性,建表时先有主表,后有从表;删除数据表,需要先删从表,再删主表。复杂场景不建议使用,实际开发中用的也不多。

添加外键

ALTER TABLE ms_user_wallet 
ADD CONSTRAINT user_id_out_key FOREIGN KEY(user_id) REFERENCES ms_user_center(id) ;

删除外键

ALTER TABLE ms_user_wallet DROP FOREIGN KEY user_id_out_key ;

2.5:  表结构管理

1、查看结构

DESC ms_user_status ;
SHOW CREATE TABLE ms_user_status ;

2、字段结构

  • 添加字段

ALTER TABLE ms_user_status 
ADD `delete_time` datetime DEFAULT NULL COMMENT '删除时间' ;
  • 删除字段

ALTER TABLE ms_user_status DROP COLUMN delete_time ;

3、修改表名

ALTER TABLE ms_user_center RENAME ms_user_info ;

4、存储引擎

  • 存储引擎

SELECT VERSION() ; SHOW ENGINES ;

MySQL 5.6 支持的存储引擎有InnoDB、MyISAM、Memory、Archive、CSV、BLACKHOLE等。一般默认使用InnoDB,支持事务管理。

  • 修改引擎

数据量大的场景下,存储引擎修改是一个难度极大的操作,容易会导致表的特性变动,引起各种后续反应。

ALTER TABLE ms_user_sso ENGINE = MyISAM ;

5、修改编码

表字符集默认使用utf8,通用,无乱码风险,汉字3字节,英文1字节,utf8mb4是utf8的超集,有存储4字节例如表情符号时使用。

  • 查看编码

SHOW VARIABLES LIKE 'character%';
  • 修改编码

ALTER TABLE ms_user_sso DEFAULT CHARACTER SET utf8mb4;

2.6: 数据管理

2.6.1:增删改查

添加数据

INSERT INTO ms_user_sso (user_id,sso_id,sso_code,create_time,update_time,login_ip,state
)
VALUES('1','SSO7637267','SSO78631273612','2019-12-24 11:56:57','2019-12-24 11:57:01','127.0.0.1','1');

更新数据

UPDATE ms_user_sso SET user_id = '1',sso_id = 'SSO20191224',sso_code = 'SSO20191224',create_time = '2019-11-24 11:56:57',update_time = '2019-11-24 11:57:01',login_ip = '127.0.0.1',state = '1'
WHERE user_id = '1';

查询数据

一般情况下都是禁止使用 select* 操作。

SELECT user_id,sso_id,sso_code,create_time,update_time,login_ip,state 
FROM ms_user_sso WHERE user_id = '1';

删除数据

DELETE FROM ms_user_sso WHERE user_id = '2' ;

不带where条件,就是删除全部数据。原则上不允许该操作,优化篇会详解。TRUNCATE TABLE也是清空表数据,但是占用的资源相对较少。

2.6.2:数据安全
  • 不可逆加密

这类加密算法,多用来做数据验证操作,比如常见的密码验证。

SELECT MD5('cicada')='94454b1241ad2cfbd0c44efda1b6b6ba' ;
SELECT SHA('cicada')='0501746a2e4fd34e1d14015fc4d58309585edc7d';
SELECT PASSWORD('smile')='*B4FB95D86DCFC3F33A3852714DC742C77504479D' ;
  • 可逆加密

安全性要求高的系统,需要做三级等保,对数据的安全性极高,数据在存储时必须加密入库,取出时候需要解密,这些就需要可逆加密。

SELECT DECODE(ENCODE('123456','key_salt'),'key_salt') ;
SELECT AES_DECRYPT(AES_ENCRYPT('cicada','salt123'),'salt123');

上述数据安全的管理,也可以基于应用系统的服务(代码)层进行处理,相对专业的流程是从数据生成源头处理,规避数据传递过程泄露,造成不必要的风险。

3、设计范式

3.1:三范式

  • 基础概念

一范式

表的列的具有原子性,不可再分解,即列的信息,不能分解,关系型数据库MySQL、Oracle等自动的满足。

二范式

每个事实的数据记录只会出现一次, 不会冗余, 通常设计一个主键来实现。

三范式

要求一个表中不包含已经存在于其它表的非主键信息,例如部门和员工的信息,员工表包含部门表的主键ID,则可以关联获取相关信息,没必要在员工表保存相关信息。

  • 优缺点对比

范式化设计

范式化结构设计通常更新快,因为冗余数据较少,表结构轻巧,也更好的写入内存中。但是查询起来涉及到关联,代价非常高,非常损耗查询性能。

反范式化设计

所有的数据都在一张表中,避免关联查询,索引的有效性更高,但是数据的冗余性极高。

  • 建议结论

上述的两种设计方式在实际开发中都是不存在的,在实际开发中都是混合使用。比如汇总统计,缓存数据,都会基于反范式化的设计。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/205565.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

改进的联邦加权平均算法

目录 1 改进的联邦加权平均算法 1.1 联邦学习 1.2 改进的联邦加权平均算法 1.3 算法的流程

vue watch

vue 使用watch监听props的一些小建议 当在watch里面给data赋值&#xff0c;请使用深拷贝。 <template><div class"container"><div class"left"><div class"button_group"><!-- <button click"rand…

【面试常考150题】1、88合并两个有序数组

合并两个有序数组 题目解法一思路code 解法二思路code 题目 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中&#xff0c;使合并后的数组同样按 非递…

力扣78. 子集(java 回溯解法)

Problem: 78. 子集 文章目录 题目描述思路解题方法复杂度Code 题目描述 思路 我们易知&#xff0c;本题目涉及到对元素的穷举&#xff0c;即我们可以使用回溯来实现。对于本题目我们应该较为注重回溯中的决策阶段&#xff1a; 由于涉及到对数组中元素的穷举&#xff0c;即在每…

Leetcode刷题笔记题解(C++):165. 比较版本号

思路&#xff1a;利用小数点来分开求和&#xff0c;判断和是否相等来推断两个版本号是否一致 class Solution { public:int compareVersion(string version1, string version2) {int i0;//记录version1的字符下标int j0;//记录version2的字符下标int num10;//保存version1的和…

对于并发修改同一条数据的处理方案

业务场景&#xff1a; 批量消费Kafka数据&#xff0c;一个批次针对同一条数据做新增和修改操作&#xff0c;当前一条数据还未更新完成&#xff0c;后一条数据也同步修改&#xff0c;数据就存在异常&#xff1b; 单机模式&#xff1a; &#xff08;一&#xff09…

Unity传送门特效: The Beautiful Portal/Level up/Teleport/Warp VFX

7种不同风格的传送门特效! 每个传送门都有一个轻型和重型版本。 每个版本都有一个"无循环”和一个"无限”预制件:D 总共有28个预制件 -VFX完全使用Unity的粒子系统和基本的Unity着色器。 使用标准渲染管道中制作了这个资产。所以VFX的功能就像视频宣传片一样。 同时,…

怎样用Ajax提交from表单并接收其中的json数据

怎样用Ajax提交表单并接收其中的json数据 需求&#xff1a;实现点击按钮后&#xff0c;数据以表单形式提交至服务器&#xff0c;并接收来自服务器的返回数据。过程中页面不刷新。 AJAX 不是新的编程语言&#xff0c;而是一种使用现有标准的新方法。AJAX 是与服务器交换数据并…

解析5种常用的Python设计模式

大家好&#xff0c;Python是一种非常流行的编程语言&#xff0c;它易于学习、灵活且功能强大&#xff0c;在各个领域广泛应用。很多人误认为Python是一种面向过程的语言&#xff0c;无法很好地支持面向对象的编程风格。这种观念是错误的&#xff0c;Python不仅支持面向对象编程…

Spring AOP从入门到精通

目录 1. AOP的演化过程 1. 代理模式 2. 动态代理 2.1 JDK动态代理 2.2 Cglib动态代理 3. Spring模式 3.1 ProxyFactory 3.2 ProxyFactoryBean 3.3 AbstractAutoProxyCreator 2. Spring AOP抽象 1. 核心术语 1.1 连接点(JoinPoint) 1.2 切点(Pointcut) 1.3 增强(Ad…

C# Solidworks二次开发:三种获取SW设计结构树的方法-第二讲

今天这篇文章是接上一篇文章的&#xff0c;主要讲述的是获取SW设计结构树节点的第二种方法。 这个方法获取节点的逻辑是先获取最顶层节点&#xff0c;然后再通过获取顶层节点的子节点一层一层的把所有节点都找出来&#xff0c;也就是需要递归。想要用这个方法就要了解下面几个…

tomcat环境搭建

镜像下载地址&#xff1a;https://mirror.tuna.tsinghua.edu.cn/apache/tomcat/ 配置环境变量 添加系统变量 编辑Path 测试 dos窗口运行startup启动tomcat 访问http://localhost:8080/

【LeeCode】454. 四数相加 II

给你四个整数数组 nums1、nums2、nums3 和 nums4 &#xff0c;数组长度都是 n &#xff0c;请你计算有多少个元组 (i, j, k, l) 能满足&#xff1a; 0 < i, j, k, l < n nums1[i] nums2[j] nums3[k] nums4[l] 0 示例 1&#xff1a; 输入&#xff1a;nums1 [1,2],…

【每日一题】—— D. Divide and Equalize(Codeforces Round 903 (Div. 3))(数学、数论)

&#x1f30f;博客主页&#xff1a;PH_modest的博客主页 &#x1f6a9;当前专栏&#xff1a;每日一题 &#x1f48c;其他专栏&#xff1a; &#x1f534; 每日反刍 &#x1f7e1; C跬步积累 &#x1f7e2; C语言跬步积累 &#x1f308;座右铭&#xff1a;广积粮&#xff0c;缓称…

Linux操作系统 中的用户管理,也就是关于用户的相关的操作与理解

目录 1 概念2 用户管理的类型3、模板目录4 查看历史命令5 相关文件6 创建用户useradd7 命令passwd 存储及shadow命令下的用户密码8 usermod命令&#xff08;修改属性&#xff09;9 密码设置10 删除命令userdel11 用户组的操作12 用户权限13 创建一个用户组&#xff0c;并且将这…

ORA-600 kcbzib_kcrsds_1一键恢复

一个19c库由于某种原因redo损坏强制打开库报ORA-600 kcbzib_kcrsds_1错误 SQL> startup mount pfile?/database/pfile.txt; ORACLE instance started. Total System Global Area 859830696 bytes Fixed Size 9034152 bytes Variable Size 5…

我们一起聊一聊JWT的那些事

我们一起聊一聊JWT的那些事 一切美好&#xff0c;如期而至… 什么是JWT JWT&#xff0c;全称为 JSON Web Token&#xff0c;是一种用于在网络上安全地传递信息的开放标准&#xff08;RFC 7519&#xff09;。JWT 是一种紧凑且独立的方式&#xff0c;用于在各方之间以 JSON 对象…

为了逃离数学,阴差阳错与数学绑定了

还记得当初自己为什么选择计算机&#xff1f; 当初你问我为什么选择计算机&#xff0c;我笑着回答&#xff1a;“因为我梦想成为神奇的码农&#xff01;我想像编织魔法一样编写程序&#xff0c;创造出炫酷的虚拟世界&#xff01;”谁知道&#xff0c;我刚入门的那天&#xff0…

javaTCP协议实现一对一聊天

我们首先要完成服务端&#xff0c;不然出错&#xff0c;运行也要先运行服务端&#xff0c;如果不先连接服务端&#xff0c;就不监听&#xff0c;那客户端不知道连接谁 服务端 import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.Actio…

AtCoder Beginner Contest 330

A - Counting Passes (atcoder.jp) AC代码: #include<bits/stdc.h> #define endl \n //#define int long long using namespace std; const int N110; int a[N]; int n,l; void solve() {cin>>n>>l;for(int i1;i<n;i) cin>>a[i];int ans0;for(int…