MySQL学习【1】

【1】安装MySQL数据库

第一步如何安装MySQL数据库就不说了,网上教程有很多

【2】密码登录

创建新用户:create user ‘<用户名>@’host’ identified by ‘密码’;
进入之后会出现如下所示的页面,输入你安装的时候设定的密码+enter

Enter password: *********

如果密码正确,则登录,显示如下所示的数据

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 5.7.24 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

如果密码错误,则退出MySQL,此页面也就退出了

【3】查看当前数据库

输入命令:==
###show databases**==;
此命令会导出所有在mysql里面现有数据库:如果是首次的话一般会存在
information_schema
performace_schema
sys
mysql
以上数据库,是MySQL自动创建的

其中:information_schema是:称为信息架构保存了mysql服务器所有数据库信息(包括数据库名,数据库的表,表内数据类型,访问权限等)

informace_schema是:主要用于收集数据库服务器的性能参数,以便优化数据库性能

sys是:属于mysql5.7新增数据库,此库包含系统的元数据信息

mysql是:存储mysql运行相关的数据的基本信息

【4】新建数据库和删除数据库

create database students;(这条命令意思是新创建一个名为students的数据库)

drop database student;(这条命令的意思是,删除名为students的数据库)

创建之后,可以用show databases语句来查看一下,此时新建的数据库也就会在上图中并列显示

删除也一样,删除之后,数据库也就不再显示

【5】新建表

新建表之前要先选择数据库:你要给哪个数据库建表

use 数据库名:这条命令就是选择在哪个数据库下面进行操作

mysql> use school;
Database changed

create table 表名(1列名 数据类型,2列名 数据类型,…);:新建一个表

mysql> create table test(id int primary key auto_increment,
    -> name varchar(10) not null,
    -> age char(3)
    -> );
Query OK, 0 rows affected (0.51 sec)

【6】删除表

drop table 表名:删除表

mysql> drop table test;
Query OK, 0 rows affected (0.28 sec)

【7】查看表结构

desc 表名:查看表的结构

mysql> desc test;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| name  | varchar(10) | NO   |     | NULL    |                |
| age   | char(3)     | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
3 rows in set (0.02 sec)

【8】表中插入数据

如果插入一组数据:
insert into 表名(1列名,2列名…) value(1数据,2数据…);

mysql> insert into test(name,age) value('张三',20);
Query OK, 1 row affected (0.15 sec)

如果插入多组数据
** inert into 表名(1列名,2列名…) values(1数据,2数据…),(1数据,2数据…)…;**

mysql> insert into test(name,age) value('张三',20),('李四',22);
Query OK, 2 rows affected (0.07 sec)
Records: 2  Duplicates: 0  Warnings: 0

查看表的数据:

mysql> select* from test;
+----+------+------+
| id | name | age  |
+----+------+------+
|  1 | 张三 | 20   |
|  2 | 张三 | 20   |
|  3 | 李四 | 22   |
+----+------+------+
3 rows in set (0.00 sec)

【9】修改表的某一列数据类型

alter table 表名 modify 列名 数据类型
举例如下:
这是修改之前的数据类型,我们要将age 的数据类型由char(1)该成char(3)

mysql> desc test;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| name  | varchar(10) | NO   |     | NULL    |                |
| age   | char(1)     | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
3 rows in set (0.02 sec)

修改数据类型

mysql> alter table test modify age char(3);
Query OK, 0 rows affected (0.67 sec)
Records: 0  Duplicates: 0  Warnings: 0

查看修改后的结果

mysql> desc test;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| name  | varchar(10) | NO   |     | NULL    |                |
| age   | char(3)     | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

【10】添加表的列

alter table 表名 add 列名 列类型;

mysql> alter table test add sex char(1);
Query OK, 0 rows affected (0.77 sec)
Records: 0  Duplicates: 0  Warnings: 0

然后我们再来看一下表的结构:

mysql> desc test;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| name  | varchar(10) | NO   |     | NULL    |                |
| age   | char(3)     | YES  |     | NULL    |                |
| sex   | char(1)     | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

