MySQL概述
1、什么是数据库 ?
答:数据的仓库,如:在ATM的示例中我们创建了一个 db 目录,称其为数据库
2、什么是 MySQL、Oracle、SQLite、Access、MS SQL Server等 ?
答:他们均是一个软件,都有两个主要的功能:
- a. 将数据保存到文件或内存
- b. 接收特定的命令,然后对文件进行相应的操作
3、什么是SQL ?
答:MySQL等软件可以接受命令,并做出相应的操作,由于命令中可以包含删除文件、获取文件内容等众多操作,对于编写的命令就是是SQL语句。
MySQL安装
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司。MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
想要使用MySQL来存储并操作数据,则需要做几件事情:
a. 安装MySQL服务端
b. 安装MySQL客户端
c. 【客户端】连接【服务端】
d. 【客户端】发送命令给【服务端MySQL】服务的接受命令并执行相应操作(增删改查等)
下载
1 | http://dev.mysql.com/downloads/mysql/ |
客户端连接
1 | 连接: |
数据库基础
分为两大部分:
1、数据库和表的创建;
2、数据库和表内容的操作
1、数据库和表的创建
(一)数据库的创建
1.1、显示数据库
1 | SHOW DATABASES; |
默认数据库:
mysql - 用户权限相关数据
test - 用于用户测试数据
information_schema - MySQL本身架构相关数据
1.2、创建数据库
1 | # utf-8 |
1.3、打开数据库
1 | USE db_name; |
显示当前使用的数据库中所有表:SHOW TABLES;
1.4、用户管理
用户设置:
1 | 创建用户 |
用户权限设置:
1 | show grants for '用户'@'IP地址' -- 查看权限 |
对于权限设置
1 | all privileges 除grant外的所有权限 |
对于数据库名的解释
1 | 对于目标数据库以及内部其他: |
对于ip地址的访问
1 | 用户名@IP地址 用户只能在改IP下才能访问 |
实际例子
1 | grant all privileges on db1.tb1 TO '用户名'@'IP' |
1.5、备份库和恢复库
备份库:
MySQL备份和还原,都是利用mysqldump、mysql和source命令来完成。
1.在Windows下MySQL的备份与还原
1 | 备份 |
2、在linux下MySQL的备份与还原
1 | 2.1 备份(利用命令mysqldump进行备份) |
3、更多备份及还原命令
1 | 备份: |
(二)数据表的创建
1.1、显示所有数据表
1 | show tables; |
1.2、创建数据表
1 | create table 表名( |
设置是否为空
1 | 是否可空,null表示空,非字符串 |
设置默认值
1 | 默认值,创建列时可以指定默认值,当插入数据时如果未主动设置,则自动添加默认值 |
设置自增
1 | 自增,如果为某列设置自增列,插入数据时无需设置此列,默认将自增(表中只能有一个自增列) |
唯一键
唯一键;unique key,用来保证对应的字段中的数据唯一的。
主键也可以用保证字段数据唯一性,但是一张表只有一个主键。
唯一键特点:
1、唯一键在一张表中可以有多个。
2、唯一键允许字段数据为NULL,NULL可以有多个(NULL不参与比较)
创建唯一键
创建唯一键和创建主键非常类似
1、直接在表字段之后增加唯一键标识符:unique[key]
2、在所有的字段之后使用unique key(字段列表);
3、在创建完表之后也可以用增加唯一键
alter table 表名 add unique key(字段列表);
唯一键效果:在不为空的情况下,不允许重复。
删除唯一键:
一个表中允许存在多个唯一键:
删除基本语法:alter table 表名 drop index 唯一键名字;
index代表索引,唯一键是索引的一种(提升查询效率)
设置主键
1 | 主键,一种特殊的唯一索引,不允许有空值,如果主键使用单个列,则它的值必须唯一,如果是多列,则其组合必须唯一。 |
设置外键
1 | 外键,一个特殊的索引,只能是指定内容 |
主键与外键关系
一、外键约束
MySQL通过外键约束来保证表与表之间的数据的完整性和准确性。
外键的使用条件:
1 | 1.两个表必须是InnoDB表,MyISAM表暂时不支持外键(据说以后的版本有可能支持,但至少目前不支持); |
外键的好处:可以使得两张表关联,保证数据的一致性和实现一些级联操作;
外键的使用规则:
从表的字段必须与外键类型同样;外键必须是主表的唯一键;有关联的字段;避免使用复合键(也就是说从表能够同一时候引用多个主表的字段作为一个外键,一般不推荐这样的做法)。
外键不一定须要作为从表的主键。外键也不一定是主表的主键。主表的唯一键就能够作为从表的外键。
外键的定义语法:
1 | [CONSTRAINT symbol] FOREIGN KEY [id] (index_col_name, ...) |
能够在创建表的时候创建,也能够在创建表之后创建
1 | 创建表时创建: |
或创建了两表之后再建
1 | alter table grade |
1.3、删除表
1 | drop table 表名 |
1.4、清空表
1 | delete from 表名 |
1.5、基本数据类型
MySQL的数据类型大致分为:数值、时间和字符串
1 | bit[(M)] |
1.6、修改表(alter)
1 | 添加列:alter table 表名 add column 列名 类型 |
1.7、数据表关系
关联映射:一对多/多对一
存在最普遍的映射关系,简单来讲就如球员与球队的关系;
一对多:从球队角度来说一个球队拥有多个球员 即为一对多
多对一:从球员角度来说多个球员属于一个球队 即为多对一
数据表间一对多关系如下图:
关联映射:一对一
一对一关系就如球队与球队所在地址之间的关系,一支球队仅有一个地址,而一个地址区也仅有一支球队。
数据表间一对一关系的表现有两种,一种是外键关联,一种是主键关联。图示如下:
一对一外键关联:
一对一主键关联:要求两个表的主键必须完全一致,通过两个表的主键建立关联关系
关联映射:多对多
多对多关系也很常见,例如学生与选修课之间的关系,一个学生可以选择多门选修课,而每个选修课又可以被多名学生选择。
数据库中的多对多关联关系一般需采用中间表的方式处理,将多对多转化为两个一对多
1.8、数据表之间的约束
约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的完整性、唯一性。
MYSQL中,常用的几种约束:
===================================================
主键(PRIMARY KEY)是用于约束表中的一行,作为这一行的标识符,在一张表中通过主键就能准确定位到一行,因此主键十分重要。主键要求这一行的数据不能有重复且不能为空。
还有一种特殊的主键——复合主键。主键不仅可以是表中的一列,也可以由表中的两列或多列来共同标识
===================================================
默认值约束(DEFAULT)规定,当有DEFAULT约束的列,插入数据为空时该怎么办。
DEFAULT约束只会在使用INSERT语句(上一实验介绍过)时体现出来,INSERT语句中,如果被DEFAULT约束的位置没有值,那么这个位置将会被DEFAULT的值填充
===================================================
唯一约束(UNIQUE)比较简单,它规定一张表中指定的一列的值必须不能有重复值,即这一列每个值都是唯一的。
当INSERT语句新插入的数据和已有数据重复的时候,如果有UNIQUE约束,则INSERT失败.
===================================================
外键(FOREIGN KEY)既能确保数据完整性,也能表现表之间的关系。
一个表可以有多个外键,每个外键必须REFERENCES(参考)另一个表的主键,被外键约束的列,取值必须在它参考的列中有对应值。
在INSERT时,如果被外键约束的值没有在参考列中有对应,比如以下命令,参考列(department表的dpt_name)中没有dpt3,则INSERT失败
===================================================
非空约束(NOT NULL),听名字就能理解,被非空约束的列,在插入值时必须非空。
在MySQL中违反非空约束,不会报错,只会有警告.
2、数据库和表内容的操作(增、删、改、查)
增
1 | insert into 表 (列名,列名...) values (值,值,值...) |
删
1 | delete from 表 |
改
1 | update 表 set name = 'alex' where id>1 |
查
4.1、普通查询
1 | select * from 表 |
更多选项查询
1 | a、条件 |
4.2、数据排序(查询)
1 | select * from 表 order by 列 asc - 根据 “列” 从小到大排列 |
4.3、模糊查询
1 | 通配符(模糊查询) |
4.4、聚集函数查询
聚集函数
1 | (1)COUNT |
4.5、分组查询
1 | select num from 表 group by num |
4.6多表查询
1 | a、连表 |
4.7正则
正则表达式的作用是匹配文本,将一个模式(正则表达式)与一个文本串进行比较。MySQL用WHERE子句对正则表达式提供了初步的支持,允许你指定正则表达式,过滤SELECT检索出的数据。
基本字符匹配
REGEXP关键字来匹配正则
1 | SELECT name FROM tab1 WHERE name REGEXP 'abc'; |
REGEXP后所跟的东西作为正则表达式
1 | '.'是以匹配任意一个字符 |
匹配字符类
1 | [:alnum:] 任意字母和数字(同[a-zA-Z0-9]) |
匹配多个字符
1 | * 0个或多个匹配 |
定位符
1 | '^' 匹配文本的开始 |
4.8 创建联结
内部联结 inner join
1 | select vend_name,pro_name from vendors inner join products on vendors.id = products.id; |
外部联结 left join 和 right join
1 | select vend_name,pro_name from vendors left join products on vendors.id = products.id; |