【学习笔记Part 2● MySQL】
数据库
为什么要用数据库
如何去存放数据?生活中有各种各样的数据。比如说人的姓名、年龄、成绩等。平时我们记录这些信息都是记在大脑中。人的记忆力有限,不可能什么都记住。所以后来人们把数据记录在石头上–>书本上。(不安全)数据完整性
为了数据能够完整的保存下去。人们发明了数据库。
如果数据缺少完整性,记录时会提示错误信息。数据库的种类
两大类:关系型数据库、非关系型数据库。关系型数据库
关系表。比如说日常所见的成绩表excel文档.
关系表示一个二维表格。
每一行代表每一条信息。
每一列代表相同类型的信息。
常见的关系型数据库:
Mysql 所属Oracle公司的
sqlserver
Oracle
SQLlite
MySQL:小。轻便。易学。标准化sql语言。安装便捷。非关系型数据库
键值对(key-value)。
常见非关系型数据库:Redis
目前华为云、网易云、阿里云均支持Redis。
为什么要配置环境变量?
作用:保证可执行程序在当前系统的任意位置都可以运行。
Windows系统配置环境变量都在path下。
MySQL简单使用
数据库:database
查看当前mysql下有什么数据库。
show databases;
解释:sql语句以分号结束。
也就是说每写一条SQL语句,都必须要加 ; 符号。
如何进入到数据库中:use命令
use 数据库名称
当看到 Database changed说明已经进入到数据库information_schema中。此时可以查看当前数据库下有什么表。
表格:table
查看数据库当中的表格:
show tables;
此时可以看到当前数据库下所有的表。
查看表格内容:(表结构)
desc CHARACTER_SETS;
左下角显示4 rows 表示有四条记录。
此时第一行看到的是表中列的名称。第二行是类型。第三行表示是否为空。
查看表格具体内容:
首先选择查询哪张表、显示哪些列以及根据什么去查询。
select * from 表名;
此时查询到的是当前表中所有的内容。
创建第一个数据库:
创建时需要输入 create database 数据库名称; 否则报错!
出现Query OK..表示创建数据库成功!
create database mydb;
删除数据库:
drop database 要删除的数据库名称;
合并:创建数据库的同时,检查要创建的数据库是否存在,如果存在,删除!
drop database if exists mydb;
create database mydb;
如果之前没有创建该数据库,那么会报警告。不会报错。
如果已经创建该数据库,那么直接删除。
同理对表格一样适用。
表格的创建:
drop table if exists t1;
create table t1;
刚进入数据库就开始创建表格,然后报错提示说没有选择数据库。
因此创建表格的前提:先进入到一个数据库中。
use mydb;
drop table if exists t1;
create table t1;
创建表格时,至少要有一列。
create table 表格名称(列名 列类型);
此时查看创建的表:
select * from t1;
由于没有添加任何数据,它是一张空表。
详细查看创建表时的信息:
show create table 表名
后面的信息为数据库自动补全的。
数据库退出:
输入exit
其他两种退出方式:
\q;
quit;
数据库中存储数据的类型
常用三大类:数值 字符 时间
数值:
字符:
日期:
创建完整的表格:
在使用Mysql时,最好自备一个脚本文件。每次使用时,直接从脚本文件中copy出来。修改相应的库名和表名、字段名即可。
/*创建数据库*/
drop database if exists mydb;
create database mydb;
/*进入已经创建的数据库中*/
use mydb;
/*创建数据库表*/
drop table if exists t1;
create table t1(
id int,
stunumber int,
name varchar(20),
score int
);
语法:
/*SQL语法
创建数据库
drop database if exists 数据库名称;
create database 数据库名称;
创建数据库表
drop table if exists 数据库名称;
create table 表格名称(
列名1 列类型1,
列名2 列类型2,
.....
)
*/
插入数据(新增数据):
语法1:
insert into 表名 values(列1新值,列2新值....);
插入数据报错,无法插入中文字符。
编码格式(utf-8)(解决方式在下面课堂练习)
修改第三个列值为英文字符,可以插入:(插入时,value值误设成了跟列一样的字符)
修改姓名长度,发现以下错误类型:/(不是超出了规定的限制长度)/
而是需要对插入的字符添加引号(可以是单引号,还可以是双引号)
一直以下语句:(插入时,value值误设成了跟列一样的字符)
当插入完毕,检查表格,发现name未被录入:(都为null)(原因:插入时插入的数据和列名称一致,导致其他数据正常入库,只有name列为null)
该插入方法存在的问题:以上标注出来
语法2:
insert into t1(id,stunumber,name,score) values (列1新值,列2新值....);
插入时,插入的列的新值必须要跟前面列的类型一致,否则会报错!
查看插入的数据:
此时插入的数据已经全部入库。
小结:采用插入语句时,使用语法2进入数据插入(数据预置)。
课堂练习:
录入数据:
创建表格创建语句小括号内最后一列的列类型后面没有逗号名,否则会报错!
创建成功之后,查看表相信信息:包括创建表的语句名,以及数据引擎,编码格式。
show create table shopping;
默认编码格式问题:
Linux:Ubuntu默认编码格式为UTF8(utf-8)
Windows 默认编码格式为GBK(gb2312)
解决无法插入中文字符或者插入时中文字符在数据库表中显示乱码:
更改数据库表的编码格式:
alter table 表名 convert to charset ‘编码格式’;
修改完毕之后可以进行数据插入:
插入时,对于varchar类型的列,中文字符可以使用单引号或者双引号包裹起来。
所有数据预置完成:
发现三个问题:
1. id有重复的项 (主键 唯一性)
2. 少了一列总价 (添加)
3. 行有重复的 (重复的删除)
删除数据库表中的数据:
delete from 表名;(数据清空,禁用!)
正常删除:根据表中某一列的具体值来删除的
delete from 表名 where 列名 = 值;
1.如果删除的列的值不在数据库表中:
那么此时SQL执行成功,但是对表没有任何影响。
2.如果删除的列的名称不在数据库表中,那么会报错:
查询时,依然可以根据某一列的列名称=值来查询
添加列
语法:
alter table 表名 add 新列名 新类型;
新增列之后,默认给新增的列补null值。
发现的新问题:
1. 如何更新总价?
2. 假如列名称打错了或者列类型打错了,但是执行成功了,如何修改?
比如说修改pricesum为price_sum:
1.修改列的类型:
语法: alter table 表名 modiy 列名 新类型;
2.修改列的名称(这里也可以修改类型):
语法:alter table 表名 change 旧列名 新列名 新类型;(更改列名和类型)
语法:alter table 表名 change 旧列名 新列名 旧类型;(更改列名)
录入总价:
不能再使用insert语句,因为insert语句只会新增行。不会修改原有行的数据。
修改行
语法:update 表名 set 列名=新值 where 列名=值(列名与值要存在)
1.更新表格中值不存在的情况:
2.更新表格中列不存在的情况(参考删除的情况)
3.正确更新表格中的值:
4.一次更新一行中的多个单元格中的值
语法:update 表名 set 列名1=新值,列名2=新值... where 列名=值;
5 . 一次更新所有行中,某一列或多个列的值。
语法:update 表名 set 列名1=新值,列名2=新值...;
删除列
创建表格时,列写多了。需要删除:drop
语法:alter table 表名 drop 列名;
查询结果只显示某一列内容或者特定列内容:
语法:
selet 列名1,列名2... from 表名 ;
使用show create table 表名时。查看到有:
charset表示的是当前数据库表的字符编码集。
default表示的是单元格内容可为空。
engine表示的是表格的引擎。
Mysql常见的两种引擎类型
引擎表现方式:engine
两种:InnoDB(支持事务) MyISMA(不支持)
事务
在处理数据时,每条SQL语句执行完毕之后,下面显示的
表示处理了几行数据。
处理数据的过程中,如果出现错误。比如说预置100条数据。但是前20条数据执行成功了,第21条数据执行失败。问:结果是通过还是没通过?
更改?重新提交?
1. 事务开启 2.事务回滚
在引擎类型是InnoDB时,如何查看是否开启事务?
select @@autocommit;(为1表示自动提交。0表示事务开启)
设置事务开启或者关闭:是针对当前数据库下所有的表。(前提引擎类型要是InnoDB)
开启事务的目的:方便数据库表的维护。可以使用一键回滚,较少不必要的操作。公司项目中数据库事务全是开启状态。
一般对于数据库进行操作时,SQL标准脚本:
先删,后改,再提交。
/*标准SQL执行脚本 先删,后改,最后提交*/
delete from shopping where id=20180704;
insert into shopping(id,shoppingtype,name,price,numer) values(20180704,'生活用品','牙刷',2.5,1);
commit;
开启事务:
set @@autocommit=0;
插入数据:
查询表格:
事务回滚:
rollback;
事务回滚完毕之后,发现之前插入的数据都没有了。
保证数据库表的安全性。(便于维护)
如果没有进行事务回滚,而是进行事务提交。
此时数据入表成功,如果再使用rollback进行事务回滚,发现没有任何改变。
关闭事务,变更为自动提交:
set @@autocommit=1;
小结:数据库在创建时,事务默认是没有开启的。需要手动开启。(开启方式,可以通过上面设置。可以通过代码来设置。)
关于表格的创建:
为了后期出现无法开启事务以及录入数据乱码问题,可以采用如下创建表格的方式来创建表格
/*创建表格模板*/
create table 表格名称
(
列名1 列类型,
列名2 列类型,
...
)engine=InnoDB default charset=utf8;
关于单元格不为null值
列类型后添加not null
插入数据时:
id必须要填写。否则会报错:
如果没有设置某一列的单元格为null,那么插入数据时,可以不全部更新。
根据插入语法2:
列名称可以不写全(可以不是表格中所有的列),但是后面的值要和前面的列一一对应(包括个数、类型)。
注意:
- 中英文符号的问题。
- 自己写SQL脚本时,最好现在文本中写出(备份)。新建空白文档,ctrl+s保存可以以修改后缀名为.sql的文件。此时关键字是有颜色的(方便单词拼写检查)。
- 创建表格的时候不要使用中文(表名不要是中文,列名不要是中文)
- 列中的值可以是中文。(支持字符串,中文也是字符串)
- 查询事务时,不要使用select @@commit=1或者select @@commit=0去查询,因为给列名指定了具体的值,查询出来的就是0或者1.而不是你当前事务表中的值。正确的查询方式:select @@autocommit;设置事务开启与关闭
set @@autocommit=0或者1;
约束
5种约束:
1. 非空约束 not null
2. 唯一约束 unique
3. 主键约束 primary key
4. 外键约束 foreign key
5. 检查约束 check
作用:确保数据的完整性。
非空约束 not null
表示单元格不能为null值。
实现方式:
1. 在表格创建时,设置某列不能为null
新值数据检查非空约束:(新值一个正确的数据)
新增一个id为空的数据:(报错)(id非空)
设置年龄为Null值:
2. 建表时未添加非空约束,建表后添加方式:
alter table 表名 add 列名 列类型 not null;
desc 表名查看表时,null列值为no时,表示该列不能为空!
不能为空不代表不能够重复。
唯一约束
确保数据的唯一性。(可以为空,但是不会重复)
唯一约束:unique
1.创建表格的时候,在列后添加关键字 unique
上图情况说明:当表中的列唯一且非空,那么会默认变成主键。
在创建表格的时候对列只添加关键字unique,不添加not null。
检查唯一性:
首先正确新值一条数据。
然后不做任何变化,继续新值数据。发现报错:stu_no列中已有该值。确保了数据的唯一性。(不能重复)
但是可以为null值:
主键约束
一般对数据库表进行操作时,都是以主键的列名来操作的。
例如:删除数据 where 主键名=值;
1. 创建表格的时候添加主键约束
上表中,主键为id。stu_no唯一。因此在插入数据时,这两个值必须要有。否则会报错!报错优先级:如果说主键和具有唯一行的列都重复了,那么会抛出主键重复的错误!
创建表格时,对于主键的列,可以删除not null 关键字。但是最好保留
创建完成,使用desc 表名查看表结构。发现主键的列依然是非空。
desc 表名;
思考:主键既唯一又非空。那么我们可以设置一系列数字(使该列数字自增长)
目的:方便操作。对表格进行新增操作时,不用再添加主键值了。
auto_increment 自增长
创建表格时,。对主键的列添加关键字即可。在主键前加
创建完成,查看表格信息:
新增数据检查自增长:
新增数据时,无论是否添加成功。主键都会自增长1.而且主键是从1开始的。如果说通过jdbc链接数据库表进行操作时,操作完成发现表中主键不是连续的。说明自主插入数据时,有一些步骤报错了。(正常现象)
如果新增数据时,自主添加主键。那么接下来主键以当前自主添加的主键值为基数,自增长1.
发现的问题1:(唯一性BUG)
首先创建表格:(id唯一,stuage可以为空)
新值数据时,只新增stuage。发现不会报错,而且id一直是null.
删除时。根据id等于null或者0来删除。发现没有任何作用。
此时给id添加not null。解决问题。
以上问题在mysql5.7版本中依然存在。
发现问题2:(非空默认值)
创建表格时,id字段设置为非空。设置非空,年龄设置可以为空。
正常新增数据时,可以添加。
当新增数据时,没有添加id列,发现id默认补0.
根据id,可以删除:
给id添加唯一,发现无法添加唯一约束。
原因:表中id列存在相同的值,无法添加主键。
如果表中有数据,并且同一列有重复的数据,无法把该列作为表的主键。
删除同一列中相同的数据,发现可以改为主键:
新增数据时,发现数据库表中有不符合日常认知的数据。(需要自己手动去检查,修改)
可以使用update语句去修改这些数据。
检查约束
系统会自动检索数据是否满足要求。关键字:check
比如上表中,所有数据都满足数据库表对数据的要求。但是。有些列的值不符合实际要求。需要在添加数据时,给其规定需要满足什么条件的数据才能入库。
给性别添加检查约束:
alter table stu_information add constraint check(stu_age between 1 and 120);
添加约束之后。新增数据。发现数据依然入库。Mysql5.7版本暂时不支持check。
alter table 表名 add constraint check(列名=’值’ or 列名=’值’);
between 表示 :数据范围在…和…之间 适用and相连
or 表示 :或者
外键约束
对于学生信息表和住宿信息表而言。先有学生信息表,这里统计了所有学生的信息。
然后再有住宿信息表,有选择的入住宿舍。
建立主外键关系:
外键:foreign key
至少两张表:
alter table 外键表 add constraint foreign key(外键表中的某列) references 主键表(主键表中选取一列作为外键表的主键);
前提(最好保证主键表中没有数据)
备注:因为stu_information中stu_no是主键。所以上面语句中。写的是主键。
在设置主外键时,不一定要以主键来设置。
外键也不一定是主键。
添加完成之后,通过
show create table stu_information
查看到详细建表语句
新增数据:
首先新增外键表数据(发现报错!)
报错原因:是因为主键表中的stu_no没有该数据(不存在)。
因此,正确添加数据顺序,先添加主键表中的数据。然后再添加外键表。(加:先主后外)
即使外键表中有数据,但是往外键表中添加数据时,一定要和主键表中的键相对应起来。
删除数据时:
先删除主键表数据会报错!
正确删除顺序:先删除外键表数据,再删除主键表数据(加:外主后主)
修改时:
由于对于学号的设置。主键stu_no是主键表的主键。唯一,而且不为空。
外键表stu_no唯一,而且不为空。
所以无法更新任何一张表的主外键,但是可以修改其他数据。
如果不唯一时?能够更新主外键表中的主外键数据?
学生信息表与住宿信息表案例
创建数据库表顺序:
/*入学开始*/
/*学生信息表*/
create table t1(
id int not null auto_increment primary key,
num int unique,
name varchar(20)
)engine=InnoDB default charset=utf8;
/*住宿信息表*/
create table t2(
id int not null auto_increment primary key,
num int unique,
name varchar(20),
stu_num int
)engine=InnoDB default charset=utf8;
建立主外键关系:
/*建立起主外键关系*/
alter table t2 add constraint foreign key(num) references t1(num);
学生证办理以及安排宿舍:
/*录入学生信息(下发学生证)*/
insert into t1(num,name) values(1,'ceshi1');
insert into t1(num,name) values(2,'ceshi2');
insert into t1(num,name) values(3,'ceshi3');
insert into t1(num,name) values(4,'ceshi4');
/*录入住宿信息(安排宿舍)*/
insert into t2(num,name,stu_num) values(1,'ceshi1',101);
insert into t2(num,name,stu_num) values(2,'ceshi2',101);
insert into t2(num,name,stu_num) values(3,'ceshi3',101);
insert into t2(num,name,stu_num) values(4,'ceshi4',101);
毕业后,学生信息清除顺序:
/*四年过去,毕业了*/
/*先搬出宿舍*/
delete from t2 where num=1;
delete from t2 where num=2;
delete from t2 where num=3;
delete from t2 where num=4;
/*注销学生证信息*/
delete from t1 where num=1;
delete from t1 where num=2;
delete from t1 where num=3;
delete from t1 where num=4;
删除约束
新建用户表sys_user与用户密码表sys_user_pwd。
/*用户表*/
create table sys_user(
id int auto_increment primary key,
user_id int unique,
user_name varchar(20)
)engine=InnoDB default charset utf8;
/*用户密码表*/
create table sys_user_pwd(
id int auto_increment primary key,
user_id int unique,
user_name varchar(20),
user_passwd varchar(40)
)engine=InnoDB default charset utf8;
设置主外键关系:
/*建立起主外键关系*/
alter table sys_user_pwd add constraint user_id_fk foreign key(user_id) references sys_user(user_id);
新增一条用户数据:
insert into sys_user(user_id,user_name) values(10120123,'root');
insert into sys_user_pwd(user_id,user_name,user_passwd) values(10120123,'root','root');
insert into sys_user(user_id,user_name) values(10120124,'root1');
insert into sys_user_pwd(user_id,user_name,user_passwd) values(10120124,'root1','root');
当两张表使用完毕,现在要清理一些约束关系。
1. 删除主键约束
删除时,发现主键id是自增长,无法删除。
2. 删除自增长
首先要去除自增长:
alter table 表名 modify 自增长列名 旧类型;
此时可以删除主键:alter table 表名 drop primary key;
3. 删除非空约束
此时id依然存在非空约束,现在去除非空约束:
alter tale 表名 modify 非空约束的列 旧类型
modify可以去除自增长,还可以去除非空约束,还可以修改列类型。
如果以上三种同时存在,执行第一次时,去除自增长,执行第二次时,去除非空约束,接下来可以修改列类型。
4. 删除唯一约束
删除唯一约束:
alter table 表名 drop index 具有唯一性的列
删除报错:原因需要使用外键别名。
假如说不知道外键别名或者说在设置主外键关系时,没有设置外键别名,那么可以通过show create table 表名 来查看,一般以fk结尾。
使用别名删除时,发现当前user_id作为外键表的主键,在外键表中有相对应的值。但是sys_user表不是外键表,sys_user_pwd才是外键表。
5. 删除外键约束
根据外键名称删除约束:
alter table 外键表表名 drop foreign key 外键名;
删除主外键关系和表中是否有数据,没有关系。
数据查询
简单查询(单一的表)
直接查看数据库所有数据:
select * from 表名;
根据列名查看数据库满足当前列的值的所有的数据:
select * from 表名 where 列名=值;
可以查看自己规定显示的列:
select 列名 from 表名 where 列名=值
多表查询(两张或两张以上的表)
关键字:= (只表示查询一个)
select * from 表名1 where 列名1=(select 列名2 from 表名2 where 列名3=值)
以上SQL前提,表中字段值和其他表中的字段值一样。可以N个表连一起查询。
关键字in :(查询满足条件所有的数据)(sys_user表中的user_id都会被拿出来和sys_user_pwd表中的user_id相比较,把值相同的行显示出来。)
关键字:not (表示不的意思)(查询表中数据不在另外一个表中存在)
关键字:order by(排序)
一般order by 和时间列相结合使用,可以帮助我们迅速找到最新的一条数据。
比如:
select * from 表名 ..../*中间的查询条件*/... order by 时间列 desc;
同时显示两张表内容:
(select 表1别名.,表2别名. from 表1 表1别名,表2 表2别名 where 表1别名.表1列名=表2列名)
给表起别名
select * from 表 别名 查询条件
当SQL语句中出现两张表时,给两张表起别名。不要取一样的别名,尽量区分。
同时显示两张表的内容:
查看到表中有重复的列。可以自由控制显示列的数量与顺序。(相当于内连接)
查询数据库表连接方式
左连接:查询结果以左边为准
右边没有的会自动补null
select t.user_id,t1.user_id from sys_user t letf join sys_user_passwd t1 on t.user_id=t1.user_id (在Orcale数据库使用过程中带别名查询)
不带别名查询时:(一般在mysql使用过程中不带别名)
右连接:查询结果以右边为准
左边表没有的值补null
把上述SQL语句中的表顺序置换一下:(单词由left改为right)
内连接:相当于in
in或者not in 都是子查询的一种。
子查询:以一张表以基础,去查询另外一张表
内连接相当于子查询中的In。
/*左连接*/
select t.*,t1.* from sys_user t left join sys_user_pwd t1 on t.user_id=t1.user_id;
/*右连接*/
select t.*,t1.* from sys_user_pwd t right join sys_user t1 on t.user_id=t1.user_id;
/*内连接*/
select t.*,t1.* from sys_user_pwd t inner join sys_user t1 on t.user_id=t1.user_id;
select t.*,t1.* from sys_user t inner join sys_user_pwd t1 on t.user_id=t1.user_id;
两种内连接显示结果:
模糊查询
模糊查询:根据一个字或者首字母或者以什么结尾来查询。
比如:百度、有道词典
关键字:like
原有数据库表:
1. 查询以root开头的用户
/*模糊查询1:查询以root开头的用户*/
select * from sys_user where user_name like 'root%';
2. 查询以字母t结尾的用户
3.
/*模糊查询2:查询以字母t结尾的用户*/
select * from sys_user where user_name like '%t';
3. 查询用户名中包含连续字母oo的用户
/*模糊查询3:查询用户名中包含连续字母oo的用户*/
select * from sys_user where user_name like '%oo%';
4. 查询用户中包含两个字母o的用户
/*模糊查询4:查询用户名中包含两个字o的用户*/
select * from sys_user where user_name like '%o%o%';
【学习笔记Part 2● MySQL】的更多相关文章
- openresty 学习笔记四:连接mysql和进行相关操作
openresty 学习笔记四:连接mysql和进行相关操作 毕竟redis是作为缓存,供程序的快速读写,虽然reidis也可以做持久化保存,但还是需要一个做数据存储的数据库.比如首次查询数据在red ...
- 【Mysql学习笔记】浅析mysql的binlog
最近读一份关于“数据库事务故障恢复"的技术资料,发现对mysql的binlog的认识不够清楚,查阅mysql reference manual有所收获,作为笔记,记录于此. 1. What' ...
- MySQL学习笔记(2) - 修改MySQL提示符的两种方法
学习于慕课网 http://www.imooc.com/video/1806 1.方法一: cmd中处于未登录状态时,输入 mysql -uroot -p自己的密码 --prompt 新的提示符 示例 ...
- ABP学习笔记(1)-使用mysql
前言 开始学习ABP啦 下载官方模板 下载地址: https://aspnetboilerplate.com/Templates 我这边选择的是.NET Core+VUE 移除SqlServe ...
- 《MySQL必知必会》学习笔记——附录A MySQL入门
附录A MySQL入门 如果你是MySQL的初学者,本附录是一些需要的基础知识. A.1 你需要什么 为使用MySQL和学习本书中各章的内容,你需要访问MySQL服务器和客户机应用(用来访问服务器的软 ...
- MySQL学习笔记——〇三 MySQL习题
在前面讲了MySQL的初步使用方法以后,在这里放出来一些案例来看看怎么做. 先看看database的结构,一共5个表 外键关系: class的cid是student的class_id的外键,teach ...
- Python学习笔记9-Python 链接MySql数据库
Python 链接MySql数据库,方法很简单: 首先需要先 安装一个MySql链接插件:MySQL-python-1.2.3.win-amd64-py2.7.exe 下载地址:http://dev. ...
- MySQL学习笔记(五):MySQL表级锁和行级锁
一:概述 相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制.比如,MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking ...
- MySQL学习笔记(二):MySQL数据类型汇总及选择参考
本文主要介绍了MySQL 的常用数据类型,以及实际应用时如何选择合适的类型. ******几个通用的简单原则:******* 1. 更小的通常更好.但是要确保没有低估需要存储的值的范围,如果无法确定 ...
随机推荐
- django优化和扩展(一)
mysql优化基础 进行django产品开发或上线之前,有必要了解一下mysql的基础知识,orm太过抽象,导致很多朋友对于mysql了解得太少,而且orm不像sqlalchemy那样可以跟mysql ...
- sqlilabs 5
第一个1不断返回true,2可以进行更改?id=-1' union select 1,2,3 and '1?id=-1' union select 1,2,3 and 1='1 ?id=-1' uni ...
- Eclipse开发前,常用设置
设置工作空间的项目编码, 防止出现乱码 Window - Preferences - General - Workspace 将"Text file encoding" ...
- MySQL类型float double decimal的区别
语法 MySQL 浮点型和定点型可以用类型名称后加(M,D)来表示,M表示该值的总共长度,D表示小数点后面的长度,M和D又称为精度和标度,如float(7,4)的 可显示为-999.9999,MySQ ...
- Redis数据过期和淘汰策略详解(转)
原文地址:https://yq.aliyun.com/articles/257459# 背景 Redis作为一个高性能的内存NoSQL数据库,其容量受到最大内存限制的限制. 用户在使用Redis时,除 ...
- Hibernate中的常用API
1.Configuration 1.1 加载核心配置文件, 加载hibernate.properties时:Configuration configuration = new Configuratio ...
- Exchanger兄弟线程间数据信息交换
一.简述 Exchanger可以在两个线程之间交换数据,只能是2个线程,他不支持更多的线程之间互换数据.当线程A调用Exchange对象的exchange()方法后,他会陷入阻塞状态,直到线程B也调用 ...
- Fedora Linux中解决“xxx不在sudoers文件中”
问题描述: 在Fedora中执行一些操作时需要使用root权限,当我使用命令: sudo 想在普通用户中临时获得root权限时,却被提示: "xxx 不在 sudoers 文件中.此事将被报 ...
- Docker for Windows 使用 VMware WorkStation
一.前言 Docker for Windows 不同于 Docker Toolbox.Docker for Windows 对系统的要求至少为Windows 10专业版,因为它需要Hyper-V的支持 ...
- .Net Core vs .Net Framework 如何为一个应用程序选择一个运行时
.Net Core是下一件大事吗?我已经使用了一段时间了,我倾向认为它是.事实上,我们推测,在2018年,对这项技术熟练的开发人员将会有巨大的需求.但是它和.Net Framework的区别是什么?你 ...