最近小伙伴学习数据库真的是掉头发啊,错误一堆堆,总也解决不完,其实对于我们老鸟来说,如果认真总结一下,会发现错误就那么几种,掌握了你就是数据库老鸟,来吧一起看看都有啥。
《C#程序》的错误提示:
《SQLServer数据库的错误》
【问题分析】:以上两种错误都是同一个原因,就是sql语句中“字段的个数”和实际“字段 值”(values里面的)不一样导致的,解决方法就是仔细检查,有多少个字段,然后看给的对应值的个数是不是也是一样的,以上错误就是values后面的字段值,对应最后一个字段DepartmentId缺少了值,添加上即可。【解决方法】:
《C#程序》的错误提示:
《SQLServer数据库的错误》
【问题分析】:以上两种相同错误“插入重复键”,就是因为在数据表中,某些字段添加了“唯一约束”,这种问题,可以自己打开数据表,肯定有这种情况,比如上面的表中,身份证号就是唯一约束,但是我们从数据库中,查看数据表Employee发现,这个身份证号(120223199001091218)已经存在了,所以报错。
【解决方法】:改换成不同的身份号就行了。
《C#程序》的错误提示:
《SQLServer数据库的错误》
【问题分析】:以上两种相同的错误,是因为我们给的values中,有的字段值超过了字段定义的长度,这时候,需要去数据库中看一下具体的每个字段的长度,然后对比SQL语句中给的值,当然如果有很多字段,也不是每一个都对比,一般就是看看“字符串类型的字段”就可以了,经过查看,在Gender字段中,我们设置的是char(2)两个字符长度,而我们给的值是“男1”,也就是3个字符,所以超出长度,报错。
【问题解决】:只需要改成“男”就可以了。
《C#程序》的错误提示:
《SQLServer数据库的错误》
【问题分析】:凡是提示“CHECK约束冲突”的,一定要检查当前表中哪些字段添加了CHECK约束,然后根据约束要求,去核对values中的字段值,比如我们这个表中Gender性别列增加了如下约束:
右键点击表名称,选择“设计”,然后在表的设计状态下,任何地方再次右键,选择CHECK约束: 弹窗如下窗口:
发现,Gender的约束是“男”或“女”,而在上面的SQL语句中,我们写了“非”,所以报错。类似的问题,比如你给某一个字段设置成30-50范围的值,而你的数据不在这个范围,同样也是这个错误。
【问题解决】:只需要把values中的“非”改成“男”就可以了。
《C#程序》的错误提示:
{ encoding: utf-8, shell_cmd: /opt/homebrew/Cellar/gcc/11.2.0_3/bin/g++-11 $file_path/$file_name -std=c++11 -o yuhyuhy, file_regex: ^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$, selector: source.c,source.c++,source.cpp, file_patterns:*.cpp,*.c,*.c++, shell:true,
variants : [{
name : Date,
shell_cmd : open /Users/yuhengyu/ttest.txt
}, {
name : Run,
shell_cmd : ./yuhyuhy
}, {
name : Date-Run,
shell_cmd : ./yuhyuhy < /Users/yuhengyu/ttest.txt
}]}
执行时用shift+command+B选择执行类型
我太难了,留个记录防老qwq。。。
环境:
虚拟机:VirualBox6.1
操作系统:Centos7.6
客户端:SQL Server 2008R2 Management Studio 和 Navicat
1.重要的事情
阅读官方文档:https://docs.microsoft.com/zh-cn/sql/linux/quickstart-install-connect-red-hat?view=sql-server-ver15
参考适合自己的操作系统:
2.这里我们采用离线安装的方式
参考地址:https://packages.microsoft.com/rhel/7/mssql-server-2019/mssql-server-15.0.4083.2-15.x86_64.rpm
找一个自己喜欢的版本,下载下来。或者找大神们的百度网盘也行。
3.将文件拷贝到虚拟机目录,运行如下命令开始安装
安装完成后:
然后根据提示,完成安装。主要是选择版本,设置sa密码等等,你懂的
4.验证安装是否成功,输入命令:systemctl status mssql-server --no-pager
可以看到是在运行状态。
5.用第三方工具连接sqlserver2019。这里以Navicat举例。
新建sqlserver连接,填好主机名称或IP地址,还有sa密码后,点击连接测试,如下即是连接成功。
6.新建数据库
在创建好的连接上,右键,选择新建数据库。
其他如文件选项卡,重点是确定文件目录存在,且路径正确。
7.双击创建好的数据库,会看到你熟悉的东东。
8.至此,你可以进行数据库操作了。也可以安装sqlcmd命令行工具。
顺便问下,最近囤货了吗?:)
常规类型的格式化
String类的format()方法用于创建格式化的字符串以及连接多个字符串对象。熟悉C语言的同学应该记得C语言的sprintf()方法,两者有类似之处。format()方法有两种重载形式。
format(String format, Object... args) 新字符串使用本地语言环境,制定字符串格式和参数生成格式化的新字符串。
format(Locale locale, String format, Object... args) 使用指定的语言环境,制定字符串格式和参数生成格式化的字符串。
显示不同转换符实现不同数据类型到字符串的转换,如图所示。
转 换 符
说 明 示 例
%s
字符串类型
mingrisoft
%c
字符类型
'm'
%b
布尔类型
true
%d
整数类型(十进制)
问题描述: 今天想在虚拟机上重新安装docker然后使用到yum命令报错:
解决办法:
[root@localhost ~]# rm -f /var/run/yum.pid 然后重新运行刚才的yum命令即可
原因:
可能是系统自动升级正在运行,yum在锁定状态中,要等待那个进程结束退出:看报错的那一段话:
Another app is currently holding the yum lock; waiting for it to exit... 你可以看一下是否有yum进程
[root@localhost ~]# ps aux|grep yum root 16271 0.0 0.0 112660 964 pts/0 R+ 16:42 0:00 grep --color=auto yum
1.vscode安装
Visual studio code是微软发布的一个运行于 Mac OS X、Windows和 Linux 之上的,针对于编写现代 Web 和云应用的跨平台源代码编辑器。安装方式是从vscode官网下载.deb文件,然后双击该文件会打开软件中心进行安装。安装方法.png安装完毕后即可打开vscode,主界面如下:安装完成后主界面.png 2.vscode环境配置 注意:相关配置文件,请后台回复关键字“配置文件”即可获得全部文件。 (1) 安装c/c++插件
首先通过左边栏的Extension栏目安装C++插件,操作如下图:安装插件.gif(2) 创建工程由于vscode是以文件夹的形式管理工程的,因此首先新建一个文件夹,命名为cpp_ws。
工程文件夹.png然后通过vscode打开此文件夹:
文件夹打开图.png在cpp_ws文件目录下新建cpp_primier1.cpp文件并输入下图中的程序:
cpp_primier1测试程序.png(3) 更改配置文件(launch.json)点击左侧的Debug按钮,选择Add configuration,然后选择C++(GDB/LLDB),将自动生成launch.json文件,具体操作如下:
launch文件的创建.gif配置后的launch.json文件,请严格按照这个格式写:
launch配置文件.png(4) 添加构建(编译、链接等)任务(tasks.json)首先,利用快捷键ctrl+shift+p打开命令行,输入Tasks: Run task,然后点击:Tasks: Configure Task,然后生成tasks.json文件,详细内容见下图:
tasks文件内容.png(5) 简单断点调试 经过上述配置之后就可以对我们写的程序进行简单的配置。在进行下面的操作前,我们应当保证launch.json和tasks.json的正确性并且已经成功保存。然后在return 0 语句处设置一个断点,最后按下F5按键,运行程序。程序的结果:结果.png(6) vscode中的中文显示乱码解决方法:在第(1)步中,安装一个新的插件GBKtoUTF8。
(7) vscode汉化详情请见参考文章(2)
3.参考文章2.https://jingyan.baidu.com/article/a681b0de7654283b184346ea.html
下载所用的JDK11版本,我用的是:jdk-11.0.11_linux-x64_bin.tar.gz 放在/usr/local/下,自己建个文件夹,我的是/usr/local/jdk11 解压:tar -zxvf jdk-11.0.11_linux-x64_bin.tar.gz 配置环境变量,此处可以选择全局配置,也可以选择单用户配置。二选一。 全局配置,在/etc/profile文件最下面加入: export JAVA_HOME=/usr/local/jdk11 export PATH=$JAVA_HOME/bin:$PATH 保存后执行,source /etc/profile,使变量生效。
单用户配置,切换至需要配置的用户文件夹内,在其文件夹内的.bash_profile文件的最下面加入: export JAVA_HOME=/usr/local/jdk11 export PATH=$JAVA_HOME/bin:$PATH 保存后执行,source .bash_profile,使变量生效。
总结 很多人认为 Redis 是单线程,这个描述是不准确的。准确来说 Redis 只有在处理「客户端请求」比如接收客户端请求、解析请求和进行数据读写等操作时,是单线程的。但整个 Redis Server 并不是单线程的,还有后台线程,比如文件关闭、AOF 同步写和惰性删除在辅助处理一些工作。
Redis 选择单线程处理请求,是因为 Redis 操作的是「内存」,加上设计了「高效」的数据结构,所以操作速度极快,利用 「IO 多路复用」机制,单线程依旧可以有非常高的性能。
但如果一个请求发生耗时,单线程的缺点就暴露出来了,后面的请求都要「排队」等待,所以 Redis 在启动时会启动一些「后台线程」来辅助工作,目的是把耗时的操作,放到后台处理,避免主线程操作耗时影响整体性能
关闭 fd、AOF 刷盘、释放 key 的内存,这些耗时操作,都可以放到后台线程中处理,对主逻辑没有任何影响
后台线程处理这些任务,就相当于一个消费者,生产者(主线程)把耗时任务丢到队列中(链表),消费者不停轮询这个队列,拿出任务就去执行对应的方法即可:
BIO_CLOSE_FILE:close(fd) 文件关闭后台任务。 BIO_AOF_FSYNC:fsync(fd) AOF 日志同步写回后台任务 BIO_LAZY_FREE:free(obj) / free(dict) / free(skiplist) 惰性删除后台任务 后台线程有3个,后台进程只有RDB和AOF rewrite时才会fork子进程。
Redis 后台任务使用 bio_job 结构体来描述,该结构体用了三个指针变量来表示任务参数
struct bio_job { time_t time; void *arg1, *arg2, *arg3; //传递给任务的参数 }; 如果我们创建的任务,所需要的参数大于 3 个,最直接的方法就是,使用指针数组,因为指针数组本身就是一个个指针,可以通过index的顺序标记参数的含义类型,通过index就能快速获取不同的参数对应的指针这样就可以传递任意数量参数了。因为这里 Redis 的后台任务都比较简单,最多 3 个参数就足够满足需求,所以 job 直接写死了 3 个参数变量,这样做的好处是维护起来简单直接
容易出的bug 脚本保存为.sh格式文件,第一行应注明使用的shell程序路径,如 #!/bin/sh 使用#井号注释单行;使用分号分隔语句、可以分隔同一行的多条命令 变量定义的=前后不要有空格,例如x=1 定义数组变量用空格分隔数组元素,例如y=('a' 'b' 'c'),数组元素下标从0开始;可使用y[i]='d'改变数组元素值 使用$name引用已经定义过的变量name,使用${myArr[i]}引用已经定义过的数组变量myArr下标i的元素;使用${#myArr[*]}获得数组长度 for循环后不要有冒号(for循环的结构大致如下) for fl in $fileLst do echo file name is $fl done if语句的结构大致为:if then else fi 可以使用=, !=比较字符串,或比较数值;可以使用&&等关系运算符(具体详见本文文末参考的shell脚本常用语法大全) 参考链接 shell脚本常用语法大全 SHELL基础知识-循环篇-嵌套循环
在 MySQL 中,SELECT、INSERT、DELETE 等某些词是保留字。由于它们具有特殊含义,因此当您将它们用作表名、列名或其他类型的标识符时,MySQL 会将其视为语法错误 - 除非您用反引号将标识符括起来。
解决方式
1、不要使用保留字作为标识符
最简单的解决方案就是避免使用保留字作为表名、列名等标识符。
保留字见:9.3 Keywords and Reserved Words 2、使用反引号
如果无法重命名表或列,请将与保留字相同的列、表名的标识符包含在反引号 (`) 中,例如:
INSERT INTO user_details (username, location, `key`) VALUES ('Tim', '北京', 42);