1.MySQL基本操作
1.1数据库的作用
数据库是存放数据的仓库
数据库:数据库中存放的是表,一个数据库中可以存放多个表
表:表是用来存放数据的。
1.2 数据库的发展史
萌芽阶段:文件系统
最初始的数据库是用磁盘来存储数据的。文件就是最早的数据库。
第一代数据库:层次模型、网状模型
层次模型
缺点:
- 查找不同类的数据效率低了(导航的结构的缺点)
- 数据不完整(不能区分到底是一个李白还是两个李白)
网状模型
网状模型解决了层次数据的数据不完整的问题,但是没有解决层次模型的导航问题。
第二代数据库:关系型数据库
特点:
- 每个表都是独立的
- 表与表之间通过公共字段来建立关系
优点:解决了导航问题,并且数据完整性得到解决
缺点:多表查询效率低了
提示:我们现在用的主流的数据库都是关系模型的。
NoSQL(非关系型数据库)解决关系型数据库多表查询效率的问题,常见的非关系型数据库有:Redis、mongodb。数据库中存储格式是键值对。
1.3MySQL安装
下载安装包:https://dev.mysql.com/downloads/
选择好版本进行下载
选择这个直接开始下载
解压安装包到文件夹内并打开
在解压目录下新建my.ini文件
创建data目录存放数据库数据
将下面文本拷贝进my,ini文件中
[mysqld]
# 设置3306端口
port=3306
# 设置mysql的安装目录 ----------是你的文件路径-------------
basedir=D:\workspace\mysql\mysql-8.0.40-winx64
# 设置mysql数据库的数据的存放目录 ---------是你的文件路径data文件夹自行创建
#datadir=D:\workspace\mysql\mysql-8.0.40-winx64\data
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。
max_connect_errors=10
# 服务端使用的字符集默认为utf8mb4
character-set-server=utf8mb4
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
#mysql_native_password
default_authentication_plugin=mysql_native_password
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8mb4
以管理员身份打开命令提示符切换到bin目录下
在MySQL目录下的bin目录下执行命令:
mysqld --initialize --console
红框内是初始密码: K5Oj<kw/(Ti1
安装mysql服务并启动
mysqld --install mysql
net start mysql
连接MySQL
mysql -uroot -p
输入刚刚的随机密码 K5Oj<kw/(Ti1
修改密码
这里密码为wzj123456
ALTER USER 'root'@'localhost' IDENTIFIED BY 'wzj123456';
可以输入quit
或者exit
都可以退出,登录就可以用mysql -u root -p
配置环境变量
此电脑->属性->高级系统设置->环境变量
在系统变量中新建变量名:MYSQL_HOME
,变量值:MySQL的目录
然后在系统变量里面找到path变量添加%MYSQL_HOME%\bin
1.4 启动/关闭MySQL服务
方法一:在服务面板中启动或关闭
win+r
输入services.msc
打开服务面板
方法二:通过命令行启动\关闭
- net start 服务名: 启动MySQL服务
- net stop 服务器: 关闭MySQL服务
注意:必须通过管理员身份启动命令行
1.5 SQL介绍
SQL是什么
Structured Query Language(结构化查询语言),是用来操作关系型数据库的一门语言。这是一个关系型数据库的通用操作语言,也成为标准SQL,也叫SQL-92。
多学一招:数据库的生产厂商为了占有市场份额,都会在标准SQL的基础上扩展一些自己的东西以吸引用户。
常见的关系型数据库
关系型数据库 |
开发公司 |
使用语言 |
SQL Server |
微软公司 |
T-SQL |
Oracle |
甲骨文公司 |
PL/SQL |
MySQL |
MySQL AB 公司开发——甲骨文公司收购 |
MySQL |
思考:已知标准SQL可以在所有的关系型数据库上运行,在Oracle上编写的PL/SQL能否在MySQL上运行?
答:不能,只能运行标准SQL
1.6 连接服务器
通过命令行面板连接
mysql -u root -p
关闭连接
方法一:exit
方法二:quit
方法三:\q
1.7 数据库的操作
1.7.1 显示数据库
语法:show databases;
安装MySQL后,MySQL自带了4个数据库
- information_schema:存储了MySQL服务器管理数据库的信息。
- performance_schema:MySQL5.5新增的表,用来保存数据库服务器性能的参数
- mysql:MySQL系统数据库,保存的登录用户名,密码,以及每个用户的权限等等
- sys:这是MySQL 8.0版本引入的新数据库,它提供了一系列视图和存储过程,用于简化和优化对MySQL服务器的监控和管理。
1.7.2 创建数据库
语法:create database [if not exists] 数据名 [字符编码]
([]内的可以省略)
创建数据库:
create database stu;
如果创建的数据库已存在,就会报错
ERROR 1007 (HY000): Can't create database 'stu'; database exists
解决:创建数据库的时候判断一下数据库是否存在,如果不存在再创建
create database if not exists stu;
如果数据库名是关键字和特殊字符要报错
解决:在特殊字符、关键字行加上反引号
create database `create`;
为了创建数据库时万无一失,我们可以在所有的数据库名上加上反引号
创建数据库的时候可以指定字符编码
create database teacher charset=gbk;
gbk 简体中文
gb2312: 简体中文
utf8: 通用字符编码
创建数据库如果不指定字符编码,默认和MySQL服务器的字符编码是一致的。
1.7.3 删除数据库
语法:drop database [if exists] 数据库名
删除数据库
drop database teacher;
如果删除的数据库不存在,会报错
ERROR 1008 (HY000): Can't drop database 'teacher'; database doesn't exist
解决:删除之前判断一下,如果存在就删除'
drop database if exists teacher;
1.7.4 显示创建数据库的SQL语句
语法:show create database 数据库名
/*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */: 这是一个条件注释,/*!40100 表示这条指令只有在MySQL版本4.1.0或更高版本时才会被执行。这里指定了数据库的默认字符集为 utf8mb4,这是一种编码方式,可以表示更多的字符,包括一些特殊符号和表情符号。COLLATE utf8mb4_0900_ai_ci 是指字符排序规则,ai 表示大小写不敏感(Accent Insensitive),ci 表示不区分大小写(Case Insensitive)。
/*!80016 DEFAULT ENCRYPTION='N' */: 这是另一个条件注释,/*!80016 表示这条指令在MySQL版本8.0.16或更高版本时才会被执行。这里指定了数据库的默认加密状态为 'N',即不加密。
1.7.5 修改数据库
修改数据库的字符编码
语法:alter database 数据库名 charset=字符编码
alter database teacher charset=utf8;
1.7.6 选择数据库
语法:use 数据库名
选择数据库use stu;
1.8 表的操作
1.8.1 显示所有表
语法:show tables
1.8.2 创建表
语法:
create table [if not exists] 表名(
字段名 数据类型 [null|not null] [auto_increment] [primary key] [comment],
字段名 数据类型 [default]…
)engine=存储引擎
单词
- null | not null 空|非空
- default 默认值
- auto_increment 自动增长
- primary key 主键
- comment 备注
- engine 引擎 innodb myisam memory 引擎是决定数据存储的方式
创建简单的表
创建复杂的表
create table 数据库名.表名,用于给指定的数据库创建表
1.8.3 显示创建表的语句
语法:show create table 表名
显示创建teacher表的语句
show create table teacher;
将两个字段竖着排列show create table 表名\G
show create table teacher\G;
1.8.4 查看表结构
语法:describe 表名
或者desc 表名
查看teacher表的结构
describe teacher;
或desc teacher;
1.8.5 删除表
语法:drop table [if exists] 表1,表2,…
删除表
drop table stu;
如果删除一个不存在的表就会报错,删除的时候可以判断一下,存在就删除。
ERROR 1051 (42S02): Unknown table 'stu'
drop table if exists stu;
可以一次删除多个表
drop table a1,a2;
1.8.6 修改表
语法:alter table 表名
1、添加字段:alter table 表名add [column] 字段名 数据类型 [位置]
例一:添加字段
alter table teacher add age int;
例二:在第一个位置上添加字段
alter table teacher add email varchar(30) first;
例三:在指定的字段后添加字段
alter table teacher add sex varchar(2) after name;
2、删除字段:alter table 表 drop [column] 字段名
alter table teacher drop email;
3、修改字段(改名改类型):alter table 表 change [column] 原字段名 新字段名 数据类型 …
将字段sex改为xingbie,数据类型为int
alter table teacher change sex xingbie int;
4、修改字段(不改名):alter table 表 modify 字段名 字段属性…
将性别的数据类型改为varchar(2)
alter table teacher modify xingbie varchar(2);
5、修改引擎:alter table 表名 engine=引擎名
引擎是决定数据存储的方式
alter table teacher engine=myisam;
6、修改表名:alter table 表名 rename to 新表名
alter table teacher rename to stu;
1.8.7 复制表
语法一:create table 新表 select 字段 from 旧表
create table stu1 select * from stu;
特点:不能复制父表的主键,能够复制父表的数据
语法二:create table 新表 like 旧表
create table stu2 like stu;
特点:只能复制表结构,不能复制表数据
1.9 数据操作
创建测试表
1.9.1 插入数据
插入一条数据
语法:insert into 表名 (字段名,