Mysql数据库

数据库

  • 数据库【按照数据结构来组织、存储和管理数据的仓库】,是一个长期存储载计算机内的、有组织的、可共享的、统一管理的大量数据的集合。
  • 数据对于公司来说最宝贵的财富,程序员的工作就是对数据进行管理,包括运算、流转、存储、展示等,数据库最重要的功能就是【存储数据】,长期保存数据。

Mysql

  • MySQL是一个【关系型数据库管理系统】,瑞典的公司研发,被【Oracle】收购。
  • MySQL使用了一种语言【SQL语言】来进行数据的管理。
  • MySQL分为社区版和商业版,Community -- 体积小、速度快、成本低、开源。

基本操作

MySQL保存数据的模式

1.创建一个数据库

2.在数据库中保存多张表

3.在每张表中保存多数据

登录MySQL

mysql - h 127.0.0 - p3306 -uroot - proot

MySQL是一个数据库管理系统,管理多个数据库。

创建一个数据库:

create database 数据库名;
create schema 数据库名;

查看所有的数据库:

show databases;

使用数据库:

use 数据库名;

用来存储数据的对象,是有结构的数据的集合。

  • 行:一行即为一条数据,数据库一共有多少条数据,实际上就有几行数据。
  • 列:一列即为一个字段,数据库一共有多少个字段,实际上就有几列数据。

SQL语言

SQL是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存储数据以及查询、更新和管理关系型数据库系统。

SQL分类

  • DCL(data control language):数据控制语言,用来定义访问权限和安全级别。
  • DDL(data definition language):数据定义语言,用来定义数据库对象 -- 库、表、字段(列),功能 -- 创建、删除、修改库和表结构。
  • DML(data manipulation language):数据操作语言,用来定义数据的增删改记录。
  • DQL(data query language):数据查询语言(重点),用来查询记录。
  • TCL(transition control language):事务控制语言,用来管理事务。

DCL(数据控制语言)

  • 创建用户

创建一个用户,该用户只能在指定的ip低智商登录MySQL:

create user 用户名@ip地址 identified by  ‘密码’;

创建一个用户,该用户可以在任意ip地址上登录MySQL:

create user  ‘moon’@‘%’ identified by ‘root’;

修改密码:

--- 5.7版本需要使用password对密码进行加密
set password for moon@‘%’ = password(‘新密码’);
---8.0版本直接赋值
set password for moon@‘%’ = ‘新密码’;
  • 给用户授权

给指定用户在指定数据库上赋予指定权限,权限有很多,列举几个常用的:

  1. create:可以创建数据库
  2. select:查阅数据
  3. delete:删除数据
  4. update:修改数据
  5. insert:插入数据
--- 语法:grant `权限1,权限2,…,权限n` on 数据库名.* to 用户名@IP地址
grant select.insert.update.delect.create on 'jsoft'.'user' to 'moon'@'%';

