数据库MySQL(笔记)

MySQL

第一天课程

MySQL

  1. MySQL基本使用
    学基本命令(SQL语句),数据导入,导出,简单的MySQL管理(创建用户,数据库)
    这个阶段很简单,记好笔记,语句背下来,基本就不会忘了。

  2. 深挖SQL语句
    SQL语句实际上依托的是离散数学中集合论的内容,非常困难。
    给大家50个题,做到毕业之前(有的题目一天做好几道,有的几天做一道题)
    重点是去想,不是背答案。

  3. 原理
    掌握MySQL的内部原理——面试用

目前我们先掌握第一阶段,然后搭配Java和MySQL使用。

MySQL是一个软件,这个软件的学名叫“数据库管理系统”DBMS

DBMS是一类软件的统称: MySQL, Oracle, SQL Server…
Oracle在国内的银行,保险公司,电信等行业的应用是相对广泛的。 Oracle收费
MySQL在国内一般用于互联网公司
SQL Server一般用于国内的政府机构

为什么我们要发明“数据库管理系统”这种软件?
存放大量数据,并且方便检索和修改。

在没发明数据库管理系统之前,大家用的都是文件系统来存放,检索数据。
但是文件系统存在缺陷:查找麻烦,修改容易出错,操作繁琐。

MySQL这个软件里面放的都是什么?
MySQL是一个数据库管理系统,自然首要管理的就是数据库。
所以一个MySQL的里面可以存放多个不同的数据库。

数据库是一个容器,这个容器里面放的是数据,数据以表格的形式存在于数据库中。

MySQL这个软件安装好之后,有一个默认的用户叫做root,这个用户是mysql中最高权限的管理员,它的密码是我们在安装的时候指定的。
另外,MySQL在安装好之后,还会带有自己个一个数据库,这个数据库叫mysql(全小写),这个数据库被称作元数据数据库,非常重要,一旦被破坏,MySQL这个软件也随之而崩溃。

所以,root用户权限很高,是高风险用户,不应该使用;mysql数据库也不应该被使用。
我们应该创建一个新用户和一个新数据库。

Windows中的基本操作

  1. 在微软的商店中安装Windows终端后,打开Windows终端输入
    cd ‘C:\Program Files\MySQL\MySQL Server 8.0\bin’
    再输入
    .\mysql -uroot -p
    之后输入mysql安装时提供的密码即可用root用户登录到MySQL这个DBMS中。

  2. 如果使用的是Windows+R,输入CMD打开的终端,则需要
    cd “C:\Program Files\MySQL\MySQL Server 8.0\bin”
    再输入
    mysql -uroot -p
    之后输入mysql安装时提供的密码即可用root用户登录到MySQL这个DBMS中。

上面两种方式密码输入正确后,都会看到下面的提示符即正确:
mysql >

Ubuntu中使用MySQL
Ubuntu为了安全起见,默认禁止了root用户登录MySQL这个数据库软件。
并且安装过程中没有提示我们输入密码。所以我们需要首先找到Ubuntu为我们生成的用户名和密码。
$ sudo cat /etc/mysql/debian.cnf
其中user = 后面就是用户名
其中password = 后面就是密码

$ mysql -udebian-sys-maint -p
复制粘贴密码

会看到下面的提示符即正确:
mysql>

不管是Windows还是Linux,以上操作都是先本地登录到MySQL这个软件中

下面我们需要用root用户登录,建立属于自己的数据库,用户密码,并将二者关联起来。

  1. 建立自己的数据库
    CREATE DATABASE 自己的数据库名字 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
    例子:
    mysql> CREATE DATABASE test CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
    这个例子的意思就是建立一个叫做test(text)的数据库
    此时只要看见Query OK, 1 row affected (0.01 sec)结果,属于我们自己的数据库就建立好了。

show databases; 查看所有的数据库
drop database 要删除的数据库名字; 比如 drop database tom; 删除叫做tom的数据库

  1. 建立自己的用户和密码
    CREATE USER ‘自己的用户名’@‘%’ IDENTIFIED BY ‘自己的密码’;
    例子:
    mysql> CREATE USER ‘tom’@‘%’ IDENTIFIED BY ‘123456’;
    这个例子的意思是建立了一个叫做tom的用户,这个用户的密码是123456
    此时只要看见Query OK, 1 row affected (0.01 sec)结果,属于我们自己的用户名和密码就建立好了。

建立好后,输入select user from mysql.user;
可以看到MySQL这个数据库软件中所有已经存在的用户。
删除用户drop user 用户名; drop user tom;

