一、数据库服务的启动与登录
MySQL服务器启动方式有两种:
1)通过服务的方式自动启动
2)手动启动的方式
1、Windows服务方式启动
操作步骤:
2、DOS命令方式启动
2.1操作步骤:
3、控制台连接数据库
MySQL是一个需要账户名密码登录的数据库,登陆后使用,它提供了一个默认的root账号,使用安装时设置的密码即可登录
3.1 登录格式1:u和p后面没有空格
mysql-u用户名-p密码
后输入密码
3.2 登录格式2:
mysql-hip地址-u用户名-p密码
127.0.0.1代表本机的IP地址
3.3 登录格式3:
3.4 退出MySQL:
quit或exit
4、SQLyog图形化工具------客户端
SQLyog是业界著名的Webyog公司出品的一款简洁高效、功能强大的图形化MySQL数据库管理工具。使用SQLyog可以快速直观地让您从世界的任何角落通过网络来维护远端的MySQL数据库
4.1使用SQLyog登录数据库
4.2 MySQL目录结构
MySQL目录结构 | 描述 |
---|---|
bin<目录> | 所有mysql的可执行文件,如:mysql.exe |
MySQLInstanceConfig.exe | 数据库的配置向导,在安装时出现的内容 |
data<目录> | 系统必须的数据库所在的目录 |
my.ini文件 | mysql的配置文件,一般不建议去修改 |
c:\ProgramData\MySQL\MySQLServer5.5\data\ | 我们自己创建的数据库所在的文件夹 |
4.3 数据库管理系统
数据库管理系统(DataBaseManagementSystem,DBMS):指一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理系统访问数据库中表内的数据
4.4数据库管理系统、数据库和表的关系
数据库管理程序(DBMS)可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。为保存应用中实体的数据,一般会在数据库创建多个表,以保存程序中实体User的数据。数据库管理系统、数据库和表的关系如图所示:
*结论:
1)一个数据库服务器包含多个库
2)一个数据库包含多张表
3)一张表包含多条记录
二、如何学习MySQL
1.SQL的概念
1.1 什么是SQL
StructuredQueryLanguage结构化查询语言
1.2 SQL作用
1)是一种所有关系型数据库的查询规范,不同的数据库都支持。
2)通用的数据库操作语言,可以用在不同的数据库中。
3)不同的数据库SQL语句有一些区别
1.3 SQL语句分类
1)DataDefinitionLanguage(DDL数据定义语言)如:建库,建表
2)DataManipulationLanguage(DML数据操纵语言),如:对表中的记录操作增删改
3)DataQueryLanguage(DQL数据查询语言),如:对表中的查询操作
4)DataControlLanguage(DCL数据控制语言),如:对用户权限的设置
1.4 MySQL的语法
1)每条语句以分号结尾,如果在SQLyog中不是必须加的。
2)SQL中不区分大小写,关键字中认为大写和小写是一样的
3)3种注释:
注释的语法 | 说明 |
---|---|
- -空格 | 单行注释 |
/* */ | 多行注释 |
# | 这是MySQL特有的注释方式 |
2 DDL操作数据库
2.1创建数据库
2.1.1创建数据库的几种方式
*创建数据库
## CREATE DATABASE 数据库名;
*判断数据库是否已经存在,不存在则创建数据库
***CREATE DATABASE IF NOT EXISTS数据库名;
*创建数据库并指定字符集
CREATE DATABASE 数据库名 CHARACTER SET 字符集;
2.1.2具体操作:
直接创建数据库db1
create database db1;
判断是否存在,如果不存在则创建数据库db2
create database if not exists db2;
创建数据库并指定字符集为gbk
create database db3 default character set gbk;
2.2 查看数据库
按tab键可以自动补全关键字
查看所有的数据库
show databases;
查看某个数据库的定义信息
show create database db3;
show create database db1;
2.3 修改数据库
2.3.1 修改数据库默认的字符集
ALTER DATABASE 数据库名 DEFAULT CHARACTER SET字符集;
2.3.2删除数据库
删除数据库的语法
DROP DATABASE 数据库名;
具体操作:
每行SQL语句需要选中再执行,可以按F9
*删除db2数据库
drop databasedb2;
2.4 使用数据库
2.4.1 查看正在使用的数据库
SELECT DATABASE**()**使用的一个mysql中的全局函数
2.4.2使用/切换数据库
USE 数据库名;
2.4.3具体操作:
查看正在使用的数据库
select database();
改变要使用的数据库
use db4;
2.5 DDL操作表结构
*前提先使用某个数据库
2.5.1创建表
创建表的格式
CREATE TABLE 表名(
字段名1 字段类型1,
字段名2 字段类型2
);
2.5.2 关键字说明
创建表的关键字 | 说明 |
---|---|
CREATE | 创建 |
TABLE | 表 |
MySQL数据类型
2.5.3 常使用的数据类型如下:
类型 | 描述 |
---|---|
int | 整形 |
double | 浮点型 |
varchar | 字符串型 |
data | 日期类型,格式为yy-MM-dd,只有年月日,没有时分秒; |
2.5.4详细的数据类型如下
分类 | 类型名称 | 类型说明 |
---|---|---|
整型 | tingint | 微整型:很小的整数(占8位二进制) |
整型 | smallint | 小整型:小的整数(占16位二进制) |
整型 | mediumint | 中整型:中等长度的整数(占24位二进制) |
整型 | int(integer) | 整型:整数类型(占32位二进制) |
小数 | float | 单精度浮点数,占4个字节 |
小数 | double | 双精度浮点数,占8个字节 |
日期 | time | 表示时间类型 |
日期 | date | 表示日期类型 |
日期 | datetime | 同时可以表示日期和时间类型 |
字符串 | char(m) | 固定长度的字符串,无论使用几个字符都占满全部,M为0~255之间的整数 |
字符串 | varchar() | 可变长度的字符串,使用几个字符就占用几个,M为0~65535之间的整数 |
大二进制 | tinyblob Big Large Object | 允许长度0~255字节 |
大二进制 | blob | 允许长度0~65535字节 |
大二进制 | mediumblob | 允许长度0~167772150字节 |
大二进制 | longblob | 允许长度0~4294967295字节 |
大文本 | tinytext | 允许长度0~255字节 |
大文本 | text | 允许长度0~65535字节 |
大文本 | mediumtext | 允许长度0~167772150字节 |
大文本 | longtext | 允许长度0~4294967295字节 |
2.5.5 具体操作:
创建student表包含id,name,birthday字段
create table student(
id int, --整数
name varchar(20),- -字符串
birthday date- -生日,最后没有逗号
);
2.6 查看表
2.6.1 查看某个数据库中的所有表
SHOW TABLES;
2.6.2 查看表结构
DESC 表名;
2.6.3 查看创建表的SQL语句
SHOW CREATETABLE表名;
2.6.4 具体操作:
查看day21数据库中的所有表
use day21;
show tables;
查看student表的结构
desc student;
执行结果:
查看student的创建表SQL语句
show create table student;
执行结果:
存在的目的是为了避免关键字的冲突
2.7 快速创建一个表结构相同的表
2.7.1语法
CREATE TABLE 新表名 LIKE 旧表名;
2.7.2具体操作:
创建s1表,s1表结构和student表结构相同
2.8 删除表
2.8.1 直接删除表
DROP TABLE 表名;
2.8.2 判断表是否存在,如果存在则删除表
DROP TABLE IF EXISTS 表名;
2.8.3 具体操作:
*与直接删除的区别
如果表不存在,不删除,存在则删除
2.9修改表结构
2.9.1 添加表列ADD
ALTER TABLE 表名 ADD 列名类型;
为学生表添加一个新的字段remark,类型为varchar(20)
alter table student add remark varchar(20);
2.9.2修改列类型MODIFY
ALTER TABLE 表名 MODIFY 列名 新的类型;
将student表中的remark字段的改成varchar(100)
alter table student modify remark varchar(100);
2.9.3 修改列名 CHANGE
ALTER TABLE 表名 CHANGE 旧列名 新列名 类型;
2.9.4 删除列 DROP
ALTER TABLE 表名 DROP 列名;
删除student表中的字段into
2.9.5 修改表名
RENAME TABLE 表名 TO 新表名;
将学生表student改名成student2
rename table student to student2;
2.9.6 修改字符集 character set
ALTER TABLE 表名character set 字符集;
将student2表的编码修改成gbk
alter table student 2 character set gbk;
三、DML操作表中的数据
用于对表中的记录进行增删改操作
1.1插入记录
INSERT [INTO] 表名 [字段名] VALUES(字段值)
INSERT INTO 表名:表示往哪张表中添加数据
(字段名1,字段名2,…):要给哪些字段设置值
VALUES(值1,值2,…):设置具体的值
1.1.1插入全部字段
*所有的字段名都写出来
INSERT INTO 表名 (字段名1,字段名2,字段名3…) VALUES (值1,值2,值3);
*不写字段名
INSERT INTO 表名 VALUES(值1,值2,值3…);
1.1.2插入部分数据
INSERT INTO 表名 (字段名1,字段名2,…) VALUES(值1,值2,…);
*注:没有添加数据的字段会使用NULL
1.1.3具体操作:
*插入所有的列,向学生表中
insert into student (id,name,age,sex) values (1,‘孙悟空’,20,‘男’);
insert into student (id,name,age,sex) values (2,‘孙悟天’,16,‘男’);
执行效果:
*向表中插入所有字段
执行效果:
2.2 更新表记录
2.21 不带条件修改数据
UPDATE 表名 SET 字段名=值 ;- -修改所有的行
2.2.2带条件修改数据
UPDATE 表名 SET 字段名 = 值WHERE 字段名 = 值;
2 .2.3具体操作:
2.3 删除表记录
DELETE FROM 表名 [WHERE 条件表达式]
如果没有指定 WHERE 子句,MySQL表中的所有记录将被删除。
你可以在 WHERE 子句中指定任何条件
2.3.1 不带条件删除数据
DELETE FROM 表名;
2.3.2 带条件删除数据
DELETE FROM 表名 WHERE 字段名 = 值;
2.3.3 使用truncate删除表中所有记录
TRUNCATE TABLE 表名;
2.3.4 truncate和delete的区别:
truncate相当于删除表的结构,再创建一张表。
2.3.5具体操作:
四、DQL查询表中的数据
查询不会对数据库中的数据进行修改.只是一种显示数据的方式
SELECT 列名 FROM 表名 [WHERE 条件表达式]
1)SELECT 命令可以读取一行或者多行记录。
2)你可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据
3)你可以使用WHERE语句来包含任何条件。
4.1简单查询
4.1.1查询表所有行和列的数据
使用表示所有列
SELECT * FROM表名;
查询所有的学生:
select * fromstudent;
4.1.2查询指定列
查询指定列的数据,多个列之间以逗号分隔
SELECT 字段名1,字段名2,字段名3,…FROM 表名;
查询student表中的name和age列
select name,age from student;
4.2指定列的别名进行查询
4.2.1使用关键字
使用别名的好处:显示的时候使用新的名字,并不修改表的结构。
4.2.2语法:
对列指定别名
SELECT 字段名1 AS 别名, 字段名 2 AS 别名… FROM 表名;
对列和表同时指定别名
SELECT 字段名1 AS 别名 ,字段名2 AS 别名… FROM 表名 AS 表别名;
4.2.3具体操作:
**使用别名
select name as 姓名, age as 年龄 from student;
表使用别名
select st.name as 姓名 , age as 年龄 from student as st
表使用别名的原因:用于多表查询操作
4.3清除重复值
4.3.1 查询指定列并且结果不出现重复数据
SELECT DISTINCT 字段名 FROM 表名;
4.3.2具体操作:
查询学生来至于哪些地方
查询学生来至于哪些地方
select address from student;
去掉重复的记录
select distinct address from student;
4.4查询结果参与运算
4.4.1某列数据和固定值运算
SELECT 列名1 + 固定值 FROM 表名;
4.4.2某列数据和其他列数据参与运算
SELECT 列名1 + 列名2 FROM 表名;
注意:参与运算的必须是数值类型
4.4.3需求:
准备数据:添加数学,英语成绩列,给每条记录添加对应的数学和英语成绩,查询的时候将数学和英语的成绩相加
4.4.4实现:
4.5 条件查询
4.5.1为什么要条件查询
如果没有查询条件,则每次查询所有的行。实际应用中,一般要指定查询的条件。对记录进行过滤。
4.5.2条件查询的语法
、
SELECT 字段名 FROM 表名 WHERE 条件;
流程:取出表中的每条数据,满足条件的记录就返回,不满足条件的记录不返回
准备数据
创建一个学生表,包含如下列:
运算符
具体操作
逻辑运算符
逻辑运算符 | 说明 |
---|---|
and或&& | 与,SQL中建议使用前者,后者并不通用。 |
or | 或 |
not | 非 |
具体操作
in 关键字
SELECT 字段名 FROM 表名 WHERE 字段 in (数据1,数据2…);
in 里面的每个数据都会作为一次条件,只要满足条件的就会显示
具体操作:
查询id是1或3或5的学生
select * from student3 where id in(1,3,5);
查询id不是1或3或5的学生
select * from student3 where id not in (1,3,5);
范围查询
BETWEEN 值1 AND 值2
表示从值1到值2范围,包头又包尾
比如:age BETWEEN 80 AND 100 相当于:age>=80&&age<=100
查询english成绩大于等于75,且小于等于90的学生
select * from student3 where english between 75 and 90;
like关键字
LIKE表示模糊查询
SELECT * FROM 表名 WHERE 字段名 LIKE ‘通配符字符串’;
MySQL通配符
通配符 | 说明 |
---|---|
% | 匹配任意多个字符 |
- | 匹配一个字符 |
查询姓马的学生
select * from student3 where name like ‘马%’;
select * from student3 where name like ‘马’;
查询姓名中包含’德’字的学生
select * from student3 where name like ‘%德%’;
查询姓马,且姓名有两个字的学生
select * from student3 where name like’马_’;
----注:部分截图来自传智播客