注意:这里用的是着重符 ` ,不是单引号

  • 撤销授权
---语法:revoke 权限1,... ,权限n on 数据库名.* from 用户名@IP地址
revoke all on 'jsoft'.* from 'moon'@'%';
  • 查看权限

查看指定用户的权限

---语法:show grants for 用户名@IP地址
show grants for 'moon'@'%';
  • 删除用户
---语法:drop user 用户名@IP地址
drop user for 'moon'@'%';

DDL(数据定义语言)

DDL主要是用在定义或改变表的结构

  • 创建表
create table 表名{
      字段名1(列名) 类型(长度) 约束条件,
      字段名2(列名) 类型(长度) 约束条件,
      字段名3(列名) 类型(长度) 约束条件,
    .......
}

在关系型数据库中,我们需要这项表名和列名,同时设定。

  • 数据类型

整型

mysql库存数量表_MySQL

unsigned关键字,定义成无符号类型,tinyint unsigned的取值范围0~255。

如果长度需要配合zerofill:

int(4) unsigned zerofill;

说明:上述的int长度为4,如果设置了zerofill,如果数据是1,最终存到表格中的数据格式为0001,0010。

浮点型

mysql库存数量表_数据库_02

 比如定义一个float(5,3):

  • 插入123.45678,最后查询得到的结果就说99.999
  • 插入12.345678,最后查询得到的结果就是12.346

所以,在使用浮点型的时候,要以插入到数据库中的实际结果为准。

字符串类型

mysql库存数量表_mysql库存数量表_03

(1)char和varchar的区别:

  • char类型是【定长】的类型,当定义char【10】,输入的是“123”,它们占用的空间依然是10个字符,当输入的字符如果超出指定的范围,char会截取超出的字符,而且,当存储char,MySQL会自动删除输入字符串末尾的空格。
  • char适合存储很短的,一般固定长度的字符串。例如,char非常适合存储密码MD5值,因为它是一个定长的值,对于端的列,char比varchar在存储空间上效率更高。
  • varchar类型用来存储可变长度,长度最大为n个字符的可变长度的字符串数据,比如varchar(10),然后存储“abc”,实际就说存储了3个字符。
  • char类型每次修改的数据长度相同,效率更高,varchar每次修改的数据长度不同,效率更低。

(2)varchar和text的区别:

  • text不能设置默认值,varchar可以设置默认值。
  • text类型,由于单表的最大行宽的限制,支持溢出存储,只会存放768字节在数据页中,剩余的数据存储在溢出段中。
  • 一般我们都是用varchar

日期类型

mysql库存数量表_数据库_04

 

 

  •  建表约束

因为一张表要有多个列,数据库中的表不止有一张,建表约束说的就是我们应该如何规范表中数据以及表之间的关系

MySQL约束类型

mysql库存数量表_MySQL_05

 

 

 (1)NOT NULL约束

mysql库存数量表_数据_06

 

 

 (2)UNIQUE约束

mysql库存数量表_数据_07

 

 

 (3)主键约束

用多个列来共同当主键

mysql库存数量表_数据_08

 

 

 (4)外键约束

配合主键去使用,有了这个约束,我们在向表中插入数据时,来源于另外一张表的主键,外键会产生的效果:

  1. 删除表的时候,如果不删除引用外键的表,被引用的表是不能直接删除。
  2. 外键的值必须来源于引用的表的主键字符

mysql库存数量表_MySQL_09

在创建表的时候,建议字段名使用着重符。

  •  对表的修改操作

 查看当前库中的所有表:

show tables;

查看表结构:

desc 表名;

修改表有5个操作,但是前缀都是一样的 alter table 表名...

添加列

ALTER table author add(hobby varchar(20),address varchar(50));

修改列

ALTER table author MODIFY address varchar(100);

修改列名称和数据类型

alter table author change address addr VARCHAR(60);

删除列

alter table author drop addr

修改表名

alter table author rename `authors`;

着重符 -- 区分关键字

删除表

drop table if EXISTS `user`;//判断是否存在

添加主键

alter table 表名 ADD CONSTRAINT 主键名(pk_表名) primary key 表名(字段名);
alter table `authors` ADD CONSTRAINT pk_authors PRIMARY KEY `authors`(aut_id);

添加外键

alter table 从表 add constraint 外键名(fk_从表_主表) foreign key 从表(外键字段) REFERENCES 主表(关键字段);
alter table book add constraint fk_book_authors foreign key book (aut_id) REFERENCES `authors` (aut_id);

DML(数据操作语言)

该语言来对表记录进行操作(增、删、改),不包含查询

  • 插入数据
//增
insert into `authors`(列名1,列名2,列名3,...) VALUES('信息1','信息2','信息3',...);
desc `authors`;

如果插入的是全字段,字段名可以省略(列名=字段名)

insert into `authors` VALUES('信息1','信息2','信息3',...);
desc `authors`;

说明:

  1. 在数据库中所有的字符串类型,必须使用引号
  2. 如果部分字段插入,必须列名和值要匹配。如果全字段插入,则列名可以省略。

批量插入

insert into
  • 修改数据

修改某列的全部的值:

update `authors` set aut_name = 'gxs',country = 'zg';

修改特定行的数据:

update `authors` set aut_name = 'gxs',country = 'zg' where aut_id =1;

where是一个关键字,我们可以使用where关键字实现丰富的筛选,它很像我们的if语句,可以使用各种复杂的条件运算:

  • =(没有==和equals)
  • !=
  • >  
  • where aut_id>1  
  • <
  • >=
  • <=
  • <>不等于
  • between ... and
  • where aut_id between 1 and 4  
  • where aut_id>1 and aut_name = 'xxx'
  • in(...)
  • where aut_id in(1,3,5)
  • is null
  • where name is null
  • not
  • where name is not null
  • ...
  • 删除数据

全部删除:

delete from `student`;

根据条件删除:

delete from `authors` where aut_id = 8;

说明:通过delete这种删除方式删除的数据,主键如果是自动递增,会断档。

截断(清空表):

truncate student;

说明:

truncate实际上应该属于DDL语言,操作立即生效,不能撤回。

  • truncate和delete都是删除数据,drop删除整个表。
  • truncate速度快,效率高,可以理解为直接删除整个表,再重新建立。
  • truncate和delete都不会是表结构及其列、约束、索引的发生改变。