刚建立的好的用户没有任何权限,它看不到任何数据库,此时应该为这个用户授权,让它可以使用我们刚刚建立的数据库。

  1. 将刚建立的用户和刚建立的数据库关联起来(让这个用户可以用这个数据库)
    GRANT alter,select,insert,update,delete,create,drop,index,references,CREATE VIEW,TRIGGER,show view, ALTER ROUTINE, create routine, execute, create temporary tables ON 自己建立的数据库名.* TO ‘自己建立的用户名’@‘%’;
    例子:
    mysql> GRANT alter,select,insert,update,delete,create,drop,index,references,CREATE VIEW,TRIGGER,show view, ALTER ROUTINE, create routine, execute, create temporary tables ON test.* TO ‘tom’@‘%’;
    这句话的意思是让一个叫做tom的用户可以使用一个叫做test的数据库
    此时只要看见Query OK, 1 row affected (0.01 sec)结果,刚建立的用户就可以用刚建立的这个数据库了。

  2. 在mysql命令中输入exit,退出当前的登录,使用新用户重新登录
    ****这个新用户登录后,不能用来建立数据库和用户(只能用root登录才可以)

输入命令的时候,注意区分哪些命令是在mysql>输入的,哪些是在操作系统提示符下输入的。
mysql>提示符下可以查询,创建,删除数据库,创建,查询,删除用户

操作系统提示符下: mysql -uxxxx -p

刚刚我们所有的操作都是针对于数据库和用户的。但是数据库中的数据实际上是放在表格中的,所以我们需要学习和表格相关的操作

  1. 选中一个数据库来使用
    use 数据库名 结尾分号可选
    use test

  2. 查看当前被选中的数据库所有表格
    show tables;

  3. 建立表格
    语法:
    create table 表格名字(
    列名 列类型,
    列名 列类型,
    列名 列类型,

    );
    常见的列类型:
    int整数
    double浮点数
    date年月日
    enum枚举: enum(值,值,…);
    varchar类似于String,每一个varchar必须带有最大长度(可以缩小)
    char也类似于String,每一个char必须带有绝对的长度,这个长度是不可变的。

create table users(
id int primary key,
name char(30),
age int,
salary double,
birthday date,
sex enum(‘M’, ‘F’)
);

primary key是主键,我们强烈建议每一个表格都要选择一个列作为主键(主键这个列中的内容不能为null,不能重复)。
如果实在选不出这个列,就单独写一个叫做id的列专门当主键,主键的类型一般都是int。
因为主键不能重复,所以它可以唯一的标记某一行。

  1. 查看表格结构
    descibe 表格名;

  2. 删除表格
    drop table 表格名; 这个句子当表格不存在的时候会报错
    drop table if exists 表格名; 这个句子当表格不存在的时候什么也不做

表格建立好之后,我们要学习的是和数据相关的4个操作(按行为单位的)

  1. 插入数据
    insert into 表格名(列名, 列名, 列名…) values(值,值,值…);
    insert into users(id, name, age, salary, birthday, sex) values(1, ‘tom’, 10, 1000.0, ‘2022-02-13’, ‘M’);
    insert into users(name, id, salary, birthday, sex, age) values(‘jerry’, 2, 2001.0, ‘2022-03-18’, ‘M’, 10);
    insert into users(id, name) values(3, ‘tom’);
    insert into users(id, name, age, salary, birthday, sex) values(4, ‘tom’, null, null, null, null);

插入数据的时候,值如果是数字可以直接写,如果值是varchar,char,enum,date等必须在两侧加上单引号
date必须写成yyyy-MM-dd这种形式

  1. 查询数据
    select 列 from 表格名;
    select * from users; //*表示所有列
    select id from users;
    select id, name from users;

当查询的数据不在某张表格中的时候,比如查看现在的时间
select id, now() from users;
但是很多时候这是没有必要的,所以我们发明了虚表,虚表是一个并不存在的表,它的名字固定是dual.
select now() from dual;
select 123, ‘abc’ from dual;

  1. 修改数据
    update 表格名 set 列名=值,列名=值…;
    修改操作默认修改所有行
    update users set age=20, salary=5000;
    更常见的修改操作是按照主键进行某行的修改
    update 表格名 set 列名=值,列名=值… where 条件;
    update users set age=30, salary=6000 where id = 2;

  2. 删除数据
    delete from 表格名; 删除操作默认删除所有行
    更常见的修改操作是按照主键进行某行的删除
    delete from 表格名 where 条件;
    delete from users where id = 2;

