数据库

数据库

一、基本概念

**概念:**用于存储和管理数据的仓库。

特点:

  • 持久化存储数据的。其实数据库就是一个文件系统。
  • 方便存储和管理数据。
  • 使用统一的发生方式操作数据库—sql语句。

常见的数据库软件:

Oracle:收费的大型数据库。

MySql:开源免费的小型数据库,1.6之后开始收费。

Microsoft SQL Server:收费中型数据库系统。

DB2:IBM 收费的大型数据库系统,常用语银行系统。

SQLite:嵌入式小型数据库,应用在手机端。

二、mysql

0.安装和卸载
MySQL配置
1.启动mysql服务
  • cmd->services.msc打开服务窗口,手动启动或关闭mysql服务
  • 管理员权限运行cmd,启动和停止mysql服务net start mysql net stop mysql
2.登录和退出

**登录:**本地访问:mysql -uroot -ppassword

远程访问:mysql -h127.0.0.1 -uroot -ppassword mysql --host=127.0.01 --user=root --password=password

**退出:**quit 或者 exit

三、SQL

1.SQL基本概念和通用语法

**基本概念:**Structured Query Language:结构haunted查询语言,定义了操作所有关系型数据库的规则。每一种数据库操作的方式存在不一样的地方,称为方言。

通用语法:

  • SQl语句可以单行或多行书写,以分行结尾。
  • 使用空格或者缩进来增强可读性。
  • 数据库SQL语句不区分大小写,但是建议关键字用大小写区分。
  • 注释:单行 [-- ]或者 [#] 多行[/* 注释内容*/]
2.数据库、表、记录及权限的操作

在这里插入图片描述

(1)DDL(Data Definition Language):用来定义数据库对象,操作数据库、表和列等。

1)操作数据库:CRUD

  • C(Create)创建:创建数据库:create database db1; 创建数据库之前判断是否存在:create database if not exists db2; 创建同时设置字符集:create database db3 character set gbk; 综合:create database if not exists db4 character set gbk
  • R(Retrieve)查询:查询所有数据库:show databases; 查询数据库字符集:show create database mysql;
  • U(Update)修改:alter database db3 character set utf8;
  • D(Delete)删除:drop database db4; drop database if exists db3;
  • 使用数据库:当前正在使用的数据库:select database(); 使用数据库:use db1

2)操作表

  • C(Create)创建:create table_name(colum1 character,olum2 character,···olumn character); 复制表:create table stu like student; 实例:create table student(id int,name varchar(32),age int,score double(4,1),birthday date,insert_time timestamp);

    sql中的数据类型:

    int :整数类型 age int;

    double:小数类型 score double(5,2); 五位数,保留两位小数

    date:日期类型,只包含年月日信息 yyyy-MM-dd

    datatime:日期格式,包含年月日时分秒 yyyy-MM-dd HH:mm:ss

    timestamp:时间戳类型,包含年月日时分秒 yyyy-MM-dd HH:mm:ss 如果不给这个字段赋值或者赋值为null,则默认使用系统当前时间作为此记录的值。

    varchar:字符串类型:name vachar(20);最大20个字符,超过就会报错。

  • R(Retrieve)查询:查询正在使用的数据库中的所有表:show tables; 查询表结构:desc table_name;

  • U(Update)修改:修改表名:alter table table_name1 rename to tabole_name2; ①查看字符集:show create table table_name;②修改字符集:alter table character set utf8; 添加一列:alter table table_name add column_name character; 修改列名:①alter table table_name change column old_name new_name character_new l例如alter table user change column phone gender varchar(5);;alter table table_name modify column_name character_new ② 删除列:alter table table_name drop column_name;

  • D(Delete)删除:drop table if exists table_name;

(2)DML(Data Manipulation Language):数据库操作语言,用来对表中的数据进行增删改。
  • 添加数据:insert into table_name(column_name1,···column_namen) values(value1,···valuen); 查看表中记录:select * from table_name

    注意事项:

    1. 列名和值一一对应
    2. 如果表名后,不定义列名,则默认给所有列添加值:insert into table_name values(所有列的值都需要写);
    3. 除了数字类型,其它类型需要使用引号包裹起来,单双都可以。
  • 删除数据:delete from table_name [condition] delete form table db1 where id=1;

    注意事项:

    不加条件,则删除表中所有记录。为了删除表中所有记录可以使用 删除表然后创建一个一模一样的空表TRUNCATE TABLE table_name;这两种删除第二种速度较快,因为将表作为整体删除。

  • 修改数据:update table_name set column_name1=value1,···column_namen=valuen [condition]; update table_name set column_name1=value1,···column_namen=valuen where id=2;

  • 注意事项:

    如果不加任何条件,则会将表中所有记录全部修改。

(3)DQL(Data Query Language):数据库查询语言,用来查询数据库中表的记录。

查询语法select 字段类表 from 表名列表 where 条件列表 group by 分组字段 having 分组之后的条件限定 order by 排序 limit 分页限定;

基础查询:

  1. ​ 查询多个字段:select * from talble_name; select column_name from table_name;
  2. ​ 去除重复结果集:select distinct column_name from table_name;
  3. ​ 计算列(四则运算):select name,english,math +englist From student; select name,english,math +ifnull(english,0) From student;
  4. ​ 起别名:select name,english,math +ifnull(english,0) as score From student; select name 姓名,english 英语,math +ifnull(english,0) 总分 From student;

