mysql入门

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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值