一、数据库的介绍
- 数据库:存储数据的永久空间,就是通过一种特殊的方式存储到硬盘中。
计算机中永久空间:硬盘,临时空间:内存 - 数据库分类:关系型数据库和非关系型数据库:关系型是所有的数据基础上都是有关联的,通过一个数据和其他的一个数据进行有效关联。
- 数据库:sql server、oracle、mysql、…
- mysql查看数据的方式:结构化查询语言(SQL语句)
开发方式分b/s 、 c/s 。mysql的基本结构:c/s。
mysql客户端:终端,浏览器(打开浏览器网址,确保wamp打开运行)
–sql语句–>访问数据库管理系统
->管理:数据库》数据表》数据;数据库2》数据表》数据;数据库3》数据表》数据;…
二、mysql的基本语法
- 注释:
- 单行注释:#注释内容
- 单行注释:-- 注释内容(注意:两个 – 之后有一个空格)
- 多行注释:/*注释内容*/
- 语句行:
- 一条语句称为一条命令,通常用一个分号;结束
- 也可通过
delimiter 新结束符
命令来设定新的结束符(少用) - 语句的执行是以一条语句为单位进行,一次执行一条语句
- 大小写:
- windows不区分大小写,linux区分大小写
- 命名(标识符)规则:
- 命名只用字母和下划线,不用数字开头
- 不使用关键字
- 用下划线分割法
- 建议全部小写
三、库操作
- 库:存储数据的仓库–起名称
- 表:存储数据的表,一个库可以创建多个表–起名称
- 字段:给表中的数据起名称
- 记录:具体一条数据
四、数据库操作
- 创建数据库:
create database 数据库名 库选项;
,库选项:字符集,校对集,字符集:charset utf8,校对集由字符集确定,eg:create database test charset utf8
- 查询所有数据库:
show databases;
- 查询数据库创建语句:
show create database 数据库名;
- 修改数据库(不能修改数据库名称,只能修改字符集和校对集):
alter database 数据库名 charset=新字符集 collate=新的校对集;
- 显示所有校对集:
show collation;
- 显示所有字符集:
show charset;
- 删除数据库:
drop database 数据库名;
- 选择数据库:
use 数据库名;
五、数据表操作
- 创建表:
create table 表名(
字段名称1 字段属性(类型) 字段选项,
字段名称2 字段属性(类型) 字段选项,
)表选项;
- 表选项:表字符集
charset
和数据引擎engine
- 字符集:charset = utf8;
- 数据引擎:engine默认 innodb、常用有Myisam,没有事务处理就选Myisam,处理速度快
- 字段名称:当前表中的数据名称,自定义
- 字段类型:当前字段中存储的数据类型必须一开始就指定好
整数:tinyint、smallint、int
小数:float、decimal,decimal(10,2)--长度10位,其中小数2位
字符串:char(255字符)、varchar(65532字符)、text(文本,无限制),char是定长型,char(30)最大存储30的长度,缺少的部分用空格补齐,varchar变长型,可以变化长度,varchar(30),最大储存30的长度,可以小于30,两种超过会被切割存入
日期时间:date、datetime,date范围1000-01-01 00:00:00 到9999-12-31,datetime范围1000-01-01 00:00:00到9999-12-31 23:59:59
- 字段选项:设置当前字段的一些选项:数据类型是否有符号、是否为空、是否为主键、是否是唯一键,是否加备注等;
unsigned:数值数据类型无符号,不写代表有符号(取值范围可以为负)
null | not null:是否可以为空
default 值:是否有默认值
Auto_Increment:是否可以自动增长,必须是数字,如需要给每条数据一个编号,原因是数据内容可以重复,编号不能重复。
primary key:设置主键,数据内容不能重复,在查询数据时的主查询条件,一个表中一个主键,一般都是id。
unique[key]:设定唯一键,即表中所有行的数据在该字段中的值不能有重复。(少用)
comment:设置备注,给当前字段设置说明
-
eg:`create table student(
id int not null auto_increment primary key comment ‘id号’,
name varchar(10) not null default ‘’ comment ‘姓名’,
age int not null default 0 comment ‘年龄’,
sex varchar(5) not null default ‘男’ comment ‘性别’)charset=utf8 engine=Myisam;`
- 删除表:
drop table 表名;
:表不存在了truncate table 表名;
:表还存在
- 查看表:
- 查看所有表:
show tables;
- 查看表结构:
desc 表名;
- 查看创建表的语句:
show create table 表名;
- 修改表:
- 修改表名:
alter table 旧表名 rename 新表名;
- 添加字段:
alter table 表名 add 新字段 字段数据类型 字段选项 after 字段名;
,用after指定添加在哪个字段之后 - 修改字段:
alter table 表名 change 旧字段名 新字段名 字段类型 字段选项;
- 只修改字段属性:
alter table 表名 modify 字段名 新字段类型 新字段选项;
- 删除字段:
alter table 表名 drop 字段名;
数据操作
- 增:
insert into 表名(字段1,字段2,字段3,...) values(值1,值2,值3,...);
,自动增长的数据,可以不填,可以写default、null- 插入多条数据:
insert into 表名(字段1,字段2,字段3,...) values
(值1,值2,值3,...),
(值1,值2,值3,...),
(值1,值2,值3,...),
...;
- 表名后的(字段名,字段名,字段名,…)可以省略,values(值,值,值,…)要与建表时的字段一一对应
- 字段列表可以选择性的写,字段名称与值要一一对应,注意:如果有字段不允许为空,又没有默认值时,必须插入数据。
- 删:
delete from 表名 [where条件][order排序][limit限定];
,必须带where条件 ,否则删除所有数据- eg:
delete from idol where id=1;
- delete 删除后被删除的id不会复用
- 改:
update 表名 set 字段名1=值1,字段名2=值2,字段名3=值3,... [where条件][order排序][limit限定];
- 查:
select 字段列表 [from语句] 表名 [where语句][group by 语句][having 语句][order by 语句][limit语句];
- 查询所有:
select * from idol;
- 查询某些字段:
select name,age from idol;
- 其他查询:
- 查询数据数量:
select count(id) from idol;
- 给字段起别名:
字段名 as 别名
,select count(id) as total from idol;
- 查询数据数量:
- 条件:
- where条件,且建议id作为条件,id具有唯一性
- 算数运算符:+ / - / * / / / % -->
select * from idol where id = 5+3;
- 比较运算符: > / < / >= / <= / != -->
select * from idol where id < 4;
- 逻辑运算符:and / or / not -->
select * from idol where id < 4 and name = '蓝湛';
in
查询:select * from idol where id in (1,5);
between min and max
取值范围:select * from idol where id between 2 and 5;
,包含最大值和最小值字段名 like '%字符%'
模糊查询:select * from idol where name like '%蓝%';
,如果like后直接写字符,name like '蓝湛'
就相当于name = '蓝湛'
的查询,
- 算数运算符:+ / - / * / / / % -->
- order:当前表倒序还是正序,不用添加,默认即可,正序:asc,倒序:desc,
order by 字段名 desc/asc
- limit:限定范围,不用添加,
limit 开始位置,长度
,开始位置可以从0开始。 - group by:
select 字段或聚合数据(函数) from 表名 group by 字段名;
,eg:select age,count(age) as '个数' from idol group by age;
- 常用的聚合函数:avg()取平均值,count()取个数,sum()取总和,max()取最大值,min()取最小值
- having:
having 条件;
,where 与 having的区别:where只能查去数据表中已有的字段,having只能查已经在select后筛选出来的字段。
1. 只可以用where,不可以用having的情况
1) select addtime,name from dw_users where addtime> 1500000000
2) select phone,name from dw_users having addtime> 1500000000 //报错!!!因为前面并没有筛选出addtime字段
2. 只可以用having,不可以用where情况
查询每种category_id商品的价格平均值,获取平均价格大于100元的商品信息
1)select category_id , avg(price) as ag from dw_goods group by goods_category having ag > 100
2)select category_id , avg(price) as ag from dw_goods where ag>100 group by goods_category //报错!!因为from dw_goods 这张数据表里面没有ag这个字段
注意:where 后面要跟的是数据表里的字段,如果我把ag换成avg(price)也是错误的!因为表里没有该字段。而having只是根据前面查询出来的是什么就可以后面接什么。
数据库的三大范式
- 第一范式:原子性,数据不可再分
- 第二范式:唯一性,消除部分依赖
- 第三范式:独立性,取消传递依赖
复制一张表的小技巧
create table copy_table like old_table
insert into copy_table select * from old_table