mysql入门教程——基本操作

一、MySQL基础

1、数据库介绍

数据库:它本身一个软件,由数据库厂商提供。主要存储和管理数据。

数据库的使用场景:数据集群模型。学习阶段单点的数据库。以mysql为主。

常见的数据库:

  • mysql:Oracle公司提供,分为商业版和社区版,互联网企业。
  • Oracle:Oracle公司提供,收费版。政府,银行等传统企业是单位。
  • sqlServer:微软,收费。
  • DB2:IBM公司提供。收费。

2、mysql安装和配置

详细图文步骤见链接: mysql安装和配置.

3、超管密码修改

登录安装mysql的操作系统。

停止mysql服务:

在这里插入图片描述

  1. 停止mysql服务器 运行输入services.msc 停止mysql服务

  2. 在cmd下 输入 mysqld --skip-grant-tables 启动服务器 光标不动 (不要关闭该窗口)

  3. 新打开cmd 输入mysql -u root -p 不需要密码

use mysql;

update user set password=password(‘abc’) WHERE User=‘root’;

  1. 关闭两个cmd窗口 在任务管理器结束mysqld 进程

  2. 在服务管理页面 重启mysql 服务。

二、数据库的操作

1、SQL语句

SQL:结构化的查询语句。由W3C组织制定。标准的数据库的操作语言,不区分数据库。

SQL语句的分类:

DML:数据操纵语言,主要针对的是insert、update、delete操作

DCL:数据控制语言,主要针对的用户权限,表和库的权限,事务控制等等

DQL:数据查询语句,主要针对的是select语句

DDL:数据定义语言,主要针对的是库和表的CRUD(create, read, update, delete)语句。

2、数据库操作

2.1、查询数据库

-- 查询所有数据库
SHOW DATABASES;
-- 查询某个数据库的编码
SHOW CREATE DATABASE test;

2.2、创建数据库

-- 创建库
CREATE DATABASE demo1;
-- 创建数据库的时候指定编码表
-- GB2312、GBK、GB18030、UTF-8(unicode)、ISO-8859-1(拉丁文)
CREATE DATABASE demo2 CHARACTER SET gbk;
-- 修改库的校对规则
CREATE DATABASE demo3 CHARACTER SET utf8 COLLATE utf8_bin;

2.3、删除数据库

-- 删除数据库
DROP DATABASE demo4;

2.4、修改数据库

-- 修改数据库编码表
ALTER DATABASE demo3 CHARACTER SET gbk;

针对mysql数据库创建的数据库,在数据文件夹中每个库都会应一个独立的文件夹。在文件中db.opt存放库的编码和校对规则。

在mysql的安装目录下由my.ini文件,是mysql的核心配置文件。
在这里插入图片描述

三、数据表的操作

在操作数据表之前,一定要记住:切换到某个库下。

-- 切换数据
use 库名;

1、创建数据表

-- 创建表
CREATE TABLE tb_user(
  id INT,
  username VARCHAR(10),
  age INT
);

创建表的时候,表的每个列名和表名不要和SQL中的关键字重名。

定义数据表中的每列都必须明确具体的数据类型

数字:TINYINT 、SMALLINT、INT、BIGINT、FLOAT、DOUBLE

字符串:char(长度)、varchar(长度)

​ char(10):数据表的列最多只能存放10字符数据,如果不足10个,使用空格补够10个,超过报错

​ varchar(10):数据表的列最多只能存放10字符数据,如果不足10个,长度会发生变化,超过报错

日期:

date (只有日期)

​ time(只有时间)

datetime(日期时间都有)

​ timestamp(日期时间都有 ):时间戳

文件数据类型:

​ blob(存放大二进制数据)

​ text(存放大的文本文件)

tinyblob tinytext 255字节    

​ blob text 64KB

​ mediumblob mediumtext 16MB

​ longblob longtext 4GB

