数据库 —— MySQL 01

系列文章

数据库 —— MySQL 01
数据库 —— MySQL 02
数据库 —— Java操作MySQL



一、初识数据库

1.1、为什么学数据库

1、岗位需求,现在招聘Java开发基本都会要求掌握数据库。

2、现在的世界就是大数据时代,得数据者得天下,而数据库在这之中起到重要作用。

3、有存储数据的需求。

4、数据库是所有软件体系中最核心的存在,甚至专门的人员DBA。

1.2、什么是数据库

数据库(DB,DataBase)就是一个数据仓库,是安装在操作系统上的(Windows、Linux、mac),能够跨平台,存储和管理数据(500万以下随便存,之上需要优化)。

1.3、数据库分类

关系型数据库(SQL):

  • MySQL、Oracle、SQL Server…
  • 通过表和表之间、行和列之间的关系进行数据的存储,例如学员信息表、考勤表…

非关系型数据库(NoSQL,not only SQL):

  • Redis、MongDB
  • 非关系型就不是通过表和列之间的关系来存储,而是通过对象自身的属性来决定,存储一个对象。

DBMS(数据库管理系统)

  • DBMS就是一款数据库的管理软件,能够科学有效的管理我们的数据库,维护和获取数据。

  • MySQL是数据库,同时它也是数据库管理系统,能够操作数据库。

    DBMS

1.4、MySQL简介以及安装

  • MySQl前身是MySQL AB公式开发,如今属于Oracle旗下产品。
  • MySQL是最流行的关系型数据库管理系统之一。
  • MySQL是开源的数据库软件,体积小、速度块、成本低。
     

1.4.1、卸载

1、在任务管理器中停止MySQL服务

MySQL卸载1

2、卸载所有应用

MySQL卸载2

3、删除三个文件夹中所有相关文件

MySQL卸载3

4、删除注册信息

MySQL卸载4

删除注册表下面内容:

  • 删除HKEY_LOCAL_MACHIN->ControlSet001->SYSTEM-> service->MySQL;

  • 删除HKEY_LOCAL_MACHINE->ControlSet002-> SYSTEM-> services->MySQL;

  • 删除HKEY_LOCAL_MACHINE->CurrentControlSet-> SYSTEM-> services->MySQL

若没有则已经卸载干净,或者直接在注册表中Ctrl+F搜索MySQL进行删除。
 

1.4.2、安装

这里安装5.7版本,因为.exe卸载比较麻烦,这里使用.zip安装。这是链接:mysql-5.7.33-winx64.zip

1、解压到相应位置

2、在控制面板—高级系统设置—高级—环境变量中的系统变量 Path 里添加刚刚解压的bin目录。

安装1

3、在MySQL目录下添加配置文件my.ini并修改内容。

[mysqld]
#下面的目录要改成自己的,注意末尾有\,
#data文件夹会自动生成,不要去新建。
basedir=F:\Environment\mysql-5.7.33-winx64\
datadir=F:\Environment\mysql-5.7.33-winx64\data\
port=3306
skip-grant-tables

4、启动==管理员模式下的CMD==,并将路径切换到mysql下的bin目录,然后输入mysqld -install(这是安装MySQL的命令)

CMD

5、再输入输入命令 mysqld --initialize-insecure --user=mysql ,进行了这一步会生成上面的data文件夹。

1612159857855

6、输入 net start mysql 启动MySQL服务。

启动服务

7、输入命令 mysql -u root -p,进入mysql管理界面。【-p后面不能有空格,初试密码为空,直接回车】

8、进入界面后修改root密码

update mysql.user set authentication_string=password('123456') where user='root' and Host='localhost';
修改密码

(成功后刷新权限 flush privileges; )

如果失败了,可能是命令最后的分号没加。

