什么是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.添加环境变量

  1. 我的电脑->属性->高级->环境变量
  2. 选择PATH,在其后面添加: 你的mysql 安装文件下面的bin文件夹
  3. 在D:\Environment\mysql-5.7.19下新建 my.ini 文件
  4. 编辑 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
  1. 启动管理员模式下的CMD,并将路径切换至mysql下的bin目录,然后输入mysqld –install (安装mysql)
  2. 再输入 mysqld --initialize-insecure --user=mysql; 初始化数据文件
  3. 然后再次启动mysql 然后用命令 mysql –u root –p 进入mysql管理界面(密码可为空)
  4. 进入界面后更改root密码
update mysql.user set authentication_string=password('123456') where user='root' and Host = 'localhost';

(最后输入flush privileges 刷新权限)

  1. 修改 my.ini文件删除最后一句skip-grant-tables
  2. 重启mysql即可正常使用
    net stop mysql
    net start mysql
  3. 连接上测试出现以下结果就安装好了
命令行操作数据库

创建数据库: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 类型

mysql 不如 mssql mysql和mysql_MySQL

  • 适用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;