实际开发中,文件不会给数据库中存储。采用专业的文件管理服务器存储,然后将文件在服务器上的存储位置存放在数据库中。

2、单表约束

  • 主键约束:primary key , 它是保证当前这一行数据与其他行不重复。主键列的数据不能重复,也不能存放null.
  • 非空约束:not null , 这个列中不能包含null。
  • 唯一约束:unique , 这列的数据不能重复。

一个表中主键一般只有一列或两列(联合主键)。主键会自动添加索引(主键索引)。

一个表中的唯一约束可以添加在多列上。

例如:京东的用户表,表中肯定有主键,但是一定有账号列,这列是不能重复的。

3、删除表

-- 删除表
drop table 表名;

4、修改表

表结构修改语法:

alter table 表名 增/删/改 列名 类型( 长度) 约束;

1、增加列: alter table 表名 add [column]列名 类型(长度) 约束;

2、修改现有列类型、长度和约束 语法:alter table 表名 modify 列名 类型(长度) 约束;

3、修改现有列名称 语法:alter table 表名 change 旧列名 新列名 类型(长度) 约束;

4、删除现有列 语法:alter table 表名 drop 列名 ;

5、修改表名 :rename table 旧表名 to 新表名;

6、修改表的字符集:alter table 表名 character set 编码表名;

5、查询表结构

desc 表名; 查看表结构

show tables ; 查看当前库内所有表名

show create table 表名; 查看建表语句和字符集

所有数据表结构操作语句都是 DDL

四、表中的数据操作

1、创建数据表

-- 创建学生表
create table student(
	id int primary key auto_increment,
	sage int ,
	sname varchar(32) not null,
	gender varchar(10) not null,
	score double not null,
	birthday date
);

在创建表结构的时候,如果主键是整数类型,那么可以借助mysql的主键自增长策略,在插入数据的时候,可以省略主键的数据。

2、表中插入数据

语法:insert into 表名 (列名,列名,列名…) values (值,值,值…);

  • 如果表的主键是自增长的,这时插入的时候,主键可以写null,但是不是将null存放到主键列上,而是让数据库自己维护主键的数据。
  • 如果列的类型是varchar、char、date、datetime类型需要插入数据的时候,使用单引号引用
INSERT INTO student
            (id,
             sage,
             sname,
             gender,
             score,
             birthday)
VALUES (NULL,
        22,
        '张三',
        '男',
        99.89,
        '2020-07-18');
  • 如果某些列不需要插入数据,可以在插入的时候省略这些列
INSERT INTO student(sname , gender,score)VALUES('李四','男',89.00);     
  • 如果是给表中的所有列都插入数据,这时可以省略列名
INSERT INTO student VALUES(NULL,18,'赵四','男',60,'1999-01-01'); 

如果使用dos窗口插入数据,可能会有中文乱码问题:

告诉数据库当前提交的数据,采用的GBK编码,那么数据库就会进行编码的转换。

通过 show variables like 'character%'; 插入mysql支持的客户端和服务器的编码。

3、修改表数据

语法:update 表名 set 列名=值 ,列名=值 ,列名=值 ,列名=值 [ where 条件 ]

一般要求在数据表数据修改的时候必须添加where进行条件的限制。否则整张表的数据修改。

-- 修改表数据
-- 不添加条件修改
UPDATE student SET sage = 28;

-- 添加条件修改
UPDATE student SET sname = '王五' WHERE id = 1;
UPDATE student SET sname = 'zhaoliu' , gender = '女' ,score = 100 WHERE id = 2;
UPDATE student SET gender = '女' ,score = 100 WHERE sname = '赵四';

4、删除表数据

语法:delete from 表名 [where 条件]

删除操作也应该添加条件,否则删除整张表的数据。

-- 删除操作
DELETE FROM student WHERE id = 5;
INSERT INTO student VALUES(NULL,22,'张三','女',88,'2020-02-02');

DELETE FROM student WHERE sname = 'abc';

