MySQL数据库

知识点目标

1、MySQL的基本概念
2、MySQL的数据类型
3、DDL(建库建表)
4、DCL(权限控制)
5、DML(增删改)
6、DQL(查询)

MySQL的基本概念

数据库的概念

数据库Database,就是数据的仓库,项目中用于持久化保存数据,可以很方便的对数据进行管理。

数据库管理系统

DBMS(database management system)MySQL是属于一种专门用于管理数据库的软件

常用的DBMS:

  • MySQL “开源”的数据库,被Oracle收购,功能全面,适用中小型项目
  • Oracle 甲骨文公司的大型数据库,收费的,功能强大
  • SQLServer 微软公司的,只能运行在Windows上
  • PostgreSQL 开源的数据库,功能强大,适合中大型项目
  • DB2 IBM的数据库,和服务器绑定

其它概念:

DBA:数据库管理员

MySQL的安装

玩转MySQL(一)MySQL的安装_1个月玩转mysql-CSDN博客

MySQL的使用

使用客户端连接MySQL

在这里插入图片描述

客户端:

  • 控制台

  • 第三方软件

    navicat

    workbench

创建数据库

在这里插入图片描述

导入导出数据库

导出数据:点击数据库右键,转储SQL文件,保存文件

导入数据:新建数据库,点数据库右键,运行SQL文件

创建表

在这里插入图片描述

表的相关概念

表由行和列组成

行也叫记录/数据…,一张表有多行记录,每一行有多个列,列也叫字段

设计表(一张表对应Java程序中的类,字段对应类的属性)

常用的字段类型:

  • tinyint ----> java 的byte 1字节
  • smallint ----> short 2字节
  • mediumint —> 3字节
  • int/integer 整数 4字节
  • bigint 8字节 类似java的long
  • float 4字节 单精度浮点型
  • double 8字节 双精度
  • decimal(n,m) 8字节 设置整数和小数位
  • date 日期
  • datetime 日期+时间
  • timestamp 时间戳
  • char(n) 固定长度字符类型
  • varchar(n) 可变长度字符类型
  • text 长文字
  • bit 单个比特 0/1
  • blob 长二进制字符串

面试题:char和varchar的区别

char是固定长度的,char(10),如:存 abc 长度还是10,不足位置补空格

varchar是可变长度的,varchar(10),存abc,只占三个长度

SQL语句

SQL(Structured Query Language)结构化查询语言,用于对数据库进行管理

分为:

  • DDL 数据定义语言(对数据库、表、字段、约束等进行操作)
  • DCL 数据控制语言(用户授权控制)
  • DML 数据操作语言(数据增删改)
  • DQL 数据查询语言(数据查询)

DDL

数据库操作

新建数据库

create database 数据库名;
use 数据库;
-- 不存在的情况下创建数据库
create database if not exists 数据库名;

删除数据库

drop database 数据库名;
-- 存在再删除
drop database if exists 数据库名;

表的操作

创建表:

create table 表名(
	字段名 类型 约束,
	字段名 类型 约束,
	字段名 类型 约束
);

约束起到控制数据值的作用,约束的类型:

  • 主键,表只能有一个主键,不能重复,不能为空,用于唯一标识这行记录

    primary key

  • 自增,只能用于整数类型,自动递增,不需要输入

    auto_increment

  • 非空,强制要求输入

    not null

  • 唯一,不能重复

    unique

-- 删除表
drop table student;
-- 创建学生表
create table student(
	id int primary key auto_increment,
    name varchar(20) not null unique,
	age int not null,
	gender varchar(1) not null,
	address varchar(200)
);

练习:创建汽车表:id、牌照、型号、价格、颜色、产地、出厂日期

id设置自增主键,其它字段都为非空,牌照不能重复

字段的操作

-- 修改表 添加新字段
alter table car add column product_date date not null;
-- 修改表 删除字段
alter table car drop column product_date;

DML

数据操作语言,包含对数据的增删改操作

插入

