什么是MySQL
MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。
与其他的大型数据库例如:Oracle,DB2、SQL Server等相比,MySQL自有它的不足之处,但是这丝毫也没有减少它受欢迎的程度。对于一般的个人使用者和中小型企业来说,MySQL提供的功能已经绰绰有余,而且由于 MySQL是开放源码软件,因此可以大大降低总体拥有成本。
mysql的下载和安装
mysql5.7 64位下载地址:https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.19-winx64.zip
1.下载后得到zip压缩包.
2.解压到自己想要安装到的目录,本人解压到的是D:\Environment\mysql-5.7.19
3.添加环境变量
- 我的电脑->属性->高级->环境变量
- 选择PATH,在其后面添加: 你的mysql 安装文件下面的bin文件夹
- 在D:\Environment\mysql-5.7.19下新建 my.ini 文件
- 编辑 my.ini 文件 ,注意替换路径位置
1 [mysqld]
2 basedir=D:\Program Files\mysql-5.7\
3 datadir=D:\Program Files\mysql-5.7\data\
4 port=3306
5 skip-grant-tables
- 启动管理员模式下的CMD,并将路径切换至mysql下的bin目录,然后输入mysqld –install (安装mysql)
- 再输入 mysqld --initialize-insecure --user=mysql; 初始化数据文件
- 然后再次启动mysql 然后用命令 mysql –u root –p 进入mysql管理界面(密码可为空)
- 进入界面后更改root密码
update mysql.user set authentication_string=password('123456') where user='root' and Host = 'localhost';
(最后输入flush privileges 刷新权限)
- 修改 my.ini文件删除最后一句skip-grant-tables
- 重启mysql即可正常使用
net stop mysql
net start mysql - 连接上测试出现以下结果就安装好了
命令行操作数据库
创建数据库:create database [if not exists] 数据库名;
删除数据库:drop database [if exists] 数据库名;
查看数据库:show database;
使用数据库:use 数据库名;
创建数据表
create table [if not exists] '表名'(
'字段名' 列类型[属性][索引][注释],
'字段名' 列类型[属性][索引][注释],
...
)[表类型][表字符集][注释];
数据表的类型
CREATE TABLE 表名(
#省略一些代码
#Mysql注释
#1. # 单行注释
#2. /*...*/ 多行注释
)ENGINE = MyISAM (or InnoDB)
# 查看mysql所支持的引擎类型(表类型)
SHOW ENGINES;
# 查看默认引擎
SHOW VARIABLES LIKE 'storage_engine';
MySQL的数据类型:MyISAM,InnoDB,HEAP,BOB,CSV等…
常见的 MyISAM 与 InnoDB 类型
- 适用MyISAM : 节约空间及相应速度
- 适用InnoDB : 安全性 , 事务处理及多用户操作数据表
数据表的存储位置 :
- MySQL数据表以文件方式存放在磁盘中
- 包括表文件 , 数据文件 , 以及数据库的选项文件
- 位置 : Mysql安装目录\data\下存放数据表 . 目录名对应数据库名 , 该目录下文件名对应数据表 .
- 注意 :
- InnoDB类型数据表只有一个 *.frm文件 , 以及上一级目录的ibdata1文件
- MyISAM类型数据表对应三个文件 :
- frm – 表结构定义文件
- MYD – 数据文件(data)
- MYI – 索引文件(index)
修改数据库
修改表名:alter tabke 旧表名 rename as 新表名
添加字段:alter tabke 表名 add字段名 列属性[属性]
修改字段:alter tabke 表名 modify 字段名 列类型[属性]
alter tabke 表名 change 旧字段名 新字段名 列属性[属性]
删除字段:alter tabke 表名 drop 字段名
删除数据表:drop table[if exists] 表名 //if xeists为可选,判断是否存在该数据表,如删除不存在的数据表会抛出错误
select语句
1.指定查询字段
#查询所有学生信息
select * from student;
#查询指定列(学号,姓名)
select studentno,studentname from student;
2.AS子句作为别名
# 这里是为列取别名(当然as关键词可以省略)
SELECT studentno AS 学号,studentname AS 姓名 FROM student;
# 使用as也可以为表取别名
SELECT studentno AS 学号,studentname AS 姓名 FROM student AS s;
# 使用as,为查询结果取一个新名字
# CONCAT()函数拼接字符串
SELECT CONCAT('姓名:',studentname) AS 新姓名 FROM student;
3.distinct关键字的使用
作用 : 去掉SELECT查询返回的记录结果中重复的记录(返回所有列的值都相同),只返回一条
# 查看哪些同学参加了考试(学号)--去除重复项
SELECT * FROM result; # 查看考试成绩
SELECT studentno FROM result; # 查看哪些同学参加了考试
SELECT DISTINCT studentno FROM result;
# 了解:DISTINCT 去除重复项 , (默认是ALL)
4.使用表达式的列
数据库中的表达式:一般由文本值,列值,NULL,函数和操作符等组成
应用场景 :
- SELECT语句返回结果列中使用
- SELECT语句中的ORDER BY , HAVING等子句中使用
- DML语句中的where条件语句中使用表达式
# selcet查询中可以使用表达式
SELECT @@auto_increment_increment; # 查询自增步长
SELECT VERSION(); #查询版本号
SELECT 100*3-1 AS 计算结果; # 表达式
# 学员考试成绩集体提分一分查看
SELECT studentno,StudentResult+1 AS '提分后' FROM result;
where条件语句
- 用于检索数据表中 符合条件 的记录
- 搜索条件可由一个或多个逻辑表达式组成 , 结果一般为真或假.
- 搜索条件的组成
# 满足条件的查询(where)
SELECT Studentno,StudentResult FROM result;
# 查询考试成绩在95-100之间的
SELECT Studentno,StudentResult
FROM result
WHERE StudentResult>=95 AND StudentResult<=100;
# AND也可以写成 &&
SELECT Studentno,StudentResult
FROM result
WHERE StudentResult>=95 && StudentResult<=100;
# 模糊查询(对应的词:精确查询)
SELECT Studentno,StudentResult
FROM result
WHERE StudentResult BETWEEN 95 AND 100;
# 除了1000号同学,要其他同学的成绩
SELECT studentno,studentresult
FROM result
WHERE studentno!=1000;
# 使用NOT
SELECT studentno,studentresult
FROM result
WHERE NOT studentno=1000;
模糊查询:
#模糊查询 between and \ like \ in \ null
#=============================================
# LIKE
#=============================================
#查询姓李的同学的学号及姓名
#like结合使用的通配符 : % (代表0到任意个字符) _ (一个字符)
SELECT studentno,studentname FROM student
WHERE studentname LIKE '李%';
#查询姓李的同学,后面只有一个字的
SELECT studentno,studentname FROM student
WHERE studentname LIKE '李_';
#查询姓李的同学,后面只有两个字的
SELECT studentno,studentname FROM student
WHERE studentname LIKE '李__';
#查询姓名中含有 文 字的
SELECT studentno,studentname FROM student
WHERE studentname LIKE '%文%';
#查询姓名中含有特殊字符的需要使用转义符号 '\'
#自定义转义符关键字: ESCAPE ':'
#=============================================
# IN
#=============================================
#查询学号为1000,1001,1002的学生姓名
SELECT studentno,studentname FROM student
WHERE studentno IN (1000,1001,1002);
#查询地址在北京,南京,河南洛阳的学生
SELECT studentno,studentname,address FROM student
WHERE address IN ('北京','南京','河南洛阳');
#=============================================
# NULL 空
#=============================================
#查询出生日期没有填写的同学
#不能直接写=NULL , 这是代表错误的 , 用 is null
SELECT studentname FROM student
WHERE BornDate IS NULL;
#查询出生日期填写的同学
SELECT studentname FROM student
WHERE BornDate IS NOT NULL;
#查询没有写家庭住址的同学(空字符串不等于null)
SELECT studentname FROM student
WHERE Address='' OR Address IS NULL;
LL , 这是代表错误的 , 用 is null
SELECT studentname FROM student
WHERE BornDate IS NULL;
#查询出生日期填写的同学
SELECT studentname FROM student
WHERE BornDate IS NOT NULL;
#查询没有写家庭住址的同学(空字符串不等于null)
SELECT studentname FROM student
WHERE Address=’’ OR Address IS NULL;