-- 删除整张表中的数据
DELETE FROM student ;
-- 删除整张表中的数据
TRUNCATE TABLE student;

DELETE : 将表的中的数据逐行删除。

TRUNCATE:直接使用drop将表删除,然后重新创建一个新的表。

delete语句以通过事务进行控制,TRUNCATE属于ddl语句,无法通过事务控制

5、查询数据

5.1、基础查询

查询语法:select 列名,列名,列名,列名,列名,列名… from 表名 where 条件

-- 查询操作
INSERT INTO student (id,sage,sname,gender,score,birthday) VALUES(NULL,23,'zhangsan','male',98.99,'1990-09-09');
INSERT INTO student (id,sage,sname,gender,score,birthday) VALUES(NULL,23,'lisi','男',56.99,'1990-02-09');
INSERT INTO student (id,sage,sname,gender,score,birthday) VALUES(NULL,24,'王五','女',75.99,'1988-01-01');
INSERT INTO student (id,sage,sname,gender,score,birthday) VALUES(NULL,25,'赵六','男',80.99,'1980-11-12');
INSERT INTO student (id,sage,sname,gender,score,birthday) VALUES(NULL,18,'田七','女',80.99,'1980-11-12');
-- 查询表中所有数据
SELECT * FROM student;
-- 添加条件查询
SELECT * FROM student WHERE id = 1;
-- 根据姓名查询
SELECT * FROM student WHERE sname = 'lisi';
-- 查询姓名和成绩
SELECT sname ,score FROM student;
-- 查询成绩,相同只显示一个
SELECT score FROM student;
-- 使用DISTINCT去重
SELECT  DISTINCT score FROM student;
-- 查询的成绩+10分
SELECT sname , sage , score + 10 FROM student;

在查询的时候,给查询数据直接进行运算,只是查询的结构数据发生变化,而数据库中的数据没有改变。

上面的查询操作,出现小数精度问题(计算中所有的小数都是近似值)。

如果数据库中需要小数精确值,列的类型可以使用DECIMAL(M,D), NUMERIC(M,D)

-- m 表示数字的个数,d小数位数
ALTER TABLE student MODIFY score NUMERIC(5,2);
-- 别名: 列名或表名 [as] 别名
-- 给查询列或者表使用别名
SELECT sname AS 姓名 , sage AS 年龄 , score + 10 成绩 FROM student  s;
-- 别名的面试题
-- 查询表中的sage 和score两列的数据
SELECT sage , score FROM student;
-- 查询表中的sage列的数,并起别名为score
SELECT sage  score FROM student;

5.2、and、or、null使用

-- 查询成绩在80~100的学生
SELECT * FROM student WHERE score >= 80 AND score <= 100;
SELECT * FROM student WHERE score >= 80 && score <= 100;
SELECT * FROM student WHERE score BETWEEN 80 AND 100;

-- 查询年龄为null的学生信息
SELECT * FROM student WHERE sage IS NULL;
-- 查询年龄不为null的学生信息
SELECT * FROM student WHERE sage IS NOT NULL;

-- 查询性别为男,或者成绩大于80
SELECT * FROM student WHERE gender = '男' OR score > 80;

重要事项:不同的数据库对 BETWEEN…AND 操作符的处理方式是有差异的。有的是左闭右开,有的是都闭合,between前面可加not。

5.3、列表in的使用

-- in的用法
-- 查询年龄为23或25的学生
SELECT * FROM student WHERE sage = 23 OR sage = 25;
SELECT * FROM student WHERE sage  NOT IN( 23 , 25 );

5.4、模糊条件使用

语法: select 列名, 列名, 列名, 列名, 列名… from 表名 where 列名 like 值

模糊查询的like关键字后面的值书写有两种情况:

  • % :匹配任意个字符
  • _ : 匹配一个位置
