MySQL入门
本章内容
1、掌握数据库基本概念
2、掌握MySQL8的安装
3、掌握DDL语句实现对数据库和表的管理(重点)
4、掌握DML语句实现单表的增删改(重点)
5、掌握DQL语句实现单表的查询(重点)
6、掌握DCL语句实现用户和权限管理(重点)
难点:单词
一、数据库的基本概念
1.为什么需要数据库
1、数据持久化
2、方便管理数据
2.什么是数据库
-
用于存储和管理数据的仓库
-
英文单词为:Database,简称DB
3.数据库的好处
-
可以持久化存储数据
-
方便存储和管理数据
-
使用了统一的方式操作数据库 -- SQL
4.常见的数据库有哪些?
二、MySQL数据库的介绍和安装
1.MySQL数据库介绍
-
小型的数据库
-
开源免费(6版本之前免费)
-
所属于Oracle公司
2.MySQL数据库安装
1、下载MySQL的Linux版本
2、上传到usr/local目录
3、解压
tar -xvf Mysql文件
4、移动到mysq目录中
mv 解压后的MySQL目录名 mysql
5、在mysql目录中创建data目录
cd mysql mkdir data
6、创建 mysql 用户组和 mysql 用户
groupadd mysql useradd -g mysql mysql
7、改变 mysql 目录权限
chown -R mysql.mysql /usr/local/mysql/
8、初始化数据库
1)创建mysql_install_db安装文件
mkdir mysql_install_db chmod 777 ./mysql_install_db
2)初始化
bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
3)初始化成功后,要记录自己的原始密码:
9、配置MySQL Y.Qs2ret.J*4
打开Mysql配置文件 Wr)(i(y4kyv7
vi /etc/my.cnf
添加以下内容:
[mysqld] basedir=/usr/local/mysql datadir=/usr/local/mysql/data socket=/usr/local/mysql/mysql.sock character-set-server=utf8 port=3306 [mysql] socket=/usr/local/mysql/mysql.sock port=3306
10、建立MySQL服务
1)复制服务文件
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
2)加执行权限
chmod +x /etc/init.d/mysql
3)添加到系统服务
chkconfig --add mysql
4)检查服务
chkconfig --list mysql
11、配置全局环境变量
1)打开配置文件
vim /etc/profile
2)在配置文件底部添加:
export PATH=$PATH:/usr/local/mysql/bin:/usr/local/mysql/lib export PATH
3)使文件生效
source /etc/profile
12、启动服务
service mysql start
13、登录MySQL
mysql -u账号 -p密码 输入原始密码
14、修改原始密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码'; 或 set password for root@localhost = password('新密码');
可能的问题
Starting MySQL.2024-07-09T08:21:40.969387Z mysqld_safe error: log-error set to '/var/log/mariadb/mariadb.log', however file don't exists. Create writable for user 'mysql'. ERROR! The server quit without updating PID file (/usr/local/mysql/data/localhost.localdomain.pid).
解决方法:
[root@localhost mysql]# mkdir -p /var/log/mariadb [root@localhost mysql]# touch /var/log/mariadb/mariadb.log [root@localhost mysql]# chown -R mysql.mysql /var/log/mariadb
3.MySQL客户端工具
-
sqlyog
-
navicat
需要给数据库配置远程连接
update mysql.user set host = '%' where user = 'root'; flush privileges;
出现错误的解决方法
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
三、SQL语句
1.数据库相关概念
-
数据库
-
用于存储和管理数据的仓库
-
一个库中可以包含多个数据表
-
-
数据表
-
数据库最重要的组成部分之一
-
它由纵向的列和横向的行组成(类似excel表格)
-
可以指定列名、数据类型、约束等
-
一个表中可以存储多条数据
-
-
数据
-
想要永久化存储的数据
-
数据库管理系统
DMBS D
2.SQL介绍
-
什么是SQL
-
Structured Query Language:结构化查询语言
-
其实就是定义了操作所有关系型数据库的规则。每一种数据库操作的方式可能会存在一些不一样的地方,我们称为“方言”。
-
-
SQL通用语法
-
SQL 语句可以单行或多行书写,以分号结尾。
-
可使用空格和缩进来增强语句的可读性。
-
MySQL 数据库的 SQL 语句不区分大小写,关键字建议使用大写。
-
数据库的注释:
-
单行注释:-- 注释内容 #注释内容(mysql特有)
-
多行注释:/* 注释内容 */
-
-
-
SQL分类
-
DDL(Data Definition Language)数据定义语言
-
用来定义数据库对象:数据库,表,列等。关键字:create, drop,alter 等
-
-
DML(Data Manipulation Language)数据操作语言
-
用来对数据库中表的数据进行增删改。关键字:insert, delete, update 等
-
-
DQL(Data Query Language)数据查询语言
-
用来查询数据库中表的记录(数据)。关键字:select, where 等
-
-
DCL(Data Control Language)数据控制语言(了解)
-
用来定义数据库的访问权限和安全级别,及创建用户。关键字:GRANT, REVOKE 等
-
-
3.DDL-操作数据库
-
查询
-
查询所有数据库
-- 查询所有数据库inster SHOW DATABASES;
-
查询某个数据库的创建语句
-- 标准语法 SHOW CREATE DATABASE 数据库名称; -- 查看mysql数据库的创建格式 SHOW CREATE DATABASE mysql; 数据库查询表 desc 表名;
-
-
创建
-
创建数据库
-- 标准语法 CREATE DATABASE 数据库名称; -- 创建db1数据库 CREATE DATABASE db1; -- 创建一个已存在的数据库会报错 -- 错误代码:1007 Can't create database 'db1'; database exists CREATE DATABASE db1;
-
创建数据库(判断,如果不存在则创建)
-- 标准语法 CREATE DATABASE IF NOT EXISTS 数据库名称; -- 创建数据库db2(判断,如果不存在则创建) CREATE DATABASE IF NOT EXISTS db2;
-
创建数据库、并指定字符集
-- 标准语法 CREATE DATABASE 数据库名称 CHARACTER SET 字符集名称; -- 创建数据库db3、并指定字符集utf8 CREATE DATABASE db3 CHARACTER SET utf8; -- 查看db3数据库的字符集 SHOW CREATE DATABASE db3;
-
练习:创建db4数据库、如果不存在则创建,指定字符集为gbk
-
-
修改
-
修改数据库的字符集
-- 标准语法 ALTER DATABASE 数据库名称 CHARACTER SET 字符集名称; -- 修改数据库db4的字符集为utf8 ALTER DATABASE db4 CHARACTER SET utf8; -- 查看db4数据库的字符集 SHOW CREATE DATABASE db4;
-
-
删除
-
删除数据库
-- 标准语法 DROP DATABASE 数据库名称; -- 删除db1数据库 DROP DATABASE db1; -- 删除一个不存在的数据库会报错 -- 错误代码:1008 Can't drop database 'db1'; database doesn't exist DROP DATABASE db1;
-
删除数据库(判断,如果存在则删除)
-- 标准语法 DROP DATABASE IF EXISTS 数据库名称; -- 删除数据库db2,如果存在 DROP DATABASE IF EXISTS db2;
-
-
使用数据库
-
查询当前正在使用的数据库名称
-- 查询当前正在使用的数据库 SELECT DATABASE();
-
使用数据库
-- 标准语法 USE 数据库名称; -- 使用db4数据库 USE db4;
-
4.DDL-操作数据表
-
查询
-
查询数据库中所有的数据表
-- 使用mysql数据库 USE mysql; -- 查询库中所有的表 SHOW TABLES;
-
查询表结构
-- 标准语法 DESC 表名; -- 查询user表结构 DESC user;
在cars_db中创建cars表,设置字段:编号、品牌、型号、价格、马力、油耗
-
-
创建
-
创建数据表
-
标准语法
CREATE TABLE 表名( 列名1 数据类型1, 列名2 数据类型2, .... 列名n 数据类型n ); -- 注意:最后一列,不需要加逗号
-
常用数据类型
类型 说明 int 整数 占4字节 bigint 长整数 占8字节 float 单精度 4 double 双精度 8 decimal(n,m) 浮点数,可以控制整数位和小数位 ,如:decimal(5,2) char(n) 固定长度字符串 varchar(n) 可变长度字符串 text 长文本 (小说那种几万字) datetime 日期+时间 ‘2024 7-22 15:29:00’ date 日期 ‘2024-7-1’ timestamp 时间戳 bit 比特位 0/1 blob 二进制长文本 enum 枚举,如enum('男','女')
-
创建数据表
-- 使用db3数据库 USE db3; -- 创建一个product商品表 CREATE TABLE product( id INT, -- 商品编号 NAME VARCHAR(30), -- 商品名称 price DOUBLE, -- 商品价格 stock INT, -- 商品库存 insert_time DATE -- 上架时间 ); create table ls( -> -> id int, -> -> name varchar(20), -> -> age int, -> -> gender varchar(1), -> -> address varchar(200));
-
复制表
-- 标准语法 CREATE TABLE 表名 LIKE 被复制的表名; -- 复制product表到product2表 CREATE TABLE product2 LIKE product; 3、复制cars表到tb_cars1和tb_cats2表
-
-
-
修改
-
修改表名
-- 标准语法 ALTER TABLE 表名 RENAME TO 新的表名;
-
修改表的字符集
-
-- 标准语法 ALTER TABLE 表名 CHARACTER SET 字符集名称;
-
添加一列
-- 标准语法 ALTER TABLE 表名 ADD 列名 数据类型; -- 给product3表添加一列color ALTER TABLE product3 ADD color VARCHAR(10);
-
修改列名称和数据类型
-- 修改数据类型 标准语法 ALTER TABLE 表名 MODIFY 列名 新数据类型; -- 将color数据类型修改为int ALTER TABLE product3 MODIFY color INT; -- 查看product3表详细信息 DESC product3; -- 修改列名和数据类型 标准语法 ALTER TABLE 表名 CHANGE 列名 新列名 新数据类型; -- 将color修改为address,数据类型为varchar ALTER TABLE product3 CHANGE color address VARCHAR(30); -- 查看product3表详细信息 DESC product3;
-
删除列
-- 标准语法 ALTER TABLE 表名 DROP 列名; -- 删除address列 ALTER TABLE product3 DROP address;
-
删除
-
删除数据表
-- 标准语法 DROP TABLE 表名;
-
删除数据表(判断,如果存在则删除)
-- 标准语法 DROP TABLE IF EXISTS 表名;
-
练习:
1、创建cars_db数据库,设置字符集为utf8
2、在cars_db中创建cars表,设置字段:编号、品牌、型号、价格、马力、油耗
3、复制cars表到tb_cars1和tb_cats2表
4、给tb_cars1表去掉油耗字段,添加年限字段
5、给tb_cars2表的价格类型修改为decimal(8,2)
6、删除tb_cars2
5.DML-INSERT语句
-
新增表数据语法
-
新增格式1:给指定列添加数据
-- 标准语法 INSERT INTO 表名(列名1,列名2,...) VALUES (值1,值2,...); -- 向product表添加一条数据 INSERT INTO product(id,NAME,price,stock,insert_time) VALUES (1,'手机',1999,22,'2099-09-09'); -- 向product表添加指定列数据 INSERT INTO product (id,NAME,price) VALUES (2,'电脑',4999); -- 查看表中所有数据 SELECT * FROM product;
-
新增格式2:默认给全部列添加数据
-- 标准语法 INSERT INTO 表名 VALUES (值1,值2,值3,...); -- 默认给全部列添加数据 INSERT INTO product VALUES (3,'电视',2999,18,'2099-06-06'); -- 查看表中所有数据 SELECT * FROM product;
-
新增格式3:批量添加数据
-- 默认添加所有列数据 标准语法 INSERT INTO 表名 VALUES (值1,值2,值3,...),(值1,值2,值3,...),(值1,值2,值3,...); -- 批量添加数据 INSERT INTO product VALUES (4,'冰箱',999,26,'2099-08-08'),(5,'洗衣机',1999,32,'2099-05-10'); -- 查看表中所有数据 SELECT * FROM product; -- 给指定列添加数据 标准语法 INSERT INTO 表名(列名1,列名2,...) VALUES (值1,值2,...),(值1,值2,...),(值1,值2,...); -- 批量添加指定列数据 INSERT INTO product (id,NAME,price) VALUES (6,'微波炉',499),(7,'电磁炉',899); -- 查看表中所有数据 SELECT * FROM product;
-
6.DML-UPDATE语句
-
修改表数据语法
-- 标准语法 UPDATE 表名 SET 列名1 = 值1,列名2 = 值2,... [where 条件]; -- 修改手机的价格为3500 UPDATE product SET price=3500 WHERE NAME='手机'; -- 查看所有数据 SELECT * FROM product; -- 修改电视的价格为1800、库存为36 UPDATE product SET price=1800,stock=36 WHERE NAME='电视'; -- 修改电磁炉的库存为10 UPDATE product SET stock=10 WHERE id=7;
7.DML-DELETE语句
-
删除表数据语法
-- 标准语法 DELETE FROM 表名 [WHERE 条件]; -- 删除product表中的微波炉信息 DELETE FROM product WHERE NAME='微波炉'; -- 删除product表中库存为10的商品信息 DELETE FROM product WHERE stock=10; -- 查看所有商品信息 SELECT * FROM product;
-
注意事项
-
删除语句中必须加条件
-
如果不加条件,则将所有数据删除
-
8.DQL-单表查询
-
查询语法
select 字段列表 from 表名列表 where 条件列表 查询所有字段 select * from 表 查询指定字段 select 列1,列2... from 表 给字段设置别名 select 列名 as 别名 from 表 select 列名 别名 from 表 条件查询 select 列名 from 表 where [条件] where name = '张三' where age >= 20 where age <> 20 where gender = '男' and age > 20 or not insert + select 实现数据的复制 insert into 表1(字段...) select 字段... from 表2;
四、 DCL 用户与权限管理
用户是我们使用数据库的基础,任何连入数据库的操作,都依托于一个用户,并受到这个用户所具有权限的限制。
1.用户管理
查看用户
select host,user,authentication_string from mysql.user;
mysql是MySQL数据库中的系统库,所有用户、权限、密码、时区等信息都存放在这个库里。
库名.表名的方式可以让我们跨库来引用某个特定库的表。
创建用户
语法:create user "username"@"host" identified by "password";
create user 'test'@'localhost' identified by '123'; create user 'test'@'192.168.7.22' identified by '123'; create user 'test'@'%' identified by '123';
host的含义是限制访问的客户端的主机IP,%表示无限制。
语句中的单引号表示字符串,在这里也可以使用双引号,用户名可以不用引号。
密码设置串可以不带,但是带了密码,就必须带引号。
修改用户密码
ALTER USER 'test'@'localhost' IDENTIFIED BY '123'; flush privileges;
忘记root密码的解决方法
1、在my.cnf的[mysqld]下添加 skip-grant-tables 2、重启服务 systemctl restart mysql 3、登录,输入密码时直接回车跳过 mysql -uroot -p 4、执行修改 update user set authentication_string='' where user='root'; flush privileges; ALTER user 'root'@'localhost' IDENTIFIED BY '123456';
删除用户
语法:drop user 用户名@主机名;
drop user 'test'@'localhost';
2.权限管理
给用户授权
初始创建的用户,还不能访问数据库,因为还没有给用户赋予相应权限,需要执行用户授权操作。
命令格式:grant 权限码 on 数据库名.表名 to 用户名@主机名;
grant all on dbname.* to user@localhost; grant select,delete,insert,update on dbname.table to user@localhost; FLUSH PRIVILEGES; grant select,insert on *.* to xiaol@'10.0.0.10';
设置密码的子串可写可不写
权限码表示授予的权限类型,常用的有以下几种类型:
-
all :所有权限。
-
select:读取权限。
-
delete:删除权限。
-
update:更新权限。
-
insert 插入权限
-
create:创建权限。
-
drop:删除数据库、数据表权限。
查看用户权限
语法:show grants for 用户名@主机名;
show grants for 'bbb'@'localhost';
取消用户授权
语法:REVOKE 权限码 ON 库名.表名 FROM 用户名@主机名;
REVOKE all ON power.* FROM bbb@localhost;