数据库 —— MySQL 01
数据库 —— MySQL 02
数据库 —— Java操作MySQL
1、岗位需求,现在招聘Java开发基本都会要求掌握数据库。
2、现在的世界就是大数据时代,得数据者得天下,而数据库在这之中起到重要作用。
3、有存储数据的需求。
4、数据库是所有软件体系中最核心的存在,甚至专门的人员DBA。
数据库(DB,DataBase)就是一个数据仓库,是安装在操作系统上的(Windows、Linux、mac),能够跨平台,存储和管理数据(500万以下随便存,之上需要优化)。
关系型数据库(SQL):
非关系型数据库(NoSQL,not only SQL):
DBMS(数据库管理系统)
1、在任务管理器中停止MySQL服务
2、卸载所有应用
3、删除三个文件夹中所有相关文件
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进行删除。
这里安装5.7版本,因为.exe卸载比较麻烦,这里使用.zip安装。
这是CSDN链接:mysql-5.7.33-winx64.zip
百度网盘:https://pan.baidu.com/s/16fNpMkGeXZud-U58Z5y67g 提取码: q3eq
1、解压到相应位置
2、在控制面板—高级系统设置—高级—环境变量中的系统变量 Path 里添加刚刚解压的bin目录。
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的命令)
5、再输入输入命令 mysqld --initialize-insecure --user=mysql ,进行了这一步会生成上面的data文件夹。
注意:如果出现The Service already exists
,说明之前安装的MySQL没有删除干净。重新以管理员运行cmd,输入sc query mysql
,查看到有名为mysql的服务,输入sc delete mysql
删除即可。
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后面没有空格)
SQLyog是一个SQL的可视化界面,下载链接:SQLyog-13.1
百度网盘:https://pan.baidu.com/s/16fNpMkGeXZud-U58Z5y67g 提取码: q3eq
下面对其进行一些基本操作:
MySQL关键字不区分大小写,注意每次操作后都得刷新以下才能看到效果(右键数据库刷新)
下面的命令都通过鼠标选中后,点击左上角运行。
--创建数据库,其中 IF NOT EXISTS是可选语句,判断是否存在该数据库
CREATE DATABASE IF NOT EXISTS firstDatabase;
--删除数据库
DROP DATABASE IF EXISTS school;
--使用数据库
USE firstDatabase;
--显示所有数据库
SHOW DATABASES;
1、数值:
2、字符串:
3、时间:
4、null
创建表的时候,会有下面这些属性。(注意:我们设计的都是表的列,每一行是一个整体数据)
Unsigned:表示无符号整数,若勾选则该列不能为负数。
Zerofill:若勾选,则不足的位数用0填充。
自增:整数列才能选。自动在上一条基础上+1(默认+1,可以改),通常用来设计唯一的主键。
非空:若勾选,则内容不能为null。(注意,若是空字符串是可以的,” “)。
默认:设置默认值。
格式:
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表命令,可以得到前面写的创建表语句,以后就可以直接复制修改。
现在默认使用INNODB,早些年使用的是MYISAM。
MYISAM | INNODB | |
---|---|---|
事务支持 | 不支持 | 支持 |
数据行锁定 | 不支持 | 支持 |
外键约束 | 不支持 | 支持 |
全文索引 | 支持 | 不支持 |
表空间的大小 | 较小 | 较大(约为MYISAM两倍) |
常规使用操作:
所有的数据库文件都存在data目录下,一个文件夹就对应一个数据库。
MySQL引擎在物理文件上的区别:
关于字符集设置:
创建表的时候 charset=ut8
不设置的话,会是MySQL默认的字符集编码(Latin1),但不会支持中文!
也可以在my.ini中配置默认编码:
character-set-server=utf8
但如果别人用这个数据,而没有写这个配置就会出现中文乱码,所以依然推荐在建表时设置字符集。
修改表
-- 修改表: 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;
所有的创建和删除操作尽量加上判断,以免报错!
外键的作用是将两个表的同一个属性绑定到一起,例如现在有学生表和年级表,学生表中有属性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`);
方式三:
上面这两种方式都是数据库级别的外键,使得数据操作、测试、删除表等比较麻烦,后面真正实践中不会通过建立外键,而是进行程序级别的实现同样效果,这种方式了解即可。
DML语言,即数据操作语言,实现对数据的存储和管理。包括添加insert、修改update、删除delete。
语法: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');
对左侧栏的表,右键打开,结果:
语法: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';
先刷新,再看结果:
语法:delete from 表名 [where 条件]
-- 删除数据
delete from `student` where id = 1;
-- 不带条件则删除所有数据
DELETE FROM `student`;
语法:truncate 表名
-- 完全清空表所有数据
TRUNCATE `student`;
truncate 和 delete的区别:
了解delete删除表的问题:在用delete不带条件清空表中所有数据后,若重启数据库,会发生一些现象。如果表是INNODB类型,自增序列就会从1开始(存在内存中,断点即失),如果表是MYISAM则会继续从上一个增量开始(存在文件中,不会丢失)。