-- 模糊查询
-- 查询所有姓张的学生数据
SELECT * FROM student WHERE sname LIKE '张%';
-- 查询拥有两个字姓名的学生
SELECT * FROM student WHERE sname LIKE '__';
-- 查询姓名中包含某个字的学生
SELECT * FROM student WHERE sname LIKE '%张%';

当%,_需要作为模糊查询的查询条件时,需要通过转译,如下:

SELECT * FROM students WHERE sname LIKE '/%__/_' ESCAPE '/';
-- 查询结果如下

在这里插入图片描述
escape '/'代表/之后的第一个%或者_不作为通配符。

5.5、排序查询

-- 排序查询 order by 列名 asc | desc 
-- 查询所有的学生数据,按照年龄升序
SELECT * FROM student ORDER BY sage ASC;
-- 查询所有的学生数据,按照年龄升序,年龄相同,成绩降序
SELECT * FROM student ORDER BY sage ASC , score DESC;
-- 查询年龄大于15 小于 25 的升序  , 先执行的条件过滤,然后将结果排序
SELECT * FROM student WHERE sage > 15 && sage < 25 ORDER BY sage ASC;

6、分组函数

分组:是对数据表中的数据按照一定的规律进行划分档次。同一档次的属于一组。

聚集函数:也成为分组函数,主要是指SQL语句中的内置函数。用于分组统计。

6.1、count函数

count:统计符合条件的数据个数。

-- 统计学生个数
-- select count(列名) from student;
SELECT COUNT(sage) FROM student;

count函数在使用的时候:传递的参数:

COUNT(*): 在统计的时候,如果这列值为null,找本列后面的一列,如果当前一行都是null,不统计

COUNT(主键): 只能统计主键这列,由于主键唯一并不为null,统计整个表中的记录数。

count(列名): 统计指定的那列的数据个数,如果有null,不统计。

-- 统计成绩大于80分个数
SELECT COUNT(id) FROM student WHERE score > 80;

6.2、sum求和

sum:计算某些列的和值。

-- 统计总成绩
SELECT SUM(score) FROM student;

-- 统计年龄和成绩
SELECT SUM(sage) , SUM(score) FROM student;

-- 将年龄和成绩总和相加
SELECT SUM(sage) + SUM(score) FROM student;
-- 由于sage中存在null,因此导致相加的结果不对
SELECT SUM(sage + score) FROM student;

-- 在mysql中有个ifnull的函数,可以判断某个列的值是否为null,然后给其指定默认值
SELECT SUM( IFNULL(sage , 0) + IFNULL(score , 0) ) FROM student;

6.3、max和min函数

-- 最值max   min
-- 年龄的最大的和最小的
SELECT MAX(sage) , MIN(sage) FROM student;

6.4、avg函数

-- 成绩的平均值
SELECT AVG(score) FROM student;
SELECT SUM(score) / COUNT(id) FROM student;

6.5、group by 分组

-- 分组
-- 统计每类商品的总价
SELECT product , SUM(price) FROM orders GROUP BY product;

-- 查询购买了几类商品,并且每类总价大于100的商品
-- 聚集(分组)函数,不能使用在where的条件中,必须使用having关键字代替where
-- select count(product) from orders  GROUP BY product where sum(price) > 100;

SELECT product , COUNT(product) FROM orders  GROUP BY product HAVING SUM(price) > 100;

-- 分组 ,过滤, 排序
SELECT product , COUNT(product) FROM orders  GROUP BY product HAVING SUM(price) > 100 ORDER BY product ASC;

where 和 having 条件语句的区别 ?

where 是在分组前进行条件过滤,having 是在分组后进行条件过滤

使用where地方都可以用 having替换 , 但是having可以使用分组函数,而where后不可以用分组函数

五、数据库备份和恢复

1、备份数据

在mysql的安装目录的bin目录下有mysqldump命令,可以完成对数据库的备份。

语法:mysqldump -u 用户名 -p 数据库名 > 磁盘SQL文件路径

由于mysqldump命令不是sql命令,需要在dos窗口下使用。