IFNULL(arg1,arg2);

arg1:那个字段需要判断是否是null

arg2:如果arg1为null,则将该字段值替换为arg2

条件查询:

where子句后跟条件。

select * from stu where age>20; select * from stu where age>=20; select * from stu where age<20; select * from stu where age=20; 不等于①select * from stu where age!=20;②select * from stu where age<>20;

并且:①select * from stu where age>=20 AND age<=30;②select * from stu where age between 10 and 30; 或者:①select * from stu where age=22 or age =19 or age =18;②select * from stu where age in(22,19,18);

判断是否为空:select * from stu where english is null; select * fro stu where english is not null;

模糊查询:(查询姓为李的用户)select * from stu where name Like '马%'; 第二个字是化 "_化%" 总共三个字 "___" 包含马的人 %马%

占位符

_ 单个任意字符

%多个任意字符

排序查询:

语法:order by 排序字段 排序方式1,排序字段2 排序方式2,···;

默认省略:select * from stu ORDER BY math; 单条件:select * from stu ORDER BY math DESC; 多条件:select * from stu ORDER BY math ASC,english DESC;

排序方式:

ASC:升序,默认方式,排序方式不指明,默认就是ASC

DESC:降序。

如果有多个排序方式,则当第一条件一样时,才判断第二条件。

聚合函数:

将一列数据作为一个整体,进行纵向的计算。比如:计算数学成绩的平均分。

count:计算个数

max:计算最大值

min:计算最小值

sum:求和

avg:求平均值

注意:聚合函数的计算排除null值。解决:①select count(IFNULL(english,0)) form stu; ②选择不包含非空的列(主键)计算:select count(id) from stu;

select count(name) form stu; select count(name) form stu; select max(math) form stu; select min(enlgish) form stu; select sum(math) form stu; select avg(name) form stu;

分组查询:

语法:group by 分组字段;

注意事项:

分组之后查询的字段:要吗是分组字段,要吗是聚合函数

where 和having的区别:

​ where在分组之前进行限定,不满足条件,则不参与分组;having在分组之后进行限定,不满足条件,不被显示。

​ where后不可以跟聚合函数,having之后可以跟聚合函数的判断。

select sex,avg(math),count(id) from stu group by sex;

  1. 按照性别分组,分别查询男女平均分,要求:分数低于70分的人不参与分组。select sex,avg(math) from stu where math>70 group by sex;
  2. 按照性别分组,分别查询男女平均分,要求:分数低于70分的人不参与分组,每组人数要大于2人select sex,avg(math),count(id) from stu where math>70 group by sex having count(id)>2;

分页查询:

语法:limit 开始索引,每页查询的记录数;

公式:开始索引=(当前页码-1)*每页显示条数;

limit分页操作是mysql方言;

select * from stu limit 0,3;

(4)DCL(Data Control Language):数据库控制语言,定义数据库的访问权限和安全级别以及创建用户,关键字:GRANT,REVOKE等。
1.管理用户

​ **1.添加用户:**语法:CREATE USER ‘用户名’@‘主机名’ IDENTIFIED BY ‘密码’;

​ **2.删除用户:**语法:DROP USER ‘用户名’@‘主机名’;

3修改用户密码:

	1. UPDATE USER SET PASSWORD = PASSWORD('新密码') WHERE USER = '用户名'; 

	2. UPDATE USER SET PASSWORD = PASSWORD('abc') WHERE USER = 'lisi';

	3. SET PASSWORD FOR '用户名'@'主机名' = PASSWORD('新密码');

	4. SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123');

mysql中忘记了root密码:
​ cmd – > net stop mysql 停止mysql服务
​ 使用无验证方式启动mysql服务: mysqld – skip-grant-tables
​ 打开新的cmd窗口,直接输入mysql命令,敲回车。就可以登录成功
​ use mysql;
​ update user set password = password(‘你的新密码’) where user = ‘root’;
​ 关闭两个窗口
​ 打开任务管理器,手动结束mysqld.exe 的进程
​ 启动mysql服务
​ 使用新密码登录

4.查询用户

  1. 切换到mysql数据库
    USE myql;

  2. 查询user表
    SELECT * FROM USER;

通配符: % 表示可以在任意主机使用用户登录数据库

2.权限管理

1.查询权限

​ SHOW GRANTS FOR ‘用户名’@‘主机名’;
​ SHOW GRANTS FOR ‘lisi’@’%’;

2.授予权限

​ – 授予权限
​ grant 权限列表 on 数据库名.表名 to ‘用户名’@‘主机名’;
​ – 给张三用户授予所有权限,在任意数据库任意表上

​ GRANT ALL ON . TO ‘zhangsan’@‘localhost’;
3.撤销权限

​ revoke 权限列表 on 数据库名.表名 from ‘用户名’@‘主机名’;
​ REVOKE UPDATE ON db3.account FROM ‘lisi’@’%’;

  • 四、数据库备份和还原

1.命令行

备份数据库:

mysqldump -uroot -proot db1>d://a.sql

还原数据库:

创建 选择数据库 执行文件: source 文件路径
mysql> source d:/myprogram/database/db.sql;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值