数据库

  1. 为什么要用数据库
    如何去存放数据?生活中有各种各样的数据。比如说人的姓名、年龄、成绩等。平时我们记录这些信息都是记在大脑中。人的记忆力有限,不可能什么都记住。所以后来人们把数据记录在石头上–>书本上。(不安全)

  2. 数据完整性
    为了数据能够完整的保存下去。人们发明了数据库。
    如果数据缺少完整性,记录时会提示错误信息。

  3. 数据库的种类
    两大类:关系型数据库、非关系型数据库。

    关系型数据库

    关系表。比如说日常所见的成绩表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:

列名称可以不写全(可以不是表格中所有的列),但是后面的值要和前面的列一一对应(包括个数、类型)。

注意:

  1. 中英文符号的问题。
  2. 自己写SQL脚本时,最好现在文本中写出(备份)。新建空白文档,ctrl+s保存可以以修改后缀名为.sql的文件。此时关键字是有颜色的(方便单词拼写检查)。
  3. 创建表格的时候不要使用中文(表名不要是中文,列名不要是中文)
  4. 列中的值可以是中文。(支持字符串,中文也是字符串)
  5. 查询事务时,不要使用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】的更多相关文章

  1. openresty 学习笔记四:连接mysql和进行相关操作

    openresty 学习笔记四:连接mysql和进行相关操作 毕竟redis是作为缓存,供程序的快速读写,虽然reidis也可以做持久化保存,但还是需要一个做数据存储的数据库.比如首次查询数据在red ...

  2. 【Mysql学习笔记】浅析mysql的binlog

    最近读一份关于“数据库事务故障恢复"的技术资料,发现对mysql的binlog的认识不够清楚,查阅mysql reference manual有所收获,作为笔记,记录于此. 1. What' ...

  3. MySQL学习笔记(2) - 修改MySQL提示符的两种方法

    学习于慕课网 http://www.imooc.com/video/1806 1.方法一: cmd中处于未登录状态时,输入 mysql -uroot -p自己的密码 --prompt 新的提示符 示例 ...

  4. ABP学习笔记(1)-使用mysql

    前言 开始学习ABP啦 下载官方模板 ​ 下载地址: https://aspnetboilerplate.com/Templates ​ 我这边选择的是.NET Core+VUE 移除SqlServe ...

  5. 《MySQL必知必会》学习笔记——附录A MySQL入门

    附录A MySQL入门 如果你是MySQL的初学者,本附录是一些需要的基础知识. A.1 你需要什么 为使用MySQL和学习本书中各章的内容,你需要访问MySQL服务器和客户机应用(用来访问服务器的软 ...

  6. MySQL学习笔记——〇三 MySQL习题

    在前面讲了MySQL的初步使用方法以后,在这里放出来一些案例来看看怎么做. 先看看database的结构,一共5个表 外键关系: class的cid是student的class_id的外键,teach ...

  7. Python学习笔记9-Python 链接MySql数据库

    Python 链接MySql数据库,方法很简单: 首先需要先 安装一个MySql链接插件:MySQL-python-1.2.3.win-amd64-py2.7.exe 下载地址:http://dev. ...

  8. MySQL学习笔记(五):MySQL表级锁和行级锁

    一:概述 相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制.比如,MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking ...

  9. MySQL学习笔记(二):MySQL数据类型汇总及选择参考

    本文主要介绍了MySQL 的常用数据类型,以及实际应用时如何选择合适的类型.  ******几个通用的简单原则:******* 1. 更小的通常更好.但是要确保没有低估需要存储的值的范围,如果无法确定 ...

随机推荐

  1. django优化和扩展(一)

    mysql优化基础 进行django产品开发或上线之前,有必要了解一下mysql的基础知识,orm太过抽象,导致很多朋友对于mysql了解得太少,而且orm不像sqlalchemy那样可以跟mysql ...

  2. 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 ...

  3. Eclipse开发前,常用设置

    设置工作空间的项目编码, 防止出现乱码    Window - Preferences - General - Workspace    将"Text file encoding" ...

  4. MySQL类型float double decimal的区别

    语法 MySQL 浮点型和定点型可以用类型名称后加(M,D)来表示,M表示该值的总共长度,D表示小数点后面的长度,M和D又称为精度和标度,如float(7,4)的 可显示为-999.9999,MySQ ...

  5. Redis数据过期和淘汰策略详解(转)

    原文地址:https://yq.aliyun.com/articles/257459# 背景 Redis作为一个高性能的内存NoSQL数据库,其容量受到最大内存限制的限制. 用户在使用Redis时,除 ...

  6. Hibernate中的常用API

    1.Configuration 1.1 加载核心配置文件, 加载hibernate.properties时:Configuration configuration = new Configuratio ...

  7. Exchanger兄弟线程间数据信息交换

    一.简述 Exchanger可以在两个线程之间交换数据,只能是2个线程,他不支持更多的线程之间互换数据.当线程A调用Exchange对象的exchange()方法后,他会陷入阻塞状态,直到线程B也调用 ...

  8. Fedora Linux中解决“xxx不在sudoers文件中”

    问题描述: 在Fedora中执行一些操作时需要使用root权限,当我使用命令: sudo 想在普通用户中临时获得root权限时,却被提示: "xxx 不在 sudoers 文件中.此事将被报 ...

  9. Docker for Windows 使用 VMware WorkStation

    一.前言 Docker for Windows 不同于 Docker Toolbox.Docker for Windows 对系统的要求至少为Windows 10专业版,因为它需要Hyper-V的支持 ...

  10. .Net Core vs .Net Framework 如何为一个应用程序选择一个运行时

    .Net Core是下一件大事吗?我已经使用了一段时间了,我倾向认为它是.事实上,我们推测,在2018年,对这项技术熟练的开发人员将会有巨大的需求.但是它和.Net Framework的区别是什么?你 ...