MySQL基础
1.数据库的介绍
数据库(DataBase,DB):指长期保存在计算机的存储设备(硬盘)上,按照一定规则组织起来,可以被各种用户或应用共享的数据集合. 还是以文件的方式存在服务器的电脑上的。
说白了就是存储数据的仓库, 可以持久化保存数据,并通过sql语句快速的对数据进行增删改查操作。
2.常见的关系型数据库
- MySql :开源免费的数据库,中小型的数据库,已经被Oracle收购了。MySql6.x版本也开始收费。后来Sun公司收购了MySql,而Sun公司又被Oracle收购
- Oracle:收费的大型数据库.Oracle公司的产品.Oracle收购SUN公司,收购MySql.
- DB2:IBM公司的数据库产品,收费的.银行系统中.
- SQLServer:MS公司.收费的中型的数据库.
- SyBase:已经淡出历史舞台.提供了一个非常专业数据建模的工具PowerDesigner.
- SQLite: 嵌入式的小型数据库,应用在手机端.
3.数据库结构
数据库管理程序(DBMS)可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。为保存应用中实体的数据,一般会在数据库创建多个表,以保存程序中实体的数据。
数据库管理系统、数据库和表的关系如图所示:
4.SQL概述
- SQL:Structure Query Language。(结构化查询语言),通过sql操作数据库(操作数据库,操作表,操作数据)
- SQL被美国国家标准局(ANSI)确定为关系型数据库语言的美国标准,后来被国际化标准组织(ISO)采纳为关系数据库语言的国际标准
- 各数据库厂商(MySql,oracle,sql server)都支持ISO的SQL标准。
- 各数据库厂商在标准的基础上做了自己的扩展。 各个数据库自己特定的语法
5.sql的语法
- 每条语句以分号结尾(命令行里面需要),如果在navicat,java代码中不是必须加的。
- SQL在window中不区分大小写,关键字中认为大写和小写是一样的
6.sql的分类
- Data Definition Language (DDL数据定义语言) 如:操作数据库,操作表
- Data Manipulation Language(DML数据操纵语言),如:对表中的记录操作增删改
- Data Query Language(DQL 数据查询语言),如:对表中的记录查询操作
- Data Control Language(DCL 数据控制语言),如:对用户权限的设置
7.DDL操作数据库
1).创建数据库
语法:create database 数据库名 (character set 字符集) (collate 校对规则)
字符集(charset):是一套符号和编码。
校对规则(collation): 是在字符集内用于字符比较和排序的一套规则,比如有的规则区分大小写,有的则无视。
2).查看所有的数据库
语法:show create database 数据库名;
3).删除数据库
语法:drop database 数据库名;
4).修改数据库
语法:alter database 数据库名 character set 字符集;
5).其他操作
切换数据库, 选定哪一个数据库:
use 数据库名; //注意: 在创建表之前一定要指定数据库. use 数据库名
查看正在使用的数据库
select database();
8.DDL操作表
1).创建表
语法:
create table 表名(
字段名 字段类型 [约束],
字段名 字段类型 [约束],
…
字段名 字段类型 [约束]
);
字段类型 :
约束 :- 即规则,规矩 限制;
- 作用:保证用户插入的数据保存到数据库中是符合规范的
约束种类:
-
not null: 非空 ; eg: username varchar(40) not null username这个字段不能为空,必须要有数据
-
unique:唯一约束, 后面的数据不能和前面重复; eg: cardNo char(18) unique; cardNo字段不能出现重复的数据
-
primary key;主键约束(非空+唯一); 一般用在表的id列上面. 一张表基本上都有id列的, id列作为记录的唯一标识的
-
auto_increment: ==自动增长,必须是设置了primary key之后,才可以使用auto_increment==
-
id int primary key auto_increment
id不需要我们自己维护了, 插入数据的时候直接插入null, 自动的增长进行填充进去, 避免重复了.
注意:
- 先设置了primary key 再能设置auto_increment
- 只有当设置了auto_increment 才可以插入null 自己维护 否则插入null会报错
id列: - 给id设置为int类型, 添加主键约束, 自动增长
- 或者给id设置为字符串类型,添加主键约束, 不能设置自动增长
2).查看表
查看所有的表
语法:show tables;
查看表的定义结构
语法:desc 表名;
3).修改表
语法:
增加一列; alter table 表 add 字段 类型 约束;
修改列的类型约束; alter table 表 modify 字段 类型 约束 ;
修改列的名称,类型,约束; alter table 表 change 旧列 新列 类型 约束;
删除一列; alter table 表名 drop 列名;
修改表名; rename table 旧表名 to 新表名;
4).删除表
语法:
drop table 表名;
9.DML操作表记录-增删改
1).插入记录(添加数据)
语法:
- insert into 表(列,列…) values(值,值…);//如果一个设置了非空的列没有插入数据会报错
- insert into 表 values(值,值…); //如果一个设置了非空的列没有插入数据会报错
2).更新记录
语法:
update 表 set 列 =值, 列 =值,… [where 条件];//如果没有加where 会对所有行全进行更新,所以必须要有条件
3).删除记录
语法:delete from 表 [where 条件] 注意: 删除数据用delete,不用truncate
(truncate)语法:
truncate table 表;
当你不再需要该表时, 用 drop;当你仍要保留该表,但要删除所有记录时, 用 truncate;当你要删除部分记录时(always with a WHERE clause), 用 delete.
Truncate是一个能够快速清空资料表内所有资料的SQL语法。并且能针对具有自动递增值的字段,做计数重置归零重新计算的作用。(与其他表有关系时无法使用)
10.DQL操作表记录-查询
1).单表查询
基本查询语法:
select [*][列名 ,列名][列名 as 别名 …] [distinct 列名] from 表名 [where 条件]
查询所有的列的记录语法:
- select * form 表
查询某张表特定列的记录语法: - select 列名,列名,列名… from 表
去重查询 语法: - select distinct 字段名 from 表名; //要数据一模一样才能去重
别名查询 语法: - select 列名 as 别名 ,列名 from 表 //列别名 as可以不写
- select 别名.* from 表 as 别名 //表别名(用于多表查询)
运算查询(+,-,*,/等)语法 - select 列名,列名+10 from 表名;
条件查询语法:
select … from 表 [where 条件]//取出表中的每条数据,满足条件的记录就返回,不满足条件的记录不返回
条件:
1.between…and… 区间查询
语法:
where 列名 between 1000 and 3000//表示1000<=price<=3000
2.in(值,值…)
语法:
where 列名 = in(值,值…) //只查询括号内的值
3.like 模糊查询 一般和_或者%一起使用
语法:
列名 like ‘张%’ //查询姓张的用户, 名字的字数没有限制
列名 like ‘张_’ //查询姓张的用户, 并且名字是两个的字的
4.and 多条件同时满足
语法:
where 条件1 and 条件2 and 条件3
5.or 任意条件满足
语法:
where 条件1 or 条件2 or 条件3
排序查询
1.单列排序:
语法:
select … from 表名 [where 条件] order by 字段名 [asc|desc]; asc:升序,desc:降序,不指定默认是升序// 只按某一个字段进行排序,单列排序
2.组合排序:
语法:
select … from 表名 [where 条件] order by 字段名 [asc|desc], 字段名 [asc|desc],…; //同时对多个字段进行排序,如果第1个字段相等,则按第2个字段排序,依次类推
聚合函数 查询
语法:
SELECT 聚合函数(列名) FROM 表名 [where 条件];
聚合函数 | 作用 |
---|---|
max(列名) | 求这一列的最大值 |
min(列名) | 求这一列的最小值 |
avg(列名) | 求这一列的平均值 |
count(列名) | 统计这一列有多少条记录 |
sum(列名) | 对这一列求总和 |
分组查询
语法:
select … from 表名 [where 条件] group by 列 [having 条件];
分组后筛选 having
分页查询
语法:
select … from 表名 limit 起始行数,查询的记录条数; – 注意: 起始行数是从0开始
分页查询的公式:
limit (页码-1)*每页显示的条数,每页显示的条数;