面试常见问题

  1. 快速删除表格中所有数据
    truncate 表格名; 这个语句的执行速度比delete from 表格名;快很多。

  2. 在某一次查询中去掉重复的行
    select distinct 列, 列 from 表格名;

聚合函数
count
sum
max
min
avg

一、建立数据库:

CREATE DATABASE tom CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

二、查看数据库

show databases;

三、删除数据库

drop database tom;

四、建立用户

CREATE USER ‘jhon’@‘%’ IDENTIFIED BY ‘123456’;

五、查看用户

select user from mysql.user;

六、删除用户

drop user jhon;

七、授权用户

GRANT alter, select, insert, update, delete, create, drop, index, references, CREATE VIEW, TRIGGER, show view, ALTER ROUTINE, create routine, execute, create temporary tables ON tom.* TO ‘jhon’@‘%’;

八、使用数据库

use tom

九、查看数据库中的表格

show tables;

十、建立表格

create table user1(
列名,列类型
列名,列类型
列名,列类型

);

十一、查看表结构

describe user1;/desc user1;

十二、删除表格

drop table user1;
drop table if exists user1;

十三、插入数据

insert into user1(列名,列名…) values(值,值…);

十四、查询数据

select 列 from 表格名;
select * from user1;
select id, name from user1;

十五、修改数据

update user1 set name = ‘小明’ where id = 2;

十六、删除数据

delete from user1;
delete from user1 where id = 2;

十七、快速删除表格所有数据

truncate user1;这个执行速度比drop快
在查询中去掉重复的行
select distinct 列 from user1;

第二天课程

一、聚合函数

除了count之, 其余几个只能用于数值列上。聚合函数的结果一定是一个数

  1. count :求结果的行数,如果count里面放的是某一个列,那么总结果是不包含null的数量的。
    例如:select count(*) from users;/select count(id) from users;
  2. sum:求和 select sum(age) from users;
  3. max:求最大值 select max(age) from users;
  4. min:求最小值 select min(age) from users;
  5. avg:求平均值 select avg(age) from users;
    (按顺序来;几个聚合函数只有count能放*)

二、主键

主键唯一的作用就是用来标记一行,不能为空,不能重复
主键一般不作为表格中有实际意义的内容;
比如一个人口信息的表格,身份证号可以也可以不做主键;
比如一个学生信息的表格,学号可以也可以不做主键;
在这两种情况下,我们都可以单独设置一个列id来作为主键;

自增(auto_increment)

主键的内容自动增长;自动增长这个功能只针对于 MySQL等数据库使用,对于Oracle等数据库是无效的。所以auto_increment并不是SQL语言通用标准的一部分;

drop table if exists users;
create table users(
	id int primary key auto_increment,
	
)

删除
当执行删除语句:
delete from users where id = 5;
在插入一行
insert into users (name) values (‘tom’);
这一行的id不再是5 而是自增为6
已经存在或者使用过的主键就不会再被使用了

as(列别名)
select age as AGE from users;

三、远程登录

本地登录:
mysql -u用户名 -p

远程登录MySQL: A电脑通过IP地址远程登录到B电脑的MySQL上,A电脑甚至可以不用安装MySQL;
使用Idea操控
DATABASE------> + ------>Data Source------->MySQL------>Host: 127.0.1.1 / localhost ------>User: Password: Database: ------->下载驱动Diver------->Test Connection一定要先测试连接到成功为止(Succeeded)-------->点击ok

四、select查询

select查询完整语法:
select
from
where
group by
having
order by

以上顺序不可以颠倒

数据库的表一旦设计好了结构就不会在变了,所以不会加列,删列的执行语句,只能加表或删表
查询文档:(dev.mysql.com/doc/refman/8.0/en/integer-types.html)

一、where(过滤)

select会对所有的行都进行where测试,将判断结果为true的行放在最终结果中。
where的后面一定是一个结果为true或false的判断;(如:

select * from users where id = 3;
select * from users where id >=3;
select * from users where id <>3; #不等于
select * from users where id !=3;
select * from users where name = 'tom';
select * from users where name = 'tom' and id >= 3; #&&
select * from users where  id = 1 or id = 3 or id = 5; #||

重点:判断null或者not null

select * from users where age = null;
select * from users where age != null; 

以上两行结果是不确定的(可能不同的数据库是不同的结果),判断空和非空必须写成 is null和 is not null;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值