sql增加字段

数据库----主键设计思考

烂漫一生 提交于 2019-12-24 05:46:50
在我们的数据库设计中,不可逃避的就是数据库表的主键,可能有很多朋友没有深入思考过,主键的设计对整个数据库的设计影响很大,因此我们不得不要重视起来。 主键的必要性 : 有些朋友可能不提倡数据库表必须要主键,但在我的思考中,觉得每个表都应该具有主键,不管是单主键还是双主键,主键的存在就代表着表结构的完整性,表的记录必须得有唯一区分的字段,主键主要是用于其他表的外键关联,本记录的修改与删除,当我们没有主键时,这些操作会变的非常麻烦。 主键的无意义性 : 我强调主键不应该具有实际的意义,这可能对于一些朋友来说不太认同,比如订单表吧,会有“订单编号”字段,而这个字段呢在业务实际中本身就是应该具有唯一性,具有唯一标识记录的功能,但我是不推荐采用订单编号字段作为主键的,因为具有实际意义的字段,具有“意义更改”的可能性,比如订单编号在刚开始的时候我们一切顺利,后来客户说“订单可以作废,并重新生成订单,而且订单号要保持原订单号一致”,这样原来的主键就面临危险了。因此,具有唯一性的实际字段也代表可以作为主键。因此,我推荐是新设一个字段专门用为主键,此主键本身在业务逻辑上不体现,不具有实际意义。而这种主键在一定程序增加了复杂度,所以要视实际系统的规模大小而定,对于小项目,以后扩展不会很大的话,也查允许用实际唯一的字段作主键的。 主键的选择 我们现在在思考一下,应该采用什么来作表的主键比较合理,申明一下

数据库主键设计

…衆ロ難τιáo~ 提交于 2019-12-24 05:44:06
数据库中的主键 我一般采用 GUID,也就是下文中的第5种方式。 这篇文章总结得很全面,我是在CSDN上看到的,现在修改成最初出现的版本了 :) 原文在: http://tintown.cnblogs.com/archive/2005/03/02/111459.html 数据库主键设计之思考 在我们的数据库设计中,不可逃避的就是数据库表的主键,可能有很多朋友没有深入思考过,主键的设计对整个数据库的设计影响很大,因此我们不得不要重视起来。 主键的必要性 : 有些朋友可能不提倡数据库表必须要主键,但在我的思考中,觉得每个表都应该具有主键,不管是单主键还是双主键,主键的存在就代表着表结构的完整性,表的记录必须得有唯一区分的字段,主键主要是用于其他表的外键关联,本记录的修改与删除,当我们没有主键时,这些操作会变的非常麻烦。 主键的无意义性 : 我强调主键不应该具有实际的意义,这可能对于一些朋友来说不太认同,比如订单表吧,会有“订单编号”字段,而这个字段呢在业务实际中本身就是应该具有唯一性,具有唯一标识记录的功能,但我是不推荐采用订单编号字段作为主键的,因为具有实际意义的字段,具有“意义更改”的可能性,比如订单编号在刚开始的时候我们一切顺利,后来客户说“订单可以作废,并重新生成订单,而且订单号要保持原订单号一致”,这样原来的主键就面临危险了。因此,具有唯一性的实际字段也代表可以作为主键。因此

MySQL优化之推荐使用规范

半世苍凉 提交于 2019-12-23 16:11:32
一、基础规范 使用InnoDB存储引擎 支持事务、行级锁、并发性能更好、CPU及内存缓存页优化使得资源利用率更高 推荐使用utf8mb4字符集 无需转码,无乱码风险, 支持emoji表情以及部分不常见汉字 表、字段必须加注释 方便他人理解字段意思,在后期维护中非常非常有用,不用去瞎猜这个字段是干嘛的。 不在数据库做计算 禁止使用存储过程、视图、触发器、Event。 在并发量大的情况下,这些功能很可能将数据库拖跨,业务逻辑放到服务层具备更好的扩展性,能够轻易实现“增机器就加性能” 禁止存储文件 文件存储在文件系统,数据库里存URI 控制单表数据量 单表记录控制在千万级 二、命名规范 库名、表名、字段名:小写,下划线风格 非唯一索引名idxxxx,唯一索引名uniqxxx 表必须有主键,例如自增主键 a)主键递增,数据行写入可以提高插入性能 b)主键要选择较短的数据类型,Innodb引擎普通索引都会保存主键的值,较短的数据类型可以有效的减少索引的磁盘空间,提高索引的缓存效率 c)保证实体的完整性,唯一性 不要使用外键,如果有外键约束,用应用程序控制 外键会导致表与表之间耦合,update与delete操作都会涉及相关联的表,十分影响sql 的性能,甚至会造成死锁。高并发情况下容易造成数据库性能下降,大数据高并发业务场景数据库使用以性能优先 三、字段设计规范 把字段定义为NOT

