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@‘%’ = ‘新密码’;
- 给用户授权
给指定用户在指定数据库上赋予指定权限,权限有很多,列举几个常用的:
- create:可以创建数据库
- select:查阅数据
- delete:删除数据
- update:修改数据
- 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(列名) 类型(长度) 约束条件,
.......
}
在关系型数据库中,我们需要这项表名和列名,同时设定。
- 数据类型
整型
unsigned关键字,定义成无符号类型,tinyint unsigned的取值范围0~255。
如果长度需要配合zerofill:
int(4) unsigned zerofill;
说明:上述的int长度为4,如果设置了zerofill,如果数据是1,最终存到表格中的数据格式为0001,0010。
浮点型
比如定义一个float(5,3):
- 插入123.45678,最后查询得到的结果就说99.999
- 插入12.345678,最后查询得到的结果就是12.346
所以,在使用浮点型的时候,要以插入到数据库中的实际结果为准。
字符串类型
(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约束类型
(1)NOT NULL约束
(2)UNIQUE约束
(3)主键约束
用多个列来共同当主键
(4)外键约束
配合主键去使用,有了这个约束,我们在向表中插入数据时,来源于另外一张表的主键,外键会产生的效果:
- 删除表的时候,如果不删除引用外键的表,被引用的表是不能直接删除。
- 外键的值必须来源于引用的表的主键字符
在创建表的时候,建议字段名使用着重符。
- 对表的修改操作
查看当前库中的所有表:
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`;
说明:
- 在数据库中所有的字符串类型,必须使用引号
- 如果部分字段插入,必须列名和值要匹配。如果全字段插入,则列名可以省略。
批量插入
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都不会是表结构及其列、约束、索引的发生改变。