单行插入

insert into 表名(列名,列名,列名,列名) values(值,值,值,值);

多行插入

insert into 表名(列名,列名,列名,列名) values(值,值,值,值),(值,值,值,值),(值,值,值,值);

案例:

-- 单行插入
insert into car(number,type,price,color,address,product_date)
values('A0001','小米su7',300000.00,'银色','武汉','2023-11-12');
-- 多行插入
insert into car(number,type,price,color,address,product_date)
values('A0002','小米su8',350000.00,'银色','武汉','2023-11-11'),
('A0003','小米su9',350000.00,'银色','武汉','2024-11-11'),
('A0004','小米su10',450000.00,'银色','武汉','2024-11-12'),
('A0005','小米su11',550000.00,'银色','武汉','2024-11-15');

更新

update 表名 set 列=值,列=值,列=值 where 条件

where条件

  • and 两个条件要同时成立
  • or 两个条件成立一个
update car set price = price + 10000 where type = '小米su7' or type = '小米su8';

-- 给银色的小米su7、su8涨价10000,400000封顶
update car set price = price + 10000 
where color = '银色' and price <= 390000 and (type = '小米su7' or type = '小米su8');

删除

delete from 表 where 条件;

-- 删除0005
delete from car where number = 'A0005';
-- 清除所有数据 自增值没有删除
delete from car;
-- 清除所有数据 清理自增最大值
truncate table car;

练习:

1)向学生表插入5条数据

2)给武汉的女学生加2岁

3)设置id为3学生的年龄为25,性别为女,籍贯为上海

4)删除年龄超过25岁的男学生

CREATE DATABASE if not EXISTS testdb;

use testdb;

drop DATABASE testdb;

drop TABLE student;
CREATE TABLE `student` (
    `id` INT AUTO_INCREMENT PRIMARY KEY,
    `name` VARCHAR(20) not null UNIQUE,
    `age` INT NOT NULL,
    `gender` VARCHAR(1) NOT NULL,
    `address` VARCHAR(200)
);

INSERT INTO `aigou`.`student` (`id`, `name`, `age`, `gender`, `address`) VALUES 
(1, '李四', 26, '男', '武汉'),
(2, '王五', 20, '女', '济南'),
(3, '赵六', 15, '女', '青岛'),
(4, '钱七', 24, '女', '孝感'),
(5, '孙八', 23, '男', '德州');

UPDATE student set age = age + 2 WHERE gender = '女' AND address = '武汉';

UPDATE student SET age = 25,gender = '女',address = '上海' WHERE id = 3;

DELETE FROM student WHERE age > 25 AND gender = '男';
SELECT * FROM student;

DCL

数据控制语言,用户和权限的操作,需要超管的权限完成

用户操作

create user '用户名'@'域名' identified with mysql_native_password by '密码';

域名:用户所在的服务器
localhost 或 本机的IP
%  代表可以通过远程主机访问

-- 创建用户并设置密码
create user 'qiangge'@'localhost' 
identified with mysql_native_password by '123456';

-- 删除用户
drop user '用户名'@'域名';

-- 设置root的远程连接
use mysql;
-- 修改root的域名为%
update user set host = '%' where user = 'root';
-- 刷新权限
flush privileges;

用户授权

grant 权限 on 数据库.表 to 用户名@域名;

权限:
select 		查询
insert 		插入
update		更新
delete		删除
create		创建库、表。。
drop		删除库、表。。
replication slave 主从复制
all			全部

数据库和表支持通配符 *
*.*

-- 授予权限
grant all on *.* to 'qiangge'@'localhost';
-- 刷新权限
flush privileges;

取消权限

revoke 权限 on 数据库.表 from 用户名@域名;

-- 取消权限
REVOKE select,insert,delete,update on *.* from 'qiangge'@'localhost';
-- 刷新权限
flush privileges;

案例

创建test1数据库,在其中创建一个书籍表,包含:id、书名、作者、出版日期、页数、类型、价格