【11】重命名列

** alter table 表名 change 旧列名 新列名 类型;**

mysql> alter table test change sex usex char(1);
Query OK, 0 rows affected (0.10 sec)
Records: 0  Duplicates: 0  Warnings: 0

我们来看一下表结构:

mysql> desc test;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| name  | varchar(10) | NO   |     | NULL    |                |
| age   | char(3)     | YES  |     | NULL    |                |
| usex  | char(1)     | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

【12】DML数据操控语言

这方面我们只讲一个从表1查询把数据插入表2
insert table 表2名 select * from 表1名
为了复制一张和表1一模一样的表,我们先来新建一个test2表,结构和表1相同

mysql> create table test2(id int primary key,name varchar(10) not null,age char(3),usex char(1));
Query OK, 0 rows affected (0.39 sec)
mysql> desc test2;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | NULL    |       |
| name  | varchar(10) | NO   |     | NULL    |       |
| age   | char(3)     | YES  |     | NULL    |       |
| usex  | char(1)     | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

然后我们来复制整张test

mysql> insert into test2 select * from test;
Query OK, 3 rows affected (0.14 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from test;
+----+------+------+------+
| id | name | age  | usex |
+----+------+------+------+
|  1 | 张三 | 20   | NULL |
|  2 | 张三 | 20   | NULL |
|  3 | 李四 | 22   | NULL |
+----+------+------+------+
3 rows in set (0.00 sec)

mysql> select * from test2;
+----+------+------+------+
| id | name | age  | usex |
+----+------+------+------+
|  1 | 张三 | 20   | NULL |
|  2 | 张三 | 20   | NULL |
|  3 | 李四 | 22   | NULL |
+----+------+------+------+
3 rows in set (0.00 sec)

这里强调一点,如果两张表的结构不一致的话,就不要用“*”号 ,可以选择其中的某列来选择,以便和新表的列相匹配。

【13】把外部文本文件导入到数据库

load data infile '文件路径\文件名’ into table 表名

load data infile 'e:\\test.txt' into table test;

我的test.txt文件里写的是:

4 小北 205 牧子 216 向北 21

注意,数据与数据之前是空格分开的,一组占一行数据
如果说这里出问题的话,那么可能就是编码的问题了,一般我们在date文件夹的同根目录下加一个my.iml文件,里面修改设置:

[mysqld]
character-set-server=utf8mb4
secure-file-priv=

意思是我们用的编码是utf8mb4编码
我们在给test文件中写数据的时候也要注意数据的编码。
secure-file-priv=默认是null值,表示不允许加载文件,可以改为具体目录名,表示只能从这个目录加载文件
如果改为"",表示可以从任意目录加载文件

【14】 sourse

** sourse 文件路径\文件名**
要求:
1:文件里面的内容必须是合法的sql 语句
2:没有单引号,建议用反斜杠/分隔路径
3:文件编码与OS编码要一致

source e:/test.sql;

【15】删除delete

delete from 表名;:删除表中所有记录
delete from 表名 where 条件;:”删除满足条件的记录

mysql> delete from test2 where id<3;
Query OK, 2 rows affected (0.12 sec)

mysql> select * from test2;
+----+------+------+------+
| id | name | age  | usex |
+----+------+------+------+
|  3 | 李四 | 22   | NULL |
+----+------+------+------+
1 row in set (0.00 sec)

mysql> delete from test2;
Query OK, 1 row affected (0.07 sec)

mysql> select * from test2;
Empty set (0.00 sec)

【16】查询select

select 列名… from 表名 where 条件 group by 条件 having 分组筛选 order by 条件 limit 条件;

条件

=等值匹配
!=不等值匹配
/ >大于
<小于
/>=大于等于
<=小于等于
and逻辑与
or逻辑或
not逻辑非
between 值1 and 值2 这里要注意的是,小值在前,大值在后,包含边界值
in (值1,值2,值3…) 这里要注意列的长度
like模糊查询 其中匹配通配符%表示匹配0到多个字符,通配符_下划线表示匹配一个任意字符
not between 值1 and 值2
not in (值1,值2,值3…)
not like

排序条件

如果升降序关键字省略,默认是升序ASC
升序:由小--------------->大 ASC
降序:由大--------------->小 DESC

mysql> select * from test order by age desc ;
+----+------+------+
| id | name | age  |
+----+------+------+
|  6 | 向北 | 23   |
|  3 | 李四 | 22   |
|  5 | 牧子 | 21   |
|  1 | 张三 | 20   |
|  2 | 张三 | 20   |
|  4 | 小北 | 20   |
+----+------+------+
6 rows in set (0.04 sec)

限制返回结果个数

limit m:最多返回m个结果
limit n,m:最多返回m个结果,n代表起始下标,表示从下标为n开始

mysql> select * from test order by age desc limit 3,3;
+----+------+------+
| id | name | age  |
+----+------+------+
|  1 | 张三 | 20   |
|  2 | 张三 | 20   |
|  4 | 小北 | 20   |
+----+------+------+
3 rows in set (0.00 sec)

分组条件

count(*):表示求每组的个数
max(列名):求最大值
min(列名):求最小值
avg(列名):求平均值
sum(列名):求和

mysql> select count(*),sum(age),max(age),min(age),avg(age) from test;
+----------+----------+----------+----------+----------+
| count(*) | sum(age) | max(age) | min(age) | avg(age) |
+----------+----------+----------+----------+----------+
|        6 |      126 | 23       | 20       |       21 |
+----------+----------+----------+----------+----------+
1 row in set (0.03 sec)

having过滤

有时候筛选条件既可以写在where上也可以写在having上,优先采用where
使用having的情况是,因为where和group by 相比where先执行,但是有的时候还没有进行分组,不知道个数,就没法进行判断,所以这个时候就可以用having,having是执行在group by 之后的。

mysql> select count(*) from test group by age having count(*)>2;
+----------+
| count(*) |
+----------+
|        3 |
+----------+
1 row in set (0.05 sec)

多列分组

group by 列1,列2…
多个列取值都相同的分为一组
8多列分组时,列的顺序不影响结果

几种连接查询

表1 inner join 表2 on 连接条件
表1 left join 表2 on 连接条件
表1 right join 表2 on 连接条件

mysql> select * from student inner join SC on student.sid=SC.sid;
+------+-------+------------+------+------+-----+-------+
| sid  | sname | birthday   | sex  | sid  | cid | score |
+------+-------+------------+------+------+-----+-------+
| 1001 | 张三  | 1990-10-10 || 1001 |   1 |    50 |
| 1002 | 李四  | 1981-10-10 || 1002 |   1 |    90 |
| 1003 | 王五  | 1981-11-10 || 1003 |   1 |    59 |
| 1004 | 赵六  | 1988-10-10 || 1004 |   1 |    80 |
| 1005 | 孙七  | 1989-01-10 || 1005 |   1 |    50 |
| 1006 | 周八  | 1990-10-10 || 1006 |   1 |    60 |
| 1007 | 张三  | 1990-06-10 || 1007 |   1 |   100 |
| 1001 | 张三  | 1990-10-10 || 1001 |   2 |    70 |
| 1003 | 王五  | 1981-11-10 || 1003 |   2 |    70 |
| 1004 | 赵六  | 1988-10-10 || 1004 |   2 |    70 |
| 1005 | 孙七  | 1989-01-10 || 1005 |   2 |    50 |
| 1001 | 张三  | 1990-10-10 || 1001 |   3 |    80 |
| 1005 | 孙七  | 1989-01-10 || 1005 |   3 |   100 |
| 1001 | 张三  | 1990-10-10 || 1001 |   4 |    90 |
| 1002 | 李四  | 1981-10-10 || 1002 |   4 |    55 |
| 1005 | 孙七  | 1989-01-10 || 1005 |   4 |    30 |
| 1007 | 张三  | 1990-06-10 || 1007 |   4 |    58 |
| 1001 | 张三  | 1990-10-10 || 1001 |   5 |    80 |
| 1001 | 张三  | 1990-10-10 || 1001 |   6 |    80 |
| 1002 | 李四  | 1981-10-10 || 1002 |   6 |    90 |
| 1007 | 张三  | 1990-06-10 || 1007 |   6 |    90 |
| 1001 | 张三  | 1990-10-10 || 1001 |   7 |   100 |
| 1002 | 李四  | 1981-10-10 || 1002 |   7 |    80 |
| 1007 | 张三  | 1990-06-10 || 1007 |   7 |    80 |
+------+-------+------------+------+------+-----+-------+
24 rows in set (0.16 sec)
mysql> select * from student left join SC on student.sid=SC.sid;
+------+-------+------------+------+------+------+-------+
| sid  | sname | birthday   | sex  | sid  | cid  | score |
+------+-------+------------+------+------+------+-------+
| 1001 | 张三  | 1990-10-10 || 1001 |    1 |    50 |
| 1002 | 李四  | 1981-10-10 || 1002 |    1 |    90 |
| 1003 | 王五  | 1981-11-10 || 1003 |    1 |    59 |
| 1004 | 赵六  | 1988-10-10 || 1004 |    1 |    80 |
| 1005 | 孙七  | 1989-01-10 || 1005 |    1 |    50 |
| 1006 | 周八  | 1990-10-10 || 1006 |    1 |    60 |
| 1007 | 张三  | 1990-06-10 || 1007 |    1 |   100 |
| 1001 | 张三  | 1990-10-10 || 1001 |    2 |    70 |
| 1003 | 王五  | 1981-11-10 || 1003 |    2 |    70 |
| 1004 | 赵六  | 1988-10-10 || 1004 |    2 |    70 |
| 1005 | 孙七  | 1989-01-10 || 1005 |    2 |    50 |
| 1001 | 张三  | 1990-10-10 || 1001 |    3 |    80 |
| 1005 | 孙七  | 1989-01-10 || 1005 |    3 |   100 |
| 1001 | 张三  | 1990-10-10 || 1001 |    4 |    90 |
| 1002 | 李四  | 1981-10-10 || 1002 |    4 |    55 |
| 1005 | 孙七  | 1989-01-10 || 1005 |    4 |    30 |
| 1007 | 张三  | 1990-06-10 || 1007 |    4 |    58 |
| 1001 | 张三  | 1990-10-10 || 1001 |    5 |    80 |
| 1001 | 张三  | 1990-10-10 || 1001 |    6 |    80 |
| 1002 | 李四  | 1981-10-10 || 1002 |    6 |    90 |
| 1007 | 张三  | 1990-06-10 || 1007 |    6 |    90 |
| 1001 | 张三  | 1990-10-10 || 1001 |    7 |   100 |
| 1002 | 李四  | 1981-10-10 || 1002 |    7 |    80 |
| 1007 | 张三  | 1990-06-10 || 1007 |    7 |    80 |
+------+-------+------------+------+------+------+-------+
24 rows in set (0.00 sec)
mysql> select * from student right join SC on student.sid=SC.sid;
+------+-------+------------+------+------+-----+-------+
| sid  | sname | birthday   | sex  | sid  | cid | score |
+------+-------+------------+------+------+-----+-------+
| 1001 | 张三  | 1990-10-10 || 1001 |   1 |    50 |
| 1002 | 李四  | 1981-10-10 || 1002 |   1 |    90 |
| 1003 | 王五  | 1981-11-10 || 1003 |   1 |    59 |
| 1004 | 赵六  | 1988-10-10 || 1004 |   1 |    80 |
| 1005 | 孙七  | 1989-01-10 || 1005 |   1 |    50 |
| 1006 | 周八  | 1990-10-10 || 1006 |   1 |    60 |
| 1007 | 张三  | 1990-06-10 || 1007 |   1 |   100 |
| 1001 | 张三  | 1990-10-10 || 1001 |   2 |    70 |
| 1003 | 王五  | 1981-11-10 || 1003 |   2 |    70 |
| 1004 | 赵六  | 1988-10-10 || 1004 |   2 |    70 |
| 1005 | 孙七  | 1989-01-10 || 1005 |   2 |    50 |
| 1001 | 张三  | 1990-10-10 || 1001 |   3 |    80 |
| 1005 | 孙七  | 1989-01-10 || 1005 |   3 |   100 |
| 1001 | 张三  | 1990-10-10 || 1001 |   4 |    90 |
| 1002 | 李四  | 1981-10-10 || 1002 |   4 |    55 |
| 1005 | 孙七  | 1989-01-10 || 1005 |   4 |    30 |
| 1007 | 张三  | 1990-06-10 || 1007 |   4 |    58 |
| 1001 | 张三  | 1990-10-10 || 1001 |   5 |    80 |
| 1001 | 张三  | 1990-10-10 || 1001 |   6 |    80 |
| 1002 | 李四  | 1981-10-10 || 1002 |   6 |    90 |
| 1007 | 张三  | 1990-06-10 || 1007 |   6 |    90 |
| 1001 | 张三  | 1990-10-10 || 1001 |   7 |   100 |
| 1002 | 李四  | 1981-10-10 || 1002 |   7 |    80 |
| 1007 | 张三  | 1990-06-10 || 1007 |   7 |    80 |
+------+-------+------------+------+------+-----+-------+
24 rows in set (0.00 sec)

outer可以省略

连接查询的等价写法

** select … from 表1,表2 where 连接条件**
select … from 表1, inner join 表2 using (列名)

mysql> select * from student inner join SC using(sid);
+------+-------+------------+------+-----+-------+
| sid  | sname | birthday   | sex  | cid | score |
+------+-------+------------+------+-----+-------+
| 1001 | 张三  | 1990-10-10 ||   1 |    50 |
| 1002 | 李四  | 1981-10-10 ||   1 |    90 |
| 1003 | 王五  | 1981-11-10 ||   1 |    59 |
| 1004 | 赵六  | 1988-10-10 ||   1 |    80 |
| 1005 | 孙七  | 1989-01-10 ||   1 |    50 |
| 1006 | 周八  | 1990-10-10 ||   1 |    60 |
| 1007 | 张三  | 1990-06-10 ||   1 |   100 |
| 1001 | 张三  | 1990-10-10 ||   2 |    70 |
| 1003 | 王五  | 1981-11-10 ||   2 |    70 |
| 1004 | 赵六  | 1988-10-10 ||   2 |    70 |
| 1005 | 孙七  | 1989-01-10 ||   2 |    50 |
| 1001 | 张三  | 1990-10-10 ||   3 |    80 |
| 1005 | 孙七  | 1989-01-10 ||   3 |   100 |
| 1001 | 张三  | 1990-10-10 ||   4 |    90 |
| 1002 | 李四  | 1981-10-10 ||   4 |    55 |
| 1005 | 孙七  | 1989-01-10 ||   4 |    30 |
| 1007 | 张三  | 1990-06-10 ||   4 |    58 |
| 1001 | 张三  | 1990-10-10 ||   5 |    80 |
| 1001 | 张三  | 1990-10-10 ||   6 |    80 |
| 1002 | 李四  | 1981-10-10 ||   6 |    90 |
| 1007 | 张三  | 1990-06-10 ||   6 |    90 |
| 1001 | 张三  | 1990-10-10 ||   7 |   100 |
| 1002 | 李四  | 1981-10-10 ||   7 |    80 |
| 1007 | 张三  | 1990-06-10 ||   7 |    80 |
+------+-------+------------+------+-----+-------+
24 rows in set (0.00 sec)

【17】常用函数

rand():生成一个从[0.0~1.0)的值,左闭右开
round():四舍五入
floor():去掉小数部分
left(字符串,n):n代表从左边要截取n个字符
lower():转小写
upper():转大写
substr(字符串,下标,长度):从下标开始截取指定长度
chara_length():求字符串长度
year():截取年份
month():截取月份
day():截取日
data_add(日期,时间间隔):时间间隔
其中时间间隔的语法:interval n单位
extract(day-minute from’2009-07-02 12:02:03’):截取时间

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值