以下为第三阶段,MySQL数据库的学习,之前屯的第二阶段html、js、jquery会同步更新
数据库
何为数据库
简单来书:就是将数据持久化,存储数据并加以管理的仓库
DB(Database)数据库,另外,还有常见的DBMS表示数据库管理系统(Database Management System)。
常见的数据库
早期发展的数据库建立在数据的紧密关系之上(如:父子关系)我们称其为关系型数据库
现今数据库建也有建立在数据的松散关系基础之上,随着时代发展,传统的关系型数据库虽无法被替代,但也不再是一家独大。
关系型数据库(), Oracle、MySQL、SQLServer
非关系型数据库(), MongoDB、Redis、ElasticSearch、Hive、HBase
MySQL数据库安装
如下如所示,根据自己电脑的操作系统(64或32位下载对应的数据库版本)
下载完成后,找到以前我们说过的,将自己的工作需要的软件放在一起。
然后开始安装:
1、解压mysql-8.0.26-winx64.zip
2、将my.ini文件解压之后的mysql-8.0.26-winx64目录下
3、修改my.ini文件
设置为你的mysql的安装目录
basedir=F:\development\mysql-8.0.26-winx64
# 设置mysql数据库的数据的存放目录
datadir=F:\development\mysql-8.0.26-winx64\data
注意事项修改成自己的安装路径,不要照抄
4、需要在系统环境变量path中添加mysql路径
以前配过java的环境变量,不会的找找
5、然后在mysql的bin目录下打开cmd命令
一、执行MySQL安装命令:mysqld --initialize --console
二、在执行安装MySQL服务命令:mysqld --install
三、执行启动MySQL服务的命令 net start mysql
四、执行修改密码命令 mysqladmin -uroot -p password
修改密码后改成自己记得住的,123456其实就可以,有需要以后再改
同样操作下载安装SQLyog
文件放个人主页了。
安装完毕。
简单SQL语句
SQL是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。
SQL和JAVA不一样,SQL不区分大小写
SQL语句分类:
- DDL(Data Definition Language)数据库定义语言
如:create table之类
#DDL数据定义语言
#创建数据库
CREATE DATABASE IF NOT EXISTS myschool;
#删除数据库
DROP DATABASE IF EXISTS myschool;
#创建表,(如果字段名或表名 与关键字冲突,加反引号)
#UNSIGNED:无符号,必须写在 PRIMARY KEY 之前
#ZEROFILL:0填充 ,必须写在 PRIMARY KEY 之前
#PRIMARY KEY:主键
#AUTO_INCREMENT:自增
#COMMENT'' :注释
#NOT NULL:不能为空
#AUTO_INCREMENT=10:初始值
CREATE TABLE IF NOT EXISTS employ(
employNo INT(4) ZEROFILL UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY
COMMENT'工号',
employName VARCHAR(10) NOT NULL COMMENT'姓名',
sex CHAR(2) NOT NULL COMMENT'性别',
bornDate DATETIME COMMENT'出生日期'
)CHARSET=utf8 AUTO_INCREMENT=10
#设置步长
SET auto_increment_increment=6;
#查看表结构
DESC employ;
#显示表创建语句
SHOW CREATE TABLE employ;
#修改表名
ALTER TABLE employ RENAME AS employee;
#添加字段
ALTER TABLE employee ADD phone VARCHAR(11) NOT NULL;
#修改字段的属性
ALTER TABLE employee MODIFY phone VARCHAR(20);
#同时修改字段名和属性
ALTER TABLE employee CHANGE phone telphone VARCHAR(11);
#删除字段
ALTER TABLE employee DROP telphone;
#删除表
DROP TABLE IF EXISTS employee;
- DML(Data Manipulation Language)数据操纵语言
如:insert,delete,update,select(插入、删除、修改、检索)简称CRUD操新增Create、查询Retrieve、修改Update、删除Delete
#DML,数据操作语句,数据增加、修改、删除-》 数据更新
#增加数据INSERT into 表名(字段1,字段2)values(字段值1,字段值2);
#主键自增,不需要添加数据
INSERT INTO employee(`employName`,`sex`,`bornDate`)VALUES('海豹','公','2000-1-1');
#nullable,可以为空
INSERT INTO employee(`employName`,`sex`)VALUES('张三','男');
#添加多行数据
INSERT INTO employee(`employName`,`sex`,`bornDate`)
VALUES('脖子','男','2000-1-2'),('门子','男','1999-9-9'),('手机','男','2000-10-12');
#修改数据 UPDATE 表名 set字段名1=字段值2,字段名2=字段值2 where
#不加条件改整列值
UPDATE employee SET `employName`="大门子" WHERE `employName`='张三';
UPDATE `employee` SET sex='女' WHERE `employNo` BETWEEN 13 AND 26;
UPDATE `employee` SET sex='男' WHERE `employNo`>=13 AND `employNo`<=26;
#将姓名是张三,并且性别为男的名字 改了
UPDATE `employee`SET`employName` = 'K40手机' WHERE`employName`='手机' AND `sex`='男';
#!!!————————切记————————!!!
#删除数据,不加where条件 是清空数据
DELETE FROM `employ` WHERE `employName`='门子';
#!!!————————切记————————!!!
#清空数据,初始值会重置
TRUNCATE TABLE `employ`;
#把student : 子表或从表
#grade 做成主表
#添加外键并命名
ALTER TABLE student
ADD CONSTRAINT FOREIGN KEY
fk_gradeId
(GradeId) REFERENCES grade(GradeID);
#删除大三的数据,先删除从表,再删除主表
DELETE FROM student WHERE gradeId=3;
DELETE FROM grade WHERE gradeId=3;
#添加数据
#先添加 主表数据 再改从表数据
INSERT INTO grade(gradeID,gradeName)VALUES(6,"研三");
INSERT INTO student (StudentNo,StudentName,GradeId,Phone,Address,Email)
VALUES(1003,"李四",6,"1350000001","北京西城区","1651@qq.com") ;
- DQL(Data Query Language)数据库查询语言
如: select 语法
#DQL,数据查询语句,数据查询.............................................
#查询所有字段, 不建议用 * ,会增加网络开销
SELECT * FROM student;
#查询部分字段
SELECT studentName,studentNo,sex FROM student;
#字段起别名(有点像局部变量名?)
SELECT studentName AS 姓名,studentNo学号 FROM student;
#拼接
SELECT CONCAT('姓名:',studentName)AS 姓名,studentNo学号 FROM student;
#查询 学号在1-90000之间的
SELECT * FROM student WHERE studentNo BETWEEN 1 AND 90000;
#查询 地址
SELECT * FROM student WHERE address='河南郑州' OR address='河南信阳';
SELECT * FROM student WHERE address IN('河南郑州','河南信阳');
#模糊查询
#查询姓李的, %代表字符串
SELECT * FROM student WHERE StudentName LIKE '李%';
#查询李xx, _代表单个字符串
SELECT * FROM student WHERE StudentName LIKE '李_';
#去重 同名人只显示一个
SELECT * FROM `StudentName`,`Sex` FROM student WHERE `StudentName` = '';
#select 跟表达式
SELECT 3*100 结果,VERSION,10+20;
#查询日期
SELECT * FROM student WHERE BornDate>'2021-01-01';
#查询姓名(student) 以及 所属班级(grade)名称,等值连接
SELECT studentName,GradeName
FROM student,grade
WHERE student.`GradeId` = grade.`GradeID`
#查询李梅的姓名(student),所属班级(grade)名称,考试成绩,等值连接
#不推荐使用
SELECT s.studentName , g.gradeName, r.ExamResult
FROM student s,grade g, result r
WHERE s.'GradeId' = g.`GradeID`
AND s.`StudentNo`=r.`studentNo`
#常用
SELECT s.studentName , g.gradeName, r.ExamResult
FROM student s
INNER JOIN grade g ON s.`GradeId`=g.`GradeID`
INNER JOIN result r ON s.`StudentNo`=r.‘studentNo`
#自连接存储一张类别表,菜单
#查询子菜单及 所属父级菜单名称,自连接同时充当子表和父表
SELECT c.categoryName,p.categoryName
FROM category c
INNER JOIN category p
ON c.pid = p.categoryId;
- DCL(Data Control Language)数据库控制语言
导出数据库,右键-》 备份/导出
导入数据库,右键-》 执行sql脚本
内连接、左连接、右连接
内连接:
内连接件就是我们平时使用的普通连接,关键字:inner join on
语句:
select * from table1 a
inner join table2 b
on a.id = b.id;
用 inner join on的:
#内连接查询方式:
#加 inner join on
SELECT s.studentNo ,g.GradeName
FROM Student s INNER JOIN Grade g
ON s.`GradeId` = g.`GradeId`;
不加 inner join on的:
#不加inner join on:
SELECT s.`studentNo`,g.`GradeName`
FROM student s ,grade g;
通俗来说:内连接查询到的数据,只能获取两个表的交集部分,杠杠的代码来说:
将Student表 与 Grade表连接(inner join),然后通过条件(on…)查询得到s.studentNo 和g.GradeName数据。
但是, 出现例如a表有数据,但是b表没有数据的情况,这条字段是不能查询到的:如图所示
左连接:
顾名思义,为了解决内连接的查询不全问题,左连接会以左表(join前的表)为准
左表(a_table)的记录将会全部表示出来,而右表(b_table)只会显示符合搜索条件的记录。右表记录不足的地方均为NULL。
#左连接查询方式:
SELECT a.studentNo ,b.GradeName
FROM table1 a LEFT JOIN table2 b
ON a.`GradeId` = b.`GradeId`;
右连接:
与左连接对应,右连接会以右表(join前的表)为准
右表(b_table)的记录将会全部表示出来,而左表(a_table)只会显示符合搜索条件的记录。左表记录不足的地方均为NULL。
#右连接查询方式
SELECT a.studentNo ,b.GradeName
FROM table1 a RIGHT JOIN table2 b
ON a.`GradeId` = b.`GradeId`;