数据库
数据库是数据管理的软件,有mysql,sqlite,orancle等,我们使用mysql。
https://www.liaoxuefeng.com/wiki/1177760294764384
mysql数据库的概念
mysql数据库分为数据库的存储系统和数据库的关系系统,有存储数据和管理数据的功能。他是用一种c/s架构的软件
linux下mysql数据库的安装
可以使用rpm安装
也可以使用源码安装
也可以使用一键安装包
https://blog.51cto.com/5493817/2491722
我们可以通过mysql的客户端操作我们的数据比如:
mysql命令 mysql -h主机 -u用户名称 -p密码
navcate 一个图形化的工具。
phpmyadmin。使用php写的一个软件。
DML:数据库管理语言(管理数据)
DDL:数据库定义语言(建表建库,触发器)
DCL:数据库控制语言 (权限管理,创建管理用户)
mysql的库操作
新建数据库
create database 库名
查看数据库
看有那些数据库
show databases;整型
show create database 库名
进入数据库
use 名称
删除数据库
drop database 库名
mysql的表操作
查看表
查看有那些表
show tables;
查看表的详细信息
desc 表名
show create table 表名
表的创建
create table 表名(
字段1 类型(长度) 约束条件
字段2 类型(长度) 约束条件
.
.
)engine=存储引擎 charset=字符集;
字段名称
字段名称最好不要使用关键字,如果使用的话使用··引起来
列类型
整型
mysql数据库的基础(一)_第1张图片
浮点型
float:浮点列
mysql数据库的基础(一)
float(M,D)M:代表的是不包含小数点的总位数,D代表的是小数点之后的位数,比如float(5,2) 能存储数字的范围是-999.99到999.99,这个M和D可以不设置,如果不设置name他的范围就在float类型规定之间。
double:浮点列
mysql数据库的基础(一)
double(M,D):和float是一样的,只是存储的范围比较大
decimal(M,D):定点列,使用float和double会产生精度损失,具体原因,是因为decimal是将整数部分和小数部分分别存储的。
mysql解决精度丢失可以使用decimal类型
php解决精度丢失:https://blog.csdn.net/q0126a/article/details/84823913
不论php还是mysql尽量避免使用浮点型数据类型。
字符型
char:定长,最多存255个字节,char(10),最多只能存储10个字符,如果只存一个字符,它也是占10个字节的长度,如果没有存储到10个长度,剩余的空间会用空格填充,取出来时在去除空格,这意味着如果数据的右侧本身有空格,在取出时会被删除。利用率小于等于100%,
varchar:变长,最多存65535个字符,varchar(10)最多只能存储10个字符,如果只存一个字符,他只占一个字节,实际利用率:字符数/字符算+2,2是存储字符的长度的。
char类型是定长,索引硬盘寻址的速度较快,varchar是一个变长,在存储数据时要把它的长度也存起来,所以磁盘寻址还要先取它的长度,所以速度较char会慢。一般字符长度短我们可以使用char类型,如果字符长度比较常可以使用varchar。
一个汉字也占一个字节。
text:可以存6万多个字
mediumText:能存储的更大
longText:能存储的更大。
enum:枚举类型,比如枚举几个值,我们存值只能存枚举的几个值。但是现在用的很少,我们可以使用tinyint去代替。
时间型
year:95/1995 这种格式,存值范围1901-2155
插入数据时我们可以简写年的后两位比如:1995,我们写成95不推荐这样,因为:
00-69 他会自动+2000
70-99 他会自动+1900
所以我们写69他会存成2069。
date:格式1990-01-01 范围 1000-01-01至9999-12-31。
time:格式13:12:12 范围 -838:59:59-838:59:59
datetime:格式1990-01-01 12:00:00 ,范围:1000-01-01 00:00:00到9999-12-31 23:59:59
timestamp:时间戳,从1970-01-01 00:00:00 到现在的秒数。
一般存储时间用int类型无符号存储时间戳
无符号(unsigned):
一般用于整型和浮点型,我们存储整型或浮点型时会拿一个字节存储数字的正负符号。如果设置的unsigned,我们只能插入整数,同时能插入最大的数字增到1倍。
类型长度M
如果是整型的话,设置类型长度如果不和zerofull配合使用,则设置时毫无意义,这里容易有个误区,比如int(5) 只能添加99999一下的数字,这里是个误区,即使这样设置,决定他能存储多大的值看的是该类型占得字节长度,和类型长度无关,类型长度只是决定着能填充到位数。
零填充(zerofull)
一般用于让编号等宽比如学好是1我们可以使用零填充成00001,零填充必须要和类型的长度配合才有意义,比如tinyint(5),我们的数字为23经过零填充后成00023,如果设置了零填充的话,就决定了该列是unsigned的。
是否为空
如果可以为空设为null
如果不能让它为空设为not null。
因为null查询不方便,并且null使用索引效率不高,所以建议我们可以让字段都设为not null,然后配合default默认值使用,比如对于一些字符型我们可以设为 not null default ‘’。
主键
primary key 为了使每一行都不重复,能够区分每一行的值,我们可以为一个表设置一个主键。主键都是不重复的,不重复的不一定是主键。为了更好更方便的管理主键,我们的主键往往会配合自增长auto_increment 一起使用,这样我们在不插入主键时,他会在原来最大值的基础上增长个1(当然主键不一定都是自增长的,但是自增长都要依赖于索引或者key,每一张表只能有一个自增长)
默认值
使用default可以给字段设置一个默认值,如果不给这个字段添加一个值,这个字段可以使用默认值。
唯一约束(unique)
对当前表的某个字段添加一个唯一约束,这个表中的这个字段不允许出现重复值,其实就是唯一索引。
外键约束
只有Innodb引擎支持外键。
比如有一张班级表和一个学生表,学生表中应该有一个字段是class_id,这个class_id的数据取值应该是班级表中班级主键class_id出现的,我们可以在学生表的class_id字段上加上一个外键约束,这样如果往学生表插入一个班级表中class_id没有出现的数据会报错,学生表中的class_id我们称之为班级表的外键。增加了外键约束可以保持数据的一致性。
定义外键时除了插入数值有约束性外,我们在修改和删除时也可以设置联动操作,我们可以使用sql语句添加外键,我们也可以使用navcate添加外键。
联动操作有四个动作,如下:
CASCADE:父表delete、update的时候,子表会delete、update掉关联记录;
SET NULL:父表delete、update的时候,子表会将关联记录的外键字段所在列设为null,所以注意在设计子表时外键不能设为not null;
RESTRICT:如果想要删除父表的记录时,而在子表中有关联该父表的记录,则不允许删除父表中的记录;
NO ACTION:同 RESTRICT,也是首先先检查外键;
原文链接:https://blog.csdn.net/yajing8/java/article/details/73014004
注意:外键一般很少使用,因为只有innodb引擎可以使用外键,外键会导致数据库操作变慢,一般项目中我们不设置外键约束,我们可以使用程序来控制我们的代码。已达到外键的作用。

    表字段的添加
    alter table 表  add  字段  类型  约束条件
    表字段的修改
    alter table 表  modify  字段 类型 约束条件
    alter  table  表  change  旧字段  新字段  类型约束条件
    表字段的删除
    alter  table  表  drop 字段

mysql数据插入,删除,修改
插入数据
插入单条数据
insert into 表(字段1,字段2,....) values('value1','value2',...);
如果插入的字段数和表中的字段数量一致的话可以把字段省略掉
insert into 表 values('value1','value2',...)
插入多条数据
insert into 表(字段1,字段2,....) values('value1','value2',...),('value1','value2',...),('value1','value2',...);
字段和值一定要一一对应,字符串必须加单引号
蠕虫复制
insert into 表(字段1,字段2) select 字段1,字段2 from 表
删除数据
delete from 表 where 条件 这个条件和查询的条件一样
truncate 表 将表进行初始化操作
修改数据
update 表 set 字段1=‘值1’ ,字段2=‘值2’ where 条件 条件和查询的条件一样。
删除和修改不加条件就是作用在所有的行。