MySQL是一种开源的关系型数据库管理系统(RDBMS),MySQL数据库管理系统,开发者为瑞典MySQL AB公司,目前属 Oracle作为当前最流行的关系数据库管理系统之一,被广泛地应用中小型网站。由于其具有体积小、速度快、总体成本低,以及开放源码的特点,所以许中小型网站为了降低网站总体成本而选择 MySQL 作为网站数据库。目前Internet上流行的网站构架方式是LAMP(Linux+Apache+MySQL+PHP),即使用Linux作为操作系统, Apache 作为 Web 服务器,MySQL 作为数据库,PHP作为服务器端脚本解释器。由于这4个软件都是遵循GPL的开放源码软件,因此使用这种方式不用花一分钱就可以建立起一个稳定、免费的网站系统。MySQL 数据库最令人欣赏的特性之一是,它采用的是开放式的架构,甚至允许第三方开发自己的数据存储引擎,这吸引了大量第三方公司的注意并投身于此。自那以后,它已被广泛采用,成为最流行的开源数据库之一,也是全球最流行的数据库之一。
目录
软件下载
mysql5.7 64位下载地址:
https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.19-winx64.zip
电脑是64位的就下载使用64位版本的!
1.6 安装步骤
1、下载后得到zip压缩包.
2、解压到自己想要安装到的目录,本人解压到的是D:\Environment\mysql-5.7.19
3、添加环境变量:我的电脑->属性->高级->环境变量
4、新建mysql配置文件,编辑 my.ini 文件 ,注意替换路径位置
5、启动管理员模式下的CMD,并将路径切换至mysql下的bin
目录,然后输入mysqld –install
(安装mysql)
6、再输入 mysqld --initialize-insecure --user=mysql
初始化数据文件
7、然后再次启动mysql net start mysql
然后用命令 mysql –u root –p
进入mysql管理界面(密码可为空)
8、进入界面后更改root
密码
9、修改my.ini
文件删除最后一句skip-grant-tables
10、重启mysql即可正常使用
MySQL入门须知
MySQL数据类型
基本查询
select * from 表名 -- 全列查询
select 字段1 字段2 from 表名 -- 表名查询的显示结果只有这两个字段
- 子查询需用括号包裹。
-- from型
from后要求是一个表,必须给子查询结果取个别名。
- 简化每个查询内的条件。
- from型需将结果生成一个临时表格,可用以原表的锁定的释放。
- 子查询返回一个表,表型子查询。
select * from (select * from tb where id>0) as subfrom where id>1;
-- where型
- 子查询返回一个值,标量子查询。
- 不需要给子查询取别名。
- where子查询内的表,不能直接用以更新。
select * from tb where money = (select max(money) from tb);
-- 列子查询
如果子查询结果返回的是一列。
使用 in 或 not in 完成查询
exists 和 not exists 条件
如果子查询返回数据,则返回1或0。常用于判断条件。
select column1 from t1 where exists (select * from t2);
将多个表的字段进行连接,可以指定连接条件。
-- 内连接(inner join)
- 默认就是内连接,可省略inner。
- 只有数据存在时才能发送连接。即连接结果不能出现空行。
on 表示连接条件。其条件表达式与where类似。也可以省略条件(表示条件永远为真)
也可用where表示连接条件。
还有 using, 但需字段名相同。using(字段名)
-- 交叉连接 cross join
即,没有条件的内连接。
select * from tb1 cross join tb2;
-- 外连接(outer join)
- 如果数据不存在,也会出现在连接结果中。
-- 左外连接 left join
如果数据不存在,左表记录会出现,而右表为null填充
-- 右外连接 right join
如果数据不存在,右表记录会出现,而左表为null填充
-- 自然连接(natural join)
自动判断连接条件完成连接。
相当于省略了using,会自动查找相同字段名。
natural join
natural left join
natural right join
select info.id, info.name, info.stu_num, extra_info.hobby, extra_info.sex from info, extra_info where info.stu_num = extra_info.stu_id;
创建表
-- 创建表
CREATE [TEMPORARY] TABLE[ IF NOT EXISTS] [库名.]表名 ( 表的结构定义 )[ 表选项]
每个字段必须有数据类型
最后一个字段后不能有逗号
TEMPORARY 临时表,会话结束时表自动消失
对于字段的定义:
字段名 数据类型 [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY] [COMMENT 'string']
-- 表选项
-- 字符集
CHARSET = charset_name
如果表没有设定,则使用数据库字符集
-- 存储引擎
ENGINE = engine_name
表在管理数据时采用的不同的数据结构,结构不同会导致处理方式、提供的特性操作等不同
常见的引擎:InnoDB MyISAM Memory/Heap BDB Merge Example CSV MaxDB Archive
不同的引擎在保存表的结构和数据时采用不同的方式
MyISAM表文件含义:.frm表定义,.MYD表数据,.MYI表索引
InnoDB表文件含义:.frm表定义,表空间数据和日志文件
SHOW ENGINES -- 显示存储引擎的状态信息
SHOW ENGINE 引擎名 {LOGS|STATUS} -- 显示存储引擎的日志或状态信息
-- 自增起始数
AUTO_INCREMENT = 行数
-- 数据文件目录
DATA DIRECTORY = '目录'
-- 索引文件目录
INDEX DIRECTORY = '目录'
-- 表注释
COMMENT = 'string'
-- 分区选项
PARTITION BY ... (详细见手册)
-- 查看所有表
SHOW TABLES[ LIKE 'pattern']
SHOW TABLES FROM 表名
-- 查看表机构
SHOW CREATE TABLE 表名 (信息更详细)
DESC 表名 / DESCRIBE 表名 / EXPLAIN 表名 / SHOW COLUMNS FROM 表名 [LIKE 'PATTERN']
SHOW TABLE STATUS [FROM db_name] [LIKE 'pattern']
-- 修改表
-- 修改表本身的选项
ALTER TABLE 表名 表的选项
eg: ALTER TABLE 表名 ENGINE=MYISAM;
-- 对表进行重命名
RENAME TABLE 原表名 TO 新表名
RENAME TABLE 原表名 TO 库名.表名 (可将表移动到另一个数据库)
-- RENAME可以交换两个表名
-- 修改表的字段机构(13.1.2. ALTER TABLE语法)
ALTER TABLE 表名 操作名
-- 操作名
ADD[ COLUMN] 字段定义 -- 增加字段
AFTER 字段名 -- 表示增加在该字段名后面
FIRST -- 表示增加在第一个
ADD PRIMARY KEY(字段名) -- 创建主键
ADD UNIQUE [索引名] (字段名)-- 创建唯一索引
ADD INDEX [索引名] (字段名) -- 创建普通索引
DROP[ COLUMN] 字段名 -- 删除字段
MODIFY[ COLUMN] 字段名 字段属性 -- 支持对字段属性进行修改,不能修改字段名(所有原有属性也需写上)
CHANGE[ COLUMN] 原字段名 新字段名 字段属性 -- 支持对字段名修改
DROP PRIMARY KEY -- 删除主键(删除主键前需删除其AUTO_INCREMENT属性)
DROP INDEX 索引名 -- 删除索引
DROP FOREIGN KEY 外键 -- 删除外键
-- 删除表
DROP TABLE[ IF EXISTS] 表名
-- 清空表数据
TRUNCATE [TABLE] 表名
-- 复制表结构
CREATE TABLE 表名 LIKE 要复制的表名
-- 复制表结构和数据
CREATE TABLE 表名 [AS] SELECT * FROM 要复制的表名
6.外连接
外连接分为左连接 和右连接
SELECT *
FROM product as a left JOIN category as b
on a.category_id = b.id ;
7.索引分类:
唯一性索引:索引值具有唯一性。
主键索引: 把主键字段当做索引,唯一索引的一种。
组合索引: 多个字段组合成的索引。
索引的创建:
CREATE INDEX index_name ON tablename(ziduanming);
create unique index index_name ON tablename(ziduanming);(唯一性索引)
create index 索引名 on 表名(要设置索引的列名)
10.约束
约束保证数据的完整性和一致性
约束分为表级约束和列级约束
对一个数据列建立的约束,列级约束
对多个数据列建立的约束,表级约束
约束类型包括:
NOT NULL
PRIMARY KEY
UNIQUE KEY
DEFAULT
FOREIGN KEY
11.视图
视图是一个虚拟的表,它是基于一个或多个表的查询结果构建而成。
存储过程:存储过程是一组预定义的 SQL 语句,可以在需要时调用以执行特定的任务。
-- 创建触发器
CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW trigger_stmt
参数:
trigger_time是触发程序的动作时间。它可以是 before 或 after,以指明触发程序是在激活它的语句之前或之后触发。
trigger_event指明了激活触发程序的语句的类型
INSERT:将新行插入表时激活触发程序
UPDATE:更改某一行时激活触发程序
DELETE:从表中删除某一行时激活触发程序
tbl_name:监听的表,必须是永久性的表,不能将触发程序与TEMPORARY表或视图关联起来。
trigger_stmt:当触发程序激活时执行的语句。执行多个语句,可使用BEGIN...END复合语句结构
-- 删除
DROP TRIGGER [schema_name.]trigger_name
可以使用old和new代替旧的和新的数据
更新操作,更新前是old,更新后是new.
删除操作,只有old.
增加操作,只有new.
-- 注意
1. 对于具有相同触发程序动作时间和事件的给定表,不能有两个触发程序。
-- 字符连接函数
concat(str1,str2,...])
concat_ws(separator,str1,str2,...)
-- 分支语句
if 条件 then
执行语句
elseif 条件 then
执行语句
else
执行语句
end if;
-- 修改最外层语句结束符
delimiter 自定义结束符号
SQL语句
自定义结束符号
delimiter ; -- 修改回原来的分号
-- 语句块包裹
begin
语句块
end
SQL修改表修改表
语法:alter table 表名 add 列名 类型(长度) 约束;alter table user add image varchar(20) not null;修改表:修改列类型,长度和约束
语法: alter table 表名 modify 列名 类型(长度) 约束;alter table user modify image varchar(50);修改表:删除列
语法:alter table 表名 drop 列名;alter table user drop age;修改表:修改列名称
语法:alter table 表名 change 旧列名 新列名 类型(长度) 约束alter table user change image pic varchar(50) not null;修改表:修改表名
语法:rename table 表名 to 新的表名;rename table table user to person;修改表:修改表的字符集语法:MySQL的用户
MySQL的应用
MySQL广泛用于Web应用程序、嵌入式应用程序和个人应用程序等领域。以下是几个主要的应用场景。
Web应用程序: MySQL特别适用于像在线购物、社交网络、博客和其他一些Web应用程序,因为它能够管理大量数据并提供良好的性能。
数据仓库应用: MySQL可以存储大量数据,并能快速查询和分析数据,因此它也适用于数据仓库应用。
嵌入式应用程序: MySQL也可以作为嵌入式数据库使用,能够在应用程序中占用较少的内存和CPU,因此适合于嵌入式设备和应用。
个人应用程序:由于MySQL易于学习和使用,并且可以轻松地与其他应用程序和语言进行集成,因此它也适合于个人应用程序开发。
MySQL的优点
-
开源免费:MySQL是一款开源免费的关系型数据库管理系统,可以节省开发成本,适合毕业生的自主研发。
-
易于安装和使用:MySQL的安装和配置非常简单,可以快速上手,而且MySQL具有良好的可扩展性和可定制性,适合各种规模的项目。
-
数据库管理功能强大:MySQL提供了完整的数据库管理功能,如创建、修改、删除数据库、表和字段等,还支持多种数据类型和索引,可以满足大多数毕设需求。
-
大量的资源:MySQL是一个广泛使用的数据库,有大量的相关资料和社区资源可供参考,可以帮助毕业生快速解决问题和学习。
-
安全性高:MySQL的安全性非常高,可以提供多层次的安全控制,如用户认证、权限管理等,可以保护数据的安全性。
MySQL的缺点
专业知识:尽管MySQL易于学习,但它也需要一定的数据库管理知识来使用它的高级功能。
不支持一些功能:MySQL虽然支持大多数常用的功能,但它对某些特定功能的支持可能较软弱。
固定的数据模型:MySQL是一种关系型数据库,因此它只能处理固定数据模型的数据。
垂直扩展的限制:尽管MySQL支持垂直扩展,但它有一定的限制,因为它需要更高的硬件配置和更多的资源来维护更大的数据库。
MySQL是一种开源的关系型数据库管理系统(RDBMS),具有高性能、高可靠性、易用性、扩展性等优点,可以普遍应用于Web应用程序、数据仓库应用、嵌入式应用程序和个人应用程序等各种场景。它也有一些缺点,例如需要专业知识、固定的数据模型、不支持某些功能以及垂直扩展的限制。但总的来说,它是一种被广泛采用的开源数据库系统,具有重要的意义。