一.初识MySQL
为什么学习数据库
岗位的需求
现在的世界是大数据时代
被迫需求:存数据
什么是数据库
数据库(DB,DataBase)
概念:数据仓库,软件,安装在操作系统(windows,linux,mac)之上! SQL,可以存储大量的数据
作用:存储数据,管理数据
数据库分类
关系数据库: (SQL)
- MySQL,Oracle,Sql server,DB2,SQLlite
- 通过表和表之间,行和列之间的关系进行数据的存储,例如学员信息表,考勤表
非关系型数据库: (NoSQL)Not Only
-
Redis,MongDB
-
非关系型数据库,对象存储,通过对象的自身的属性来决定
DBMS(数据库管理系统)
- 数据库的管理软件,科学有效的管理我们的数据.维护和获取数据.
- MySQL,数据库管理系统
数据库简介
MySQL是一个关系型数据库管理系统
MySQL是最好的RDBMS (Relational Database Management System, 关系数据库管理系统) 应用软件之一
开源的数据库软件,体积小,速度快,成本低,所以必须会~
安装MySQL
安装建议:
尽量不要使用exe,因为会进入注册表
尽可能使用压缩包安装~
1.解压到自己想要存放的位置
2.添加环境变量
3.新建MySQL配置文件ini
port=3306
basedir=E:\MYSQL\mysql-8.0.21-winx64\bin
datadir=E:\MYSQL\mysql-8.0.21-winx64\data
max_connections=20
max_connect_errors=1000
character-set-server=utf8
default-storage-engine=INNODB
default_authentication_plugin=mysql_native_password
[mysql]
default-character-set=utf8
[client]
port=3306
default-character-set=utf8
4.启动管理员模式下的CMD,并将路径切换至mysql下的bin目录,然后输出mysqld -install(安装mysql)
5.再输入mysql --initialize-insecure --user=mysql 初始化数据文件
6.启动mysql修改密码
数据库操作(基本命令)
所有的语句都使用 ; 结尾
show databases; -- 查看所有的数据库
use school; -- 切换数据库
show tables; -- 查看当前数据库中所有的表
show create database school; -- 查看创建数据库的语句
show create table student; -- 查看创建表的定义语句
describe student; -- 查看指定表中的所有信息
update mysql.user set authentication_string=password('root')where user='root' and host='localhost'; -- 修改密码
flush privileges; -- 刷新权限
create database city; -- 创建一个数据库
exit; -- 退出连接
EXPLAIN SELECT * FROM app_user WHERE NAME = '用户999999' --EXPLAIN 分析sql执行的状况
二.数据库操作
操作数据库 > 操作数据库中的表 > 操作数据库中表的数据
增删改查数据库(create,drop,update,select)
关于数据库引擎
MYISAM(早些年使用) | INNODB(默认使用) | |
---|---|---|
常规操作 | 节约空间,速度较快 | 安全性高,事务的处理,多表多用户操作 |
事务的支持 | 不支持 | 支持 |
数据行锁定 | 不支持 | 支持 |
外键约束 | 不支持 | 支持 |
全文索引 | 支持 | 支持 |
表空间的大小 | 较小 | 较大,约为MYISAM的2倍 |
修改表
修改表student名为student1
ALTER TABLE student RENAME AS student1
给表添加字段age
ALTER TABLE student1 ADD age INT(11)
给表中的age修改数据类型(modify用来修改字段类型和约束,不能字段重命名)
ALTER TABLE student1 MODIFY age VARCHAR(1)
给表中的属性age修改为属性age1(change用来字段重命名,不能修改字段类型和约束)
ALTER TABLE student1 CHANGE age age1 INT(1)
删除表
- 删除表中的字段age1
ALTER TABLE student1 DROP age1
- 删除表
DROP TABLE IF EXISTS teacher
三.MySQL数据管理
外键(了解)
第一种方式:在写命令时添加外键
CREATE TABLE `grade`(
`gradeid` INT(10) NOT NULL PRIMARY KEY auto_increment COMMENT '年纪id',
`gradename` VARCHAR(50) NOT NULL COMMENT '年纪名称'
)
-- 学生表的gradeid字段 要去引用年级表的gradeid
-- 定义外键key
-- grade是父表,student是子表
-- CONSTRAINT:给这个外键添加约束(执行引用) references 引用
CREATE TABLE `student` (
`id` int 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` timestamp NULL DEFAULT NULL COMMENT '出生日期',
`gradeid` INT(10) NOT NULL COMMENT '学生的年纪',
`address` varchar(100) DEFAULT NULL COMMENT '家庭地址',
`email` varchar(50) DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY (`id`),
KEY `FK_gradeid` (`gradeid`),
CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade` (`gradeid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
-- 创建表的时候没有添加关键
ALTER TABLE `student`
ADD CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade` (`gradeid`);
第二种方式:操作简单,可以不用在写命令时添加外键
使用navicat操作
- 在表student中设置外键,就需要打开student设计表
- 对话框点击
设置外键
名 字段 被引用的模式 被引用的表(父) 被引用的字段 删除时 更新时 gradeid school grade gradeid SET NULL CASCADE 可以为空 要设置的外键名 外键关联的数据库 关联的表 关联外表的字段 当关联表删除后,字段设为空 关联的表更新后,外键字段自动更新
删除有外键关系的表时,必须要先删除引用别人的表,再删除被引用的表(主表)
DML语言(重点)
数据操作语言
添加–>insert
- 默认语句: INSERT INTO 表名([字段名1,字段名2,字段名3])values(‘值1’,‘值2’,‘值3’)
INSERT INTO `grade` (`gradename`) VALUES ('大四')
- 插入多个字段
INSERT INTO `grade`(`gradename`) VALUES ('大一'),('大二'),('大三')
- 多个列插入数据
INSERT INTO `student`(`name`,`pwd`,`sex`) VALUES ('张三' , 'aaa' , '男')
- 省略字段,但是后面的值必须要一一对应
INSERT INTO `student`VALUES ('2' , '5' , 李四' , '男' , '2000-01-01' , 1 , '西安' , 'email')
修改–>update
- update
表名
set colnum_name=新值
where条件
UPDATE `student` SET `name` = '狂神' WHERE id = 1;
- update
表名
set colnum_name=新值
where条件[between and]
——还有or
,and
操作符UPDATE `student` SET `name` = '李四' WHERE id BETWEEN 1 AND 3;
- 不指定where条件的情况下,会改动表内所有数据
UPDATE `student` SET `name` = '长江七号'
- 修改多个属性,使用逗号隔开
UPDATE `student` SET `name` = '狂神' , `email`='24736743@qq.com' WHERE id = 1;
删除–>delete truncate
- 删除数据**(不建议使用)**
DELETE FROM student
- delete from 表名 where
条件
DELETE FROM student WHERE id = 1
- truncate 清空
TRUNCATE student
delete和Truncate的区别
- 相同:都能删除数据,都不会删除表结构
- 不同:
- delete:自增列不会清零
- TRUNCATE:自增列,计数器会归零
- TRUNCATE:不会影响事务
DQL查询数据(最重点)
DQL:(Data Query LANGUAGE 数据查询)
- Select完整的语法
SELECT [DISTINCT] [*] from [tablename1] -- 查询 [去重] 需要查询的字段 from 表 inner/left/right join tablename2 -- xxx join 要连接的表 on tablename1.* = table2.* -- on 等值判断 [WHERE ......] -- 指定结果需满足的条件 [Group BY ...] -- 指定结果按照哪几个字段来分组 [HAVING ...] -- 聚合函数不能与where同时使用,但是having可以 [ORDER BY ...] -- 通过哪个字段排序[升序ACS/降序DECS] [LIMIT...] -- 分页
- 数据库中最核心的语言,最重要的语句
- 使用频率最高的语句
- 查询学生表中全部数据
SELECT * FROM student
- 查询指定字段
SELECT StudentNo,studentName from student
- 起别名,给字段和表起一个名字 AS
SELECT StudentNo AS 学号,studentName AS 学生姓名 from student AS 学生表
<