演示:

1、重新开启一个新的dos窗口。

2、导出数据。
在这里插入图片描述

2、恢复

通过上面的命令备份的数据,导出库中的所有数据,但是没有创建库的语句。因此在恢复的时候,需要手动创建库。

在这里插入图片描述
恢复数据库:

在这里插入图片描述

MySQL入门学习(1)。   MySQL入门学习(1) · 安装篇 PHP+MySQL+Linux目前已逐渐成为小型web服务器的一种经典组合。在indows环境下构筑和调试MySQL数据库是许多网站开发者的一种首选。本人在Windows98环境下初学MySQL,现将学习过程与经验总结出来供大家参考。 1、下载mysql-3.23.35-win.zip并解压; 2、运行setup.exe;选择d:\mysql,"tyical install" 3、启动mysql,有如下方法: · 方法一:使用winmysqladmin 1)、进入d::\mysql\bin目录,运行winmysqladmin.exe,在屏幕右下角的任务栏内会有一个带红色的图符 2)、鼠标左键点击该图符,选择“show me”,出现“WinMySQLAdmin”操作界面;首次运行时会中间会出现一个对话框要求输入并设置你的用户名和口令 3)、选择“My.INI setup” 4)、在“mysqld file”中选择“mysqld-opt”(win9x)或“mysqld-nt”(winNT) 5)、选择“Pick-up or Edit my.ini values”可以在右边窗口内对你的my.ini文件进行编辑 6)、选择“Save Modification”保存你的my.ini文件 7)、如果你想快速使用winmysqladmin(开机时自动运行),选择“Create ShortCut on Start Menu” 8)、测试: 进入DOS界面; 在d:\mysql\bin目录下运行mysql,进入mysql交互操作界面 输入show databases并回车,屏幕显示出当前已有的两个数据库mysql和test · 方法二:不使用winmysqladmin 1)、在DOS窗口下,进入d:/mysql/bin目录 2)、win9X下)运行: mysqld 在NT下运行: mysqld-nt --standalone 3)、此后,mysql在后台运行 4)、测试mysql:(在d:/mysql/bin目录下) a)、mysqlshow 正常时显示已有的两个数据库mysql和test b)、mysqlshow -u root mysql 正常时显示数据库mysql里的五个表: columns_priv db host tables_priv user c)、mysqladmin version status proc 显示版本号、状态、进程信息等 d)、mysql test 进入mysql操作界面,当前数据库为test 5)、mysql关闭方法: mysqladmin -u root shutdown 4、至此,MySQL已成功安装,接着可以熟悉MySQL的常用命令并创建自己的数据库了。 上篇讲了如何安装并测试MySQL,环境建好后就可以继续我们的学习了。本篇主要熟悉一写常用命令。 · 1、启动MySQL服务器 实际上上篇已讲到如何启动MySQL。两种方法: 一是用winmysqladmin,如果机器启动时已自动运行,则可直接进入下一步操作。 二是在DOS方式下运行 d:mysqlbinmysqld · 2、进入mysql交互操作界面 在DOS方式下,运行: d:mysqlbinmysql 出现: mysql 的提示符,此时已进入mysql的交互操作方式。 如果出现 "ERROR 2003: Can´t connect to MySQL server on ´localhost´ (10061)“, 说明你的MySQL还没有启动。 · 3、退出MySQL操作界面 在mysql>提示符下输入quit可以随时退出交互操作界面: mysql> quit Bye 你也可以用control-D退出。 · 4、第一条命令 mysql> select version(),current_date(); +----------------+-----------------+ | version() | current_date() | +----------------+-----------------+ | 3.23.25a-debug | 2001-05-17 | +----------------+-----------------+ 1 row in set (0.01 sec) mysql> 此命令要求mysql服务器告诉你它的版本号和当前日期。尝试用不同大小写操作上述命令,看结果如何。 结果说明mysql命令的大
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值