SQL介绍、语句之增删改查大全

余生长醉 提交于 2019-12-23 16:00:58
数据库概念 文件作为数据库,数据格式千差万别 将保存数据的地方统一起来 MySQL一款应用软件 用来帮你操作文件的 只要是基于网络通信,底层都是socket!!! 服务端 -socket通信 -收发消息 -解析命令(sql语句) 客户端 -socket通信 -收发消息 -解析命令(sql语句) DBA: sql语句优化 RDBMS:数据库管理系统 关系型数据库 存储数据的时候,对于数据有条件限制 数据与数据之间有关联 通常都是以表格的方式存储 第一步需要创建表结构! 关系型数据库: oracle, sqlite, db2, sql server,MySQL,access 非关系型数据库 数据存储方式 k,v键值对的形式 redis,mongodb,memcache 关系型数据库和非关系型数据库的区别 非关系型数据库的优势: 1、性能 NOSQL是基于键值对的,可以想象成表中的主键和值的对应关系,而且不需要经过SQL层的解析,所以性能非常高 2、可扩展性 同样也是因为基于键值对,数据之间没有耦合性,所以非常容易水平扩展。 3、使用场景:日志、埋点、论坛、博客等 关系型数据库的优势: 1、 复杂查询 可以用SQL语句方便的在一个表以及多个表之间做非常复杂的数据查询 2、事务支持 使得对于安全性能很高的数据访问要求得以实现。 3、使用场景:所有有逻辑关系的数据存储 库文件夹操作 增

开发中用到的一个快速排序法

北慕城南 提交于 2019-12-23 10:15:36
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 实际上在,做web开发,比较少遇到使用一些算法之类的,毕竟不是做搜索引擎,也不是写底层(比如写个类似于mysql这样的数据库,里面需要自己实现排序算法),另外,每种语言,比如java,php都或多或少已经封装好排序函数给程序员使用。比如有个共识, 大家做web开发的基本都明白,业务逻辑多比较简单,不是很复杂的业务逻辑。 我们作为web开发的程序员,基本是是web架构,对数据库增删查改数据,然后把数据展示在页面中,大多就是涉及性能优化,缓存等等。 学学一些常见的算法,对于实现特殊的应用还是有帮助的。比如有些时候我们依赖于数据库中order by来实现排序了,所以非常习惯直接接下交给数据库实现排序了。 接下来,我就遇到需要自己实现排序了。 因为我们在实际开发中,遇到一个问题,完全需要我自己实现排序。需求如下: 在商品表里面,有一个字段是goods_price(商品价格),现在要开发一个促销价功能。促销价有个时间范围设置。在前台页面中,展示商品的时候。如果当前时间符合促销时间。就要按照促销价格执行。于是促销价就单独增加了一个字段来保存,叫做promote_price,促销时间配置信息比如什么时间,每天几点到几点之类的时间设置信息暂时不管,存储在其他字段中的,展示的时候,要用当前时间跟配置的时间进行比较。

数据库

五迷三道 提交于 2019-12-23 05:51:27
MySQL 在使用数据库之前,先要知道有哪些SQL语句 SQL:结构化查询语言,是一种规范,所有关系型数据库都遵循这个规范,但各家数据库允许存在差异,这种差异叫做方言 SQL语句具体分为四部分: (1)DDL(Data Definition Language):数据定义语言,主要操作对象是库,表,如建库,删库等 (2)DML(Data Manipulation Language):数据操作语言,主要对表中数据进行增删改操作 (3)DCL(Data Control Language):数据控制语言,主要对数据库的一些权限的设置 (4)DQL(Data Query Language):数据查询语言,主要对表中的数据进行查询(重点) DDL语句 查询所有数据库:show databases; 建库:create database 库名; 删库:drop database 库名; 在对表操作之前,要先进入一个库:use 库名; 查询一个库中的所有表:show tables; 建表:create table 表名(表头字段属性,…); 查询表结构:desc 表名; 删表:drop table 表名; 清空表:truncate 表名;干掉表,重新创建一张新表 具体操作: 首先,你需要安装mysql环境,本文没有演示如何安装,可上网查阅安装过程和配置过程,没有环境,是操作不了数据库的

数据库常用增删改查记录等语句

让人想犯罪 __ 提交于 2019-12-22 00:42:37
1增 1.1【插入单行】 insert [into] <表名> (列名) values (列值) 例:insert into Strdents (姓名,性别,出生日期) values ('开心朋朋','男','1980/6/15') 1.2【将现有表数据添加到一个已有表】 insert into <已有的新表> (列名) select <原表列名> from <原表名> 例:insert into tongxunlu ('姓名','地址','电子邮件') select name,address,email from Strdents 1.3【直接拿现有表数据创建一个新表并填充】 select <新建表列名> into <新建表名> from <源表名> 例:select name,address,email into tongxunlu from strdents 1.4【使用union关键字合并数据进行插入多行】 insert <表名> <列名> select <列值> tnion select <列值> 例:insert Students (姓名,性别,出生日期) select '开心朋朋','男','1980/6/15' union(union表示下一行) select '蓝色小明','男','19**/**/**' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Mysql常用命令大全 sql

社会主义新天地 提交于 2019-12-21 02:43:15
1、连接Mysql 格式: mysql -h主机地址 -u用户名 -p用户密码 1、连接到本机上的MYSQL。 首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root -p,回车后提示你输密码.注意用户名前可以有空格也可以没有空格,但是密码前必须没有空格,否则让你重新输入密码。 如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是: mysql> 2、连接到远程主机上的MYSQL。 假设远程主机的IP为:110.110.110.110,用户名为root,密码为abcd123。则键入以下命令: mysql -h110.110.110.110 -u root -p 123;(注:u与root之间可以不用加空格,其它也一样) 3、退出MYSQL命令 : exit (回车) 2、修改密码 格式:mysqladmin -u用户名 -p旧密码 password 新密码 1、给root加个密码ab12。 首先在DOS下进入目录mysql\bin,然后键入以下命令 mysqladmin -u root -password ab12 注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。 2、再将root的密码改为djg345。 mysqladmin -u root -p ab12 password

SQL Server 数据变更时间戳(timestamp)在复制中的运用

一个人想着一个人 提交于 2019-12-20 17:27:29
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 方案(Solution) 方案一(Solution One) 方案二(Solution Two) 方案三(Solution Three) 实现过程(Process) 注意事项(Attention) 参考文献(References) 二.背景(Contexts)   SQL Server数据库中Basic与Group两个表需要提供部分字段给其它程序读取,程序把这两个表的数据缓存到内存中,但是程序想知道这两个表数据的变更信息,包括:Insert/Update/Delete,有什么方式可以实现呢? 三.方案(Solution)   上面的场景,使用SQL Server复制(Replication)是无可厚非的,但是如何及时获取变更信息呢? 方案一:   使用变更数据捕获CDC这个功能,在数据库订阅库使用CDC,再创建一个存储过程;通过向存储过程传入最后一次记录(程序自己保存)的日志序列号(LSN),返回表变更的数据列表,程序先从内存中删掉这些ID值,再把变更数据插回内存,这个逻辑可以简化对Insert/Update/Delete的所有处理; (Figure1:变更数据捕获) 方案二:   使用更改跟踪(Chang Tracking)这个功能,更改跟踪会包括跟踪表的唯一值

MySQL 优化技巧

柔情痞子 提交于 2019-12-20 08:48:12
MySQL优化三大方向: 1 优化MySQL所在服务器内核(此优化一般由运维人员完成)。 2 对MySQL配置参数进行优化(my.cnf)此优化需要进行压力测试来进行参数调整。 3 对SQL语句以及表优化。 MySQL参数优化: 1 MySQL 默认的最大连接数为 100,可以在 mysql 客户端使用以下命令查看 mysql > show variables like 'max_connections' ; + -- -- -- -- -- -- -- -- - + -- -- -- - + | Variable_name | Value | + -- -- -- -- -- -- -- -- - + -- -- -- - + | max_connections | 500 | + -- -- -- -- -- -- -- -- - + -- -- -- - + 1 row in set ( 0.00 sec ) 2 当前连接的线程的个数 mysql > show status like 'threads_connected' ; + -- -- -- -- -- -- -- -- -- - + -- -- -- - + | Variable_name | Value | + -- -- -- -- -- -- -- -- -- - + -- -- -- - + |