数据库
文章平均质量分 78
数据库相关
jackletter
这个作者很懒,什么都没留下…
展开
-
window安装压缩版postgresql
环境:https://www.postgresql.org/download/windows/链接:https://pan.baidu.com/s/1fmQbgWSzX4hN07Lgdzfz0g?pwd=dzyy提取码:dzyy下载后如下:将压缩包解压并移动到d盘,如下:初始化db:启动服务:启动后可以观察后台进程:链接到db:默认不允许,如下:原创 2023-10-03 13:54:03 · 11581 阅读 · 3 评论 -
mysql5.7索引注意事项
环境:window10Mysql5.7.32-logDBeaver问题:当我们需要给字符串加索引时,我们很自然的使用:create index idx_testindex_name on testindex(name),但是不幸的是它可能会报错:SQL 错误 [1071] [42000]: Specified key was too long; max key length is 767 bytes下面是完整的复现语句:-- 查看当前版本select version() /*ver原创 2022-05-22 10:18:54 · 456 阅读 · 0 评论 -
mysql5.7自增主键的坑
mysql5.7自增主键有坑原创 2022-05-22 09:59:09 · 857 阅读 · 0 评论 -
mysql优化系列:一、准备测试数据
环境:widow 11mysql 8.0.28DBEaver 22.0.3node v16.4.2mockjs: “^1.1.0”要测试mysql的性能,必先准备大量的数据,比如,向表中插入100万条数据。。。为了批量生成这些数据,我再nodejs中使用mockjs每次生成1万条假数据,并写个脚本批量运行100次,mysql中便有了100万条数据。一、使用mockjs造假数据我准备了一张表,如下:create table testdata( id int primary ke原创 2022-04-29 20:39:17 · 1609 阅读 · 0 评论 -
mysql:如何在执行update后返回受影响的数据
环境:window10mysql 8.0.25DBeaver1. 问题在sqlserver中,我们可以通过output关键字返回insert、delete、uptdate影响的行数(参照:《博文:sqlserver:使用output返回插入、删除的记录》),但mysql原生没有提供这种功能。2. 解决办法首先,这是一个受限的解决办法,它要求这个表必须有主键,而且更新的时候不能更新主键!先准备数据:drop table if exists testcreate table test(原创 2022-03-14 19:46:29 · 6839 阅读 · 2 评论 -
sqlserver:使用 SqlBulkCopy 批量插入数据
环境:window 10sqlserver 2014参考:《博文:SqlBulkCopy使用注意事项》1. 问题场景在批量迁移或导入数据时,我们可能会遇到插入大量数据的问题,比如:100万、500万、甚至几千万。这个时候,如果我们再使用普通的insert插入的话就太慢了。在sqlserver中,我们可以使用 SqlBulkCopy 进行大数据量的插入。2. 简单示例先看个示例:var connString = "Data Source=192.168.252.129;Initial原创 2022-03-07 20:02:11 · 3626 阅读 · 4 评论 -
mysql:如何实现插入或更新一条数据(对比 replace into 和 insert on duplicate key update)
环境:window10mysql 8.0.25DBeaver参考:《mysql:13.2.9 REPLACE Statement》《mysql:13.2.6.2 INSERT … ON DUPLICATE KEY UPDATE Statement》《博文:MySQL的INSERT ··· ON DUPLICATE KEY UPDATE使用的几种情况》《博文:MYSQL中replace into的用法》1. 常见问题:如何一条sql语句实现插入或更新?在sqlserver中我们可以原创 2022-03-07 11:00:34 · 7164 阅读 · 0 评论 -
缓存和db数据不一致问题(常被忽略的问题)
环境:window10vs2022.net core 3.1前言:缓存是个好东西,转为解决高并发问题,在性能的这场较量中屡试不爽。但我们使用它的姿势可能并不对,甚至能给自己挖一个大坑。引用:《Redis缓存一致性问题解决方案》1. 问题举例以最常见的redis缓存举例,看下面的伪代码:public class TestClass{ private Redis redis; private DB db; public UserEntity GetUserB原创 2022-03-03 15:42:06 · 708 阅读 · 0 评论 -
sqlserver:聚合函数string_agg
环境:window 10sqlserver 2019参考:《sqlserver:STRING_AGG (Transact-SQL)》这个函数的意义是将多行结果字符串拼接到一行。直接看示例:先准备数据:create table test( id int identity(1,1) primary key, name varchar(50), age int)insert into test values('刘备',40),('关羽',40),('张飞',36),('诸葛亮',32原创 2022-02-26 12:23:08 · 20363 阅读 · 1 评论 -
mysql:列类型之Spatial
环境:window10vs2022.net 6mysql 8.0.25DBeaver参考:《mysql:11.4 Spatial Data Types》1. 认识Spatial Data Types、WKT、WKBogc定义的地理空间数据格式。可以存储经纬度地理坐标、空间点、线、面、体等数据。具体参考:《ogc:OGC Standards》。mysql的实现:简单解释下:Geometry : 所有spatial类的父类(可以定义此类型列,但由于它是noninstantia原创 2022-02-22 20:29:29 · 3138 阅读 · 0 评论 -
mysql:列类型之json
环境:window10vs2022.net 6mysql 8.0.25DBeaver1. 认识json格式json全称是: JavaScript Object Notation。它的格式有以下几点:两个对象类型([] or {});四种标量 (string、number、true/false、null);根节点是对象或者是数组;标量:true/false和null均全为小写形式;标量:string可以有转移字符("、\、/、\b、\f、\n、\r、\t、\u0000);js原创 2022-02-22 12:43:12 · 4372 阅读 · 0 评论 -
mysql:列类型之string
环境:window10vs2022.net 6mysql 8.0.25DBeaver参考:《博文:mysql字符集编码和排序规则》《博文:细说ASCII、GB2312/GBK/GB18030、Unicode、UTF-8/UTF-16/UTF-32编码》《mysql:11.3 String Data Types》在mysql中说string,一般说的是char、varchar、text、binary、varbinary、blob、enum、set类型。而text、blob又要再加上原创 2022-02-18 11:39:26 · 7300 阅读 · 0 评论 -
mysql:列类型之enum、set
环境:window10vs2022.net 6mysql 8.0.25DBeaver参考:《mysql:11.3.5 The ENUM Type》1. enum类型mysql支持枚举类型,即:只能从其中选择一个值插入到数据库。用法如下:create table test( t_enum set('刘备','刘禅','张飞'))insert into test(t_enum) values('刘备')mysql中的enum和c#中的枚举很相似,但它也有自己的特点:m原创 2022-02-18 10:07:49 · 5255 阅读 · 0 评论 -
mysql:详解sql_mode,应该选择怎样的运行模式?
环境:window10vs2022.net 6mysql 8.0.25DBeaver参考:《mysql:5.1.11 Server SQL Modes》关于mysql的sql_mode:mysql为了支持在不同的环境下运行,允许我们给它设置不同的运行模式(sql_mode),当它具有不同的运行模式时,它处理我们的sql语句也不相同(mysql提供了18个运行模式,它们可任意组合使用)。一般,我们在安装mysql时就要确定它的运行模式(sql_mode),不建议在中途更改它的运行模原创 2022-02-16 14:59:50 · 2544 阅读 · 0 评论 -
mysql:列类型之时间日期
环境:window10vs2022.net 6mysql 8.0.25DBeaver参考:《MSDN:浮点数值类型(C# 引用)》《mysql:11.2 Date and Time Data Types》在mysql中表示日期时间的类型有 date、time、year、datetime、timstamp五种,列表如下:五中列类型的一些特点1. datetime和date的取值范围mysql文档中声明了date和datetime的取值范围是 '1000-01-01' to '原创 2022-02-11 21:14:28 · 2112 阅读 · 0 评论 -
mysql:列类型之float、double
环境:window10vs2022.net 6mysql 8.0.25DBeaver参考:《MSDN:浮点数值类型(C# 引用)》《mysql:11.1.4 Floating-Point Types (Approximate Value) - FLOAT, DOUBLE》1. float和double类型在mysql中,float和double都是浮点数类型:float 占4个字节,精度是6位;double 占8个字节,精度是16位;它们的性质和c#中浮点数的性质是一样原创 2022-02-11 16:15:44 · 16689 阅读 · 0 评论 -
mysql:列类型之decimal、numeric
环境:window10vs2022.net core 3.1mysql 8.0.25DBeaver参考: 《mysql:11.1.3 Fixed-Point Types (Exact Value) - DECIMAL, NUMERIC》1. decimal和numeric的定义这两个是同一个意思,使用numeric定义的列会被转换成decimal。使用的语法为:decimal[M[,D]]如: decimal、decimal(5)以及decimal(5,2)都是可以的。上面的原创 2022-02-10 20:59:43 · 8504 阅读 · 0 评论 -
mysql:列类型之整数(tinyint、smallint、mediumint、int、bigint)
环境:window10vs2022.net core 3.1mysql 8.0.25DBeaver参考: 《mysql:11.1.2 Integer Types (Exact Value) - INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT》1. 整数类型mysql支持5中整数类型,它们占用空间及表示范围如下所示:一般我们建表时如下:create table test( t_tinyint tinyint unsigned原创 2022-02-10 17:59:37 · 3695 阅读 · 0 评论 -
mysql:列类型之bit
环境:window 10mysql 8.0.25DBeaver1. bit(M)表示位类型,如: create table test(t_bit bit(16))数据库中存储的是M个bit位,M范围是:[1,64],默认是1。存储时,将原数据的bit位从右截取M个bit位存储到数据库:如果原数据bit位长度小于M,则直接补0;如果大于M,截取M长度后,原数据的左侧还有1,则报异常,否则将截取后的bit位直接存储到数据库;看下面示例:create table test.test(原创 2022-02-10 15:50:34 · 8171 阅读 · 0 评论 -
mysql:事务的影响范围
环境:window 11mysql 8.0.12参考:sqlserver:事务的影响范围问题来源:我们知道关系型数据库具有事务的概念,我们在事务内可以增删改查数据,一旦发现有误,我们可以执行回滚,这样就可以撤销对数据的更改了,那么,除了增删改查数据,其他的如:自增id、表结构、甚至是增删表的操作是否也可以被撤销掉(回滚: rollback)呢?在《sqlserver:事务的影响范围》中实验得出的结论是:sqlserver的事务回滚会将truncate、增删表、增删列、约束增删等操作都撤原创 2022-02-02 21:56:17 · 1109 阅读 · 1 评论 -
sqlserver:事务的影响范围
环境:window11sqlserver2014问题来源:我们知道关系型数据库具有事务的概念,我们在事务内可以增删改查数据,一旦发现有误,我们可以执行回滚,这样就可以撤销对数据的更改了,那么,除了增删改查数据,其他的如:自增id、序列、表接口、甚至是增删表的操作是否也可以被撤销掉(回滚: rollback)呢?下面就开始进行实验:1. 增删改可以被回滚掉这是数据库事务的主要功能。2. 自增id不能被回滚我们在事务内插入新数据(具有自增列),之后尽管我们执行回滚操作,这个自增id值也不会原创 2022-02-01 23:08:16 · 1355 阅读 · 0 评论 -
sqlserver:关于uniqueidentifier类型
环境:window10sqlserver2014vs2022.net core 3.1参考:微软文档:niqueidentifier (Transact-SQL)根据微软解释,这是一个16 字节(即:128bit位) 的GUID。所以它本质还是二进制数据,和c#中的guid是一个意思,只不过我们平时以字符串的形式观察它。关于c#中guid和string的转换,参考:《c#:guid和string互转 &guid不区分大小写》在sqlserver中可以通过:NEWID(原创 2022-01-28 12:50:26 · 3468 阅读 · 0 评论 -
sqlserver:关于timestamp时间戳 rowversion
环境:window10sqlserver2014vs2022.net core 3.1参考:微软官方文档:rowversion (Transact-SQL)在sqlsever中 timestamp和rowversion是同义词,它和 ISO 标准中定义的 timestamp 数据类型表现不同。在sqlserver中,timestamp的作用是给每行的数据加上版本标志,但这个标志和时间没有任何关系,可以将它看成是byte[8]数组并且是数据库全局自增的。因为timestamp的取值是原创 2022-01-28 11:39:00 · 4116 阅读 · 0 评论 -
sqlserver & c#:关于CommandType的取值
环境:window10vs2022.net core 6.0sqlserver 20141. 问题来源:在使用SqlCommand执行sql语句时,一直不明白属性CommandType的作用。它取值如下:Text:表明执行的是普通sql语句;StoredProcedure:表明执行的是存储过程;TableDirect:实验时报错,不支持;先说下我的看法,它们两个在功能上没有区别,性能上应该可以忽略,写法上会有不同,但大部分场景可以忽略该属性的取值。为了下面测试,准备新建存储过原创 2022-01-27 11:53:06 · 2183 阅读 · 0 评论 -
数据库:mysql和sqlserver中批量执行sql语句 & go关键字作用
环境:window10sqlserver2008mysql5.7说明:在编写后端应用程序时,为了提高响应性能,我们会将多条sql语句放在一起执行,如下:insert into t_user(id,name) values(1,'小明');insert into t_book(id,name) values(1,'语文');insert into t_user_book(id,userid,bookid) values(1,1,1);但是,我们考虑下,如果上面的sql语句出现错误了怎么原创 2022-01-01 22:59:01 · 2769 阅读 · 1 评论 -
mysql元数据之表名大小写
环境:centos8.1 + mysql 8.0.17window 10 + mysql 5.7.26DBeaver 21.1.2.202107041908一、Mysql的配置项: lower_case_table_names这个配置项决定着你创建的表名存储到Mysql中是都转成小写还是保留原格式,并且还影响sql语句中是否能引用到表,它有三个取值如下(假如你的表定义语句为:create table `T_Person`(Id int,Name varchar(50));):0:你创建的表原创 2021-07-11 22:29:25 · 531 阅读 · 1 评论 -
mysql字符集编码和排序规则
环境:mysql 5.7 26DBeaver 21.1.2.202107041908参考:《MySQL字符集与排序规则总结》一、说说字符集、字符集编码和排序规则字符集:罗列所有图形字符的一张大表。比如:GBK字符集(中国制造): 罗列了所有的中文简体、繁体字的一张大表。Unicode字符集(全世界通用):罗列了世界上所有图形字符的一张大小表。字符集编码:将字符集上罗列的图形字符存储到计算机中的一种编码规则。比如:GBK字符编码(中国制造):GBK本身既是字符集,原创 2021-07-11 15:51:08 · 9597 阅读 · 3 评论 -
sqlserver中的字符编码、排序规则、nvarchar和varchar、大N‘‘
sqlserver:一般我们在window或window server上安装sqlserver,安装后默认排序规则是:Chinese_PRC_CI_AS(GBK编码,不区分大小写,区分重音)。Chinese_PRC:针对大陆简体字UNICODE(unicode,而非UTF-8)的排序规则。CI:CaseSensitivity,指定不区分大小写。AS:AccentSensitivity,指定区分重音。sqlserver设置排序规则有四个级别:服务器(示例级别):数据库: 列:原创 2021-07-10 11:45:32 · 15799 阅读 · 4 评论 -
win10安装postgresql以及简单配置
环境:Windows 10 专业版postgresql-12.2-4-windows-x64.exe1. 下载postgresql安装包1.1 方法一:从官网下载https://get.enterprisedb.com/postgresql/postgresql-13.3-2-windows-x64.exe1.2 方法二:从百度云盘下载链接:https://pan.baidu.com/s/1_e8PCvXaRTcWlf7lLRv-yA提取码:62e61.3 下载完成后,如下图原创 2021-07-08 21:01:48 · 12683 阅读 · 1 评论 -
.netcore连接sqlserver报错:A connection was successfully established with the server, but
当把.netcore应用程序部署到linux或docker中去的时候,连接sqlserver数据库可能报错如下:A connection was successfully established with the server, but then an error occurred during the pre-login handshake. (provider: TCP Provider, error: 35 - An internal exception was caught)这个报错的原因是因为原创 2021-05-13 11:00:58 · 20290 阅读 · 0 评论 -
sqlserver:sql注入防范&参数化sql
环境:sqlserver2008及以上.net core 3.1sql注入本质:接收用户输入的字符串并且将字符串拼接成sql语句执行。由于用户的故意的输入,打断了原来的sql结构。--正常语句select * from sysuser where username='admin' and pwd='123456'--被注入的语句(用户输入的用户名是【admin' --】,密码还是123456)select * from syssuer where username='admin' --'原创 2021-02-03 21:30:03 · 2373 阅读 · 0 评论 -
sqlserver:使用output返回插入、删除的记录
环境:window10 x64sqlserver 2008 r2一、output的作用?首先看官网解释:《OUTPUT 子句 (Transact-SQL)》二、output应用示例先准备表:create table test( id int identity(1,1) primary key, name varchar(50), age int, addr varchar(50), birth datetime)2.1 返回insert的记录insert into te原创 2020-12-21 14:05:59 · 1829 阅读 · 0 评论 -
sqlserver:merge关键字用法
环境:window10 x64sqlserver 2008 r2参照:《SQL Server merge用法》一、CREATE TABLE category ( category_id INT PRIMARY KEY, category_name VARCHAR(255) NOT NULL, amount DECIMAL(10 , 2 ));INSERT INTO category(category_id, category_name, amount)VALU原创 2020-12-02 20:50:21 · 1772 阅读 · 0 评论 -
c# SqlException: 从 datetime2 数据类型到 datetime 数据类型的转换产生一个超出范围的值
环境:window 10 x64vs2019.net core 3.1efcore 3.1.9sqlserver 2008r2原因:将0000:01:01 00:00:00插入到datetime类型溢出了,因为datetime的范围是0001-01-01到 9999-12-31!!!一、sqlserver支持的日期时间类型(全)参照:https://docs.microsoft.com/zh-cn/sql/t-sql/data-types/date-and-time-types?vi原创 2020-11-09 18:16:34 · 2024 阅读 · 0 评论 -
sqlserver:存储Json数据
环境:window server 2019Microsoft SQL Server 2019 (RTM) Enterprise Edition (64-bit)一、JsonSql Server 从 2016 开始支持了一些 json 操作,但在SqlServer中Json还是被存储为字符串,只不过符合JSON格式的字符串会允许一些JSON特有的操作。二、Json函数2.1 判断字符串是否符合JSON格式规范 ISJSON()ISJSON函数是按照JSON格式规范进行判断的,JSON的格原创 2020-09-13 16:33:41 · 11347 阅读 · 0 评论 -
sqlserver:数据类型Hierarchyid的介绍和用法
环境:window10 x64 专业版SqlServer2014 x64 企业版参照:一、什么是Hierarchyid?hierarchyid 是一种长度可变的SqlServer数据类型,在SqlServer2008中被引入进来。二、为什么会有Hierarchyid?hierarchyid的出现是为了解决树状结构数据的存储问题的。设想有一个部门表t_org,我们用它来记录公司的组织架构,那么我们的表结构会怎么设计呢?一般我们会使用父/子关系基表:2.1 父/子关系建表示例creat原创 2020-09-11 17:22:24 · 3939 阅读 · 0 评论 -
sqlserver:关于FileStream和FileTable
环境:window10专业版 x64SqlServer2014 x64 企业版.net framework4.5参照:《官网说明》《SQL Server FileStream》一、什么是FileStream?SqlServer2008引入的一种大文件存储方案。以前我们在数据库存储二进制数据的时候就是下面的两种模式:(1). 将文件存储到磁盘上,然后再表中记录下文件的路径;(2). 直接将二进制数据存储到列中;现在,SqlServer2008给我们带来了第三种存储方案,它就原创 2020-09-08 11:04:26 · 1184 阅读 · 0 评论 -
postgresql:linux下通过源码安装postgresql
环境:centos8最小化安装postgresql12.4winscpxshell参考:《官网安装说明》《Linux环境安装PostgreSQL-10.1》一、准备安装包:可以从官网下载:也可以从网盘下载:链接:https://pan.baidu.com/s/1WVGdUJOL9BXwUcjjBWrYZQ提取码:qy79下载完成后:二、安装过程2.1 上传并解压安装包到linux的/usr/local目录通过winscp将postgresql安装包上传到linux的/原创 2020-08-30 17:44:16 · 2850 阅读 · 4 评论 -
mysql元数据:表约束、表索引和表触发器
环境:window10 x64专业版mysql8.0.21以压缩包的方式安装mysql到window10中参考:《window下安装压缩版的mysql8》一、表约束说明:可以认为mysql中的约束有六种(主要是类比sqlserver),但mysql的元数据中仅记录了四种约束:主键约束、唯一约束、外键约束、检查约束,另外两个约束“默认约束”“非空约束”是作为列的属性存在的。创建约束:DROP table if EXISTS class;create table class( id原创 2020-08-24 17:53:03 · 342 阅读 · 0 评论 -
mysql:导入导出数据
环境:window10 x64专业版mysql8.0.21以压缩包的方式安装mysql到window10中参考:window下安装压缩版的mysql8说明:navicat中有两种导出数据的方法:“转储SQL文件”/导入导出向导,这里讲的内容对应navicat中的导入导出向导一般我们导出数据使用转储sql的方法生成建表和insert语句就可以了。一、导出数据-- 准备表格数据drop table if EXISTS test;create table test( id int原创 2020-08-23 13:00:03 · 208 阅读 · 0 评论