9、修改my.ini文件,删除最后一句话,或者注释掉(用#)。

10、退出MySQL并重启服务:先用 exit 退出,再用 net stop mysql停止服务,最后用 net start mysql启动服务。

11、最后检查一遍,重新进入MySQL:输入mysql -u root -p123456 (-u表示用户,-p表示密码,注意-p后面没有空格)

验证MySQL

1.4.3、SQLyog

SQLyog是一个SQL的可视化界面,下载链接:SQLyog-13.1

SQLyog

下面对其进行一些基本操作:

  1. 创建数据库:在左侧栏右键创建数据库,选择基础符集和排序规则。

    创建数据库
  2. 创建表:在左侧新建表,一般字符串类型用varchar,写注释是个好习惯。
    在这里插入图片描述

  3. 插入表:右键表格选择打开表,然后在下方表格双击插入数据。

修改表

二、SQL

MySQL关键字不区分大小写,注意每次操作后都得刷新以下才能看到效果(右键数据库刷新)

下面的命令都通过鼠标选中后,点击左上角运行。

执行

2.1、操作数据库

--创建数据库,其中 IF NOT EXISTS是可选语句,判断是否存在该数据库
CREATE DATABASE IF NOT EXISTS firstDatabase;
--删除数据库
DROP DATABASE IF EXISTS school;
--使用数据库
USE firstDatabase;
--显示所有数据库
SHOW DATABASES;

2.2、数据库的数据类型

1、数值:

  • tinyint,十分小的数据,4一个字节
  • smallint,较小的数据,两个字节
  • mediumint,中等大小,三个字节
  • int,标准整数,四个字节(常用)
  • bigint,较大数据,八个字节
  • float,四个字节浮点数(常用)
  • double,八个字节浮点数
  • decimal,字符串形式的浮点数(金融计算会用,解决浮点数精度问题)

2、字符串:

  • char,0~255的字符串
  • varchar,0~65535长度的可变字符串(常用变量)
  • tinytext,微型文本,2^8-1
  • text,文本串,2^16-1(保存大文本)

3、时间:

  • date,YYYY-MM-DD,日期
  • time,HH:mm:ss时间格式
  • datetime,YYYY-MM-DD HH:mm:ss(最常用时间格式)
  • timestamp ,时间戳,1970.1.1到现在的毫秒数!(也较为常用)
  • year,年份表示

4、null

  • 没有值,未知
  • 不要使用null进行运算

2.3、字段属性

创建表的时候,会有下面这些属性。(注意:我们设计的都是表的列,每一行是一个整体数据)

字段属性

Unsigned:表示无符号整数,若勾选则该列不能为负数。

Zerofill:若勾选,则不足的位数用0填充。

自增:整数列才能选。自动在上一条基础上+1(默认+1,可以改),通常用来设计唯一的主键。

非空:若勾选,则内容不能为null。(注意,若是空字符串是可以的,” “)。

默认:设置默认值。

2.4、创建表

格式:

create table `表名` [IF NOT EXISTS](
    `字段` 列类型 [属性] [注释]`字段` 列类型 [属性] [注释]primary key(`字段`)
) [表类型] [字符集设置] [注释]

注意:表名和字段那个不是单引号,是键盘ESC下面的那个。[ ]是可选项。

-- NOT NULL 非空,AUTO_INCREMENT 自增,COMMENT 注释(内容用单引号括起来),DEFAULT 默认值,
-- primary key(`主键名`),注意里面不是单引号,是键盘ESC下面那个

CREATE TABLE IF NOT EXISTS `student` (
	`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
	`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
	`pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码',
	`sex` VARCHAR(2) NOT NULL DEFAULT '男' COMMENT '性别',
	`birthday` DATETIME DEFAULT NULL COMMENT '出生日期',
	`address` VARCHAR(100) DEFAULT NULL COMMENT '家庭住址',
	`email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
	PRIMARY KEY(`id`)
) ENGINE=INNODB CHARSET=utf8;

常用命令:

show create database --查看创建数据库的语句
show create table student --查看student数据表的定义语句
desc student --显示表的结构

通过查看student表命令,可以得到前面写的创建表语句,以后就可以直接复制修改。

2.5、数据表的类型

现在默认使用INNODB,早些年使用的是MYISAM。

MYISAM INNODB
事务支持 不支持 支持
数据行锁定 不支持 支持
外键约束 不支持 支持
全文索引 支持 不支持
表空间的大小 较小 较大(约为MYISAM两倍)

常规使用操作:

  • MYISAM 节约空间,速度较快。
  • INNODB 安全性高,支持事物处理,支持多表多用户操作。

所有的数据库文件都存在data目录下,一个文件夹就对应一个数据库。

对应数据库2 对应数据库1

MySQL引擎在物理文件上的区别:

  • INNODB的表,在数据库文件中只有一个*.frm文件,以及上级目录下的 ibdata1 文件。
  • MYISAM则对应三个文件:.frm表结构定义文件、.MYD数据文件、.MYI索引文件
引擎区别

关于字符集设置:

创建表的时候 charset=ut8

不设置的话,会是MySQL默认的字符集编码(Latin1),但不会支持中文!

也可以在my.ini中配置默认编码:

character-set-server=utf8

但如果别人用这个数据,而没有写这个配置就会出现中文乱码,所以依然推荐在建表时设置字符集。

2.6、修改删除表

修改表

-- 修改表: alter table 旧表名 rename as 新表名
ALTER TABLE `test` RENAME AS test2;

-- 增加表的字段:alter table 表名 add 字段名 列属性
ALTER TABLE `test2` ADD `age` INT(3);

-- 修改表的字段 
-- 修改约束(属性)alter table 表名 modify 字段名 列属性[]
ALTER TABLE `test2` MODIFY `id` INT(10);
-- 修改字段名 alter table 表名 change 旧名 新名 列属性[]
ALTER TABLE `test2` CHANGE `id` `id2` INT(10);

-- 删除表的字段 alter table 表名 drop 字段名
ALTER TABLE `test2` DROP age;

删除表

-- 删除表(如果存在再删除)
DROP TABLE IF EXISTS test2;

所有的创建和删除操作尽量加上判断,以免报错!

三、MySQL数据管理

3.1、外键(了解即可)

外键的作用是将两个表的同一个属性绑定到一起,例如现在有学生表和年级表,学生表中有属性gradeid,而年级表的主键是gradeid,因此学生表的gradeid必须是年级表中已经有的gradeid,如果学生表的gradeid不属于年级表,则会出错。这就是将学生表的gradeid绑定到年级表的gradeid上。

方式一:在建表时加入外键

- 外键方式1
CREATE TABLE `grade`(
	`gradeid` INT(11) NOT NULL AUTO_INCREMENT COMMENT '年纪ID',
	`gradename` INT(50) NOT NULL COMMENT '年级名称',
	PRIMARY KEY(`gradeid`)
)ENGINE=INNODB CHARSET=utf8;

CREATE TABLE `student`(
	`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '学生学号',
	`name` VARCHAR(30) NOT NULL COMMENT '学生姓名',
	`gradeid` INT(2) NOT NULL COMMENT '年级ID',
	PRIMARY KEY(`id`),
	-- 下面是创建外键
	KEY `FK_gradeid` (`gradeid`),
    -- 下面是将该表的键 FK_gradeid 绑定到 grade表的gradeid上
	CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade`(`gradeid`)
)ENGINE=INNODB CHARSET=utf8;

删除表时,只能先删除student表,再删除grade表。

方式二:在新建好上面两个表后,通过修改学生表字段来添加外键。

-- 方式二
ALTER TABLE `student`
ADD CONSTRAINT `FK_gradeid` FOREIGN KEY(`gradeid`) REFERENCES `grade`(`gradeid`);

方式三:

外键

上面这两种方式都是数据库级别的外键,使得数据操作、测试、删除表等比较麻烦,后面真正实践中不会通过建立外键,而是进行程序级别的实现同样效果,这种方式了解即可。

3.2、DML语言(重点)

DML语言,即数据操作语言,实现对数据的存储和管理。包括添加insert、修改update、删除delete。

3.2.1、添加

语法:insert into 表名 ([字段名1, 字段名2]) values(‘值1’,‘值2’,‘值3‘)

-- 插入数据
CREATE TABLE IF NOT EXISTS `student` (
	`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
	`name` VARCHAR(30) NOT NULL  COMMENT '姓名',
	`pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码',
	`sex` VARCHAR(2) NOT NULL DEFAULT '男' COMMENT '性别',
	PRIMARY KEY(`id`)
) ENGINE=INNODB CHARSET=utf8;

-- 常规方式插入
INSERT INTO `student` (`id`, `name`, `pwd`, `sex`) VALUES(10001, '小白', '1111', '男');
-- 不带字段名,则必须按一一对应的方式插入
INSERT INTO `student` VALUES(10002, '小红', '2222', '女');
-- 由于id设置了自增,因此可以省略id,但其他字段必须一一对应,所以需要写上字段
INSERT INTO `student` (`name`, `pwd`, `sex`) VALUES('小黄', '3333', '男');
-- 由于pwd和sex有默认值,因此也可以不填
INSERT INTO `student` (`name`) VALUES('小蓝');
-- 一次插入多个数据
INSERT INTO `student` (`name`, `pwd`) 
VALUES('小A', '4444'),('小B','5555'),('小C','6666');

对左侧栏的表,右键打开,结果:

插入表

3.2.2、修改

语法:update 表名 字段名 = 值 [条件]

-- 修改数据
-- 不加条件,会把student表中所有sex设置为女
UPDATE `student` SET `sex`='女';
-- 增加条件,把student表中id=10001的设置为男
UPDATE `student` SET `sex`='男' WHERE `id`=10001;
-- 将student表中id在[10002,10004]区间的密码设置为 0000
UPDATE `student` SET `pwd`='0000' WHERE `id` BETWEEN 10001 AND 10004;
-- 将 student 表中 id大于等于3且密码不为0000的姓名设置为小小,pwd设置为1111
UPDATE `student` SET `name`='小小', `pwd`='1111' WHERE id>=3 AND `pwd` != '0000';

先刷新,再看结果:

更新表

3.2.3、删除

语法:delete from 表名 [where 条件]

-- 删除数据
delete from `student` where id = 1;
-- 不带条件则删除所有数据
DELETE FROM `student`;

语法:truncate 表名

-- 完全清空表所有数据
TRUNCATE `student`;

truncate 和 delete的区别:

  • 相同点:都能删除数据。
  • 不同:
    • truncate 会删除表中的自动增量记录,也不会影响事务。
    • delete 不会删除表的自动增量记录,下次插入数据的增量不会归零。

了解delete删除表的问题:在用delete不带条件清空表中所有数据后,若重启数据库,会发生一些现象。如果表是INNODB类型,自增序列就会从1开始(存在内存中,断点即失),如果表是MYISAM则会继续从上一个增量开始(存在文件中,不会丢失)。

猜你喜欢

转载自blog.csdn.net/qq_39763246/article/details/113578690