database

      数据库基础

一、数据库概念

  1.数据库

    存储数据的仓库(逻辑概念,并未真实存在)

  2.数据库软件

    真实软件,用来实现数据库这个逻辑概念

  3.数据仓库

    数据量更加庞大,更加侧重数据分析和数据挖掘,供企业决策分析之用,主要是数据查询,修改和删除很少

二、MySQL的特点

 

 

 

- 服务端启动 ```mysql sudo /etc/init.d/mysql start|stop|restart|status sudo service mysql start|stop|restart|status ``` - 客户端连接 ```mysql mysql -hIP地址 -u用户名 -p密码 本地连接可省略 -h 选项

 

四、基本sql命令

 

**1.库管理** ```mysqle 1、查看已有库; show databases; 2、创建库并指定字符集; create database 库名 charset utf8; 3、查看当前所在库; select database(); 4、切换库; use 库名; 5、查看库中已有表; show tables; 6、删除库; drop database 库名; ```
**2.表管理** ```mysql 1、创建表并指定字符集; create table 表名(字段名 数据类型,xxx)charset=utf8; 2、查看创建表的语句 (字符集、存储引擎); show create table 表名; 3、查看表结构; desc 表名; 4、删除表; ``` drop table 表名;
1 **3.表记录管理**
2 
3 ```mysql 4     1、增 :insert into 表名(字段名)values(),(); 5     2、删 :delete from 表名 where 条件; 6     3、改 :update 表名 set 字段名=值 字段名=值 where 条件; 7     4、查 :select * from 表名 where 条件; 8 ```
1 **4.表字段管理**
2 
3 ```mysql 4     1、增 : alter table 表名 add 字段名 类型 first;(添加首字段) 5  alter table 表名 add 字段名 类型 after 字段名;(添加在什么字段后) 6  alter table 表名 add 字段名 类型(添加最后的字段) 7     2、删 :alter table 表名 drop 字段名; 8     3、改 :alter table 表名 modify 字段名 新类型; 9     4、表重命名 :alter table 表名 rename 新表名;

五、数据类型

 1 **四大数据类型**
 2 
 3 数值类型  4 
 5 ```mysql  6  int(整形) smallint(小整形) bigint(大整形) tinyint  7  float(m,n)(浮点型) double decimal  8  
 9 ``` 10 
11 字符类型 12 
13 ```mysql 14 15 
16 ``` 17 
18 - 枚举类型 19 
20 ```mysql 21  enum()(多个中选一个) set()(多个中选多个) 22 ``` 23 
24 - 
25  日期时间类型 26 
27 ```mysql 28  data time year datatime timestamp 29 ```
**日期时间函数** ```mysql NOW() CURDATR() YEAR(字段名) DATE(字段名) TIME(字段名) ``` **日期时间运算** ```mysql select * from 表名 where 字段名 运算符(NOW()-interval 间隔) 间隔单位:1day| 3month|2year eg1:查询一年以前的用户充值信息 select * from tab where time <(now()-interval 1 year); ```

六、MySQL运算符

- **数值比较** ```mysql > >= < <= = != eg1 : 查询成绩不及格的学生   select * from student where score >60; eg2 : 删除成绩不及格的学生   delete from sutdents where score <60; eg3 : 把id为3的学生的姓名改为 周芷若   update students set name="周芷若" where id = 3; ```
- **逻辑比较** ```mysql and or eg1 : 查询成绩不及格的男生  select * from students where score <60 and gender="m"; eg2 : 查询成绩在60-70之间的学生 ``` select * from students where score>=60 and score<=70;
- **范围内比较** ```mysql between 值1 and 值2 、in() 、not in() eg1 : 查询不及格的学生姓名及成绩 select name,score from students where score between 0 and 59; eg2 : 查询AID1903和AID1902班的学生姓名及成绩 select name,score from students where class in("AID1903","AID1902");
- **模糊比较(like)** ```mysql where 字段名 like 表达式(%_) eg1 : 查询北京的姓赵的学生信息   select *from students where address="北京" and name like "赵%"; 
- **NULL判断** ```mysql is NULL 、is not NULL eg1 : 查询姓名字段值为NULL的学生信息 select * from students where name is NULL;
```

 七、查询

- **order by** 给查询的结果进行排序(永远放在SQL命令的倒数第二的位置写) ```mysql order by 字段名 ASC/DESC eg1 : 查询成绩从高到低排列 select * from students where score order by DESC ``` - **limit** 限制显示查询记录的条数(永远放在SQL命令的最后写) ```mysql limit n :显示前n条 limit m,n :从第(m+1)条记录开始,显示n条 分页:每页显示10条,显示第6页的内容 limit (6-1)*10 ,10

八、MySQL基础巩固

- **创建库 :country(指定字符编码为utf8)**
  create database country; - **创建表 :sanguo 字段:id 、name、attack、defense、gender、country**
  create table sanguo(id int primary key auto_increment,
              name varchar(16) not null,
              attack int not null,
              defense int not null,
              gender enum("w","m") not null,
              country varchar(16) not null)charset=utf8;
**插入5条表记录(id 1-5,name-诸葛亮、司马懿、貂蝉、张飞、赵云),攻击>100,防御<100)**
   insert into sanguo values(1,"诸葛亮",150,80,"m","蜀国";
                   2,"司马懿",160,70,"m","魏国";
                   3,"貂蝉",110,50,"w","吴国";
                   4,"张飞",200,90,"w","蜀国";
                   5,"赵云",21,80,"w","蜀国";)
- **查找所有蜀国人的信息**
  select * from sanguo where country="蜀国";
- **将赵云的攻击力设置为360,防御力设置为68*
  update sanguo set attack=360 ,defense=68 where name="赵云";
- **将吴国英雄中攻击值为110的英雄的攻击值改为100,防御力改为60**
  update sanguo set attack = 100 ,defense=60 where country="吴国"
- **找出攻击值高于200的蜀国英雄的名字、攻击力**
  select name,attack from sanguo where attack>200 and country="蜀国";
- **将蜀国英雄按攻击值从高到低排序**
  select * from sanguo where country = "蜀国" order by attark DESC;
- **魏蜀两国英雄中名字为三个字的按防御值升序排列**
  select * from sanguo where country in("魏国","蜀国") and name like"___" order by defense ASC;
- **在蜀国英雄中,查找攻击值前3名且名字不为 NULL 的英雄的姓名、攻击值和国家**
  select name,attack,country from sanguo where country = "蜀国" and name is not NULL order by attack DESC limit 3;