## 一,安装运行
官网下载:嫌慢找镜像。
图形化界面:
```xml
doc:services.msc
```
控制面板-服务工具-服务
命令行:
启动mysql服务
```xml
net start mysql56
```
停止mysql服务:
```xml
net stop mysql56
```
打开数据库:
方法一:电脑左下角找到 mysql命令行(不推荐,如果出错、网络原因什么的,它会自动关闭窗口,找不到具体原因)
方法二:将mysql\bin 配置在Path环境变量中,DOC命令下输入:mysql -h localhost -u root -p
## 二,存储引擎
就是如何存储数据、如何更新数据、如何查询数据、
如何为存储的数据建立索引等一系列技术的实现方法。
查看mysql支持的存储引擎:
```xml
show engines;
```
常用的两种:
MyISAM:拥有较快的插入、查询速度,但**不支持事务。**
InnoDB:**支持ACID事务**,支持行级锁,支持外键;MySQL 5.5版本后的默认存储引擎
## 三,MySQL数据类型
大致分为3类:数值、日期/时间和字符串(字符)类型。
![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/20200731114958691.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0OTY5NjQz,size_16,color_FFFFFF,t_70)
## 四,数据的完整性
数据完整性是指存储在数据库中的数据,应该保持一致性和完整性。
关系模型允许定义3类数据约束,他们是实体完整性、参照完整性以及用户定义的完整性。
前两种完整性约束由关系数据库系统自动支持。
![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/20200731115015503.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0OTY5NjQz,size_16,color_FFFFFF,t_70)
唯一性约束:
unique意味者任何两条数据的同一字段不能有相同值,可保证实体完整性。
外键约束:
外键约束定义了表之间的一致性关系,用于强制参照完整性。
在插入数据时,必须先向主表插入,再向从表插入。删除数据时,刚好相反。
## 五,SQL语句
按照功能用途,可以划分为4种:DDL、DML、DQL和DCL。
**数据定义语言(Data Definition Language):**
DDL用于数据库、表、视图等的建立、删除。DDL包括CREATE、ALTER、DROP等。
**数据操纵语言(Data Manipulation Language):**
DML用于添加、删除和修改数据表中的记录。DML包括INSERT、DELETE和UPDATE。
**数据控制语言(Date Control Language):**
DCL包括数据库对象的权限管理和事务管理。DCL包括COMMIT、ROLLBACK、GRANT等。
**数据查询语句(Data Query Language):**
查询是数据库的基本功能。DQL中使用SELECT查询数据表中的记录。
**1)数据定义语言**
1,创建数据库:
```sql
create database table_name
```
需要定义的信息主要包括:表名、字段名、字段类型。
```sql
create[temporary]table [if not exits] table_name[(create_definition,...)][table_options][select_statement]
```
temporary:表示创建临时表,在当前会话结束后将自动消失。
if not exits:在建表前,先判断表是否存在,只有该表不存在时才创建
create_definition:建表语句的关键部分,用于定义表中各列的属性。
table_options:表的配置选项,例如:表的默认存储引擎、字符集。
select_statement:通过select语句建表。
2,删除数据库:
```sql
drop database table_name
```
3,删除contacts表
```sql
drop table table_name;
```
4,删除表
```sql
drop table table_name;
```
5,添加字段sex,类型为varchar(1)
```sql
alter table table_name add sex varchar(1);
```
6,修改字段sex的类型为tinyint
```sql
alter table table_name modify sex tinyint;
```
7,删除字段sex
```sql
alter table table_name drop column sex;
```
8,查看当前在哪个数据库下工作:
```sql
select database()
```
9,显示表的结构
```sql
desc table_name;
```
10,查看表生成的DDL(反译建表语句)
```sql
show create table table_name ;
```
**2)数据操纵语言(创建、修改和删除)**
1,插入单条数据:
```sql
insert into table_name(field1,field2,....) values(value1,value2,...);
```
2,插入多条数据
```sql
insert into table_name(field1,field2,....) values(valueA1,valueA2,...), (valueB1,valueB2,...);
```
3,修改数据
```sql
update table_name set field1=newValue1,field2=newValue2[where clause];
```
如果不带where,将更新所有。
4,删除数据
```sql
delete from table_name where id =1;
```
5,数据默认
```sql
sex tinyint default 1
```
6,数据转义
```sql
' Tom\'s cat'
" Lily's cat "
```
**3)数据查询语句**
1,查询表中列的注释信息
```sql
select * from information_schema.columns
where table_schema = 'db' #表所在数据库
and table_name = 'tablename' ; #你要查的表
```
2,只查询列名和注释:
```sql
select column_name, column_comment from information_schema.columns where table_schema ='db' and table_name = 'tablename' ;
```
3,查看表的注释
```sql
select table_name,table_comment from information_schema.tables where table_schema = 'db' and table_name ='tablename'
```
4,select语句中使用where子句语句
```sql
select column_name from table_name where column_name 运算符 value;
```
5,and、or运算符语句
```sql
select column_name from table_name where condition1 and condition2 or condition3
and:表示左右两边的条件同时成立。
or:表示左右两边只要有一个条件成立。
```
6,运算符in的使用
在where语句中过滤某个字段的多个值。
```sql
select column_name from table_name where column_name in(value1,value2);
```
7,like模糊查询
```sql
select column_name from table_name where column_name like "%value%"
```
百分号“%”表示0个或多个字符,下划线 “_”表示单个字符
8,函数(mysql内置函数)
now()
```sql
insert into user(id,name,create_time) values(1,"zhangsan",now());
```
date_format()格式转换
```sql
select name,date_format(now(),'%Y/%m/%d') from user;
```
聚合函数(对一组值计算,返回单个值),count、sum、avg、min、max
ifnull()用于处理空值
ifnull(v1,v2),如果v1的值不为null,则返回v1,否则返回v2。
case when
类似编程语句的if else或者switch。
```sql
select id ,password,case sex when 1 then "男" when 2 then "女" else "未知" end as sex from c;
```
as sex 为取的别名
9,查询结果排序
```sql
order by
select column_name1,column_name2
from table_name1,table_name2
order by column_name,column_name[ASC|DESC]
```
ASC表示升序排列,DESC表示按降序排列。
默认为升序排列。
limit
```sql
select column_name1,column_name2
from table_name1,table_name2
limit[offset] row_count;
```
offset指定要返回的第一行的偏移量,第一行的偏移量是0,而不是1。
row_count指定要返回的最大行数。
limit的分页公式:
limit(page-1)row_count,row_count;
10,group by
```sql
select column_name,aggregate_function(column_name)
from table_name
group by column_name
```
aggregate_function表示聚合函数。
group by 可以对一列或多列进行分组。
11,having
在SQL中增加having子句原因是,where关键字无法与聚合函数一起使用。
having子句可以对分组后的各组数据进行筛选。
```sql
select column_name,agregate_function(column_name)
from table_name
where column_name operator value
group by column_name
having aggregate_function(column_name) operator value
```