1)插入几本书

2)给作者张三的书籍涨价5元

3)给页数在100以下,类型为小说的书籍降价5元,最低价不能低于10元

4)删除出版日期在2024-11-11日的书籍

5)创建test2数据库,在其中歌曲表,包含:id、歌名、播放时长、演唱者、类型

6)创建用户,能登录系统

7)给用户授权,能对test1的书籍表执行增删改查,只能对歌曲表进行查询

-- 创建test1数据库,在其中创建一个书籍表,包含:id、
-- 书名、作者、出版日期、页数、类型、价格
-- Title, author, publication date, page count, type, price

-- 1)插入几本书

-- 2)给作者张三的书籍涨价5-- 3)给页数在100以下,类型为小说的书籍降价5元,最低价不能低于10-- 4)删除出版日期在2024-11-11日的书籍

-- 5)创建test2数据库,在其中歌曲表,包含:id、歌名、播放时长、演唱者、类型

-- 6)创建用户,能登录系统

-- 7)给用户授权,能对test1的书籍表执行增删改查,只能对歌曲表进行查询

-- 创建 test1 数据库
CREATE DATABASE IF NOT EXISTS test1;

-- 使用 test1 数据库
USE test1;

-- 创建书籍表
CREATE TABLE books (
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(20) NOT NULL,
    author VARCHAR(20) NOT NULL,
    publication_date DATE NOT NULL,
    page_count INT NOT NULL,
    type VARCHAR(20) NOT NULL,
    price DOUBLE NOT NULL
);

-- 删除表
DROP TABLE books;

-- 查询创建后的书籍表结构
SHOW COLUMNS FROM books;

-- 插入几本书
INSERT INTO books (title, author, publication_date, page_count, type, price) VALUES 
('书名1', '张三', '2023-01-01', 95, '小说', 25.00),
('书名2', '李四', '2023-02-01', 200, '科幻', 30.00),
('书名3', '张三', '2023-03-01', 90, '小说', 20.00),
('书名4', '王五', '2023-04-01', 120, '历史', 22.00),
('书名5', '张三', '2024-11-11', 80, '小说', 15.00);

DELETE FROM books;

-- 查询插入后的书籍表
SELECT * FROM books;

-- 给作者张三的书籍涨价5元
UPDATE books SET price = price + 5 WHERE author = '张三';

-- 查询更新后的书籍表
SELECT * FROM books;

-- 给页数在100以下,类型为小说的书籍降价5元,最低价不能低于10-- UPDATE books SET price = GREATEST(price - 5, 10) WHERE page_count < 100 AND type = '小说';
UPDATE books SET price = price - 5 WHERE page_count < 100 AND type = '小说' AND price > 10

-- 查询更新后的书籍表
SELECT * FROM books;

-- 删除出版日期在2024-11-11日的书籍
DELETE FROM books WHERE publication_date = '2024-11-11';

-- 查询删除后的书籍表
SELECT * FROM books;

-- 创建 test2 数据库
CREATE DATABASE IF NOT EXISTS test2;

-- 使用 test2 数据库
USE test2;

-- 创建歌曲表
CREATE TABLE songs (
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(50) NOT NULL,
    duration TIME NOT NULL,
    singer VARCHAR(50) NOT NULL,
    type VARCHAR(20) NOT NULL
);

-- 删除歌曲表songs
DROP TABLE songs;;

-- 查询创建后的歌曲表结构
SHOW COLUMNS FROM songs;

-- 创建用户
CREATE USER 'qhq'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';

-- 给用户授权,能对 test1 的书籍表执行增删改查
GRANT ALL PRIVILEGES ON test1.books TO 'qhq'@'localhost';

-- 给用户授权,只能对 test2 的歌曲表进行查询
GRANT SELECT ON test2.songs TO 'qhq'@'localhost';

-- 刷新权限
FLUSH PRIVILEGES;

-- 查询用户权限
SHOW GRANTS FOR 'qhq'@'localhost';
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值