MySql基础
一.数据库的概念
1.什么是数据库
数据库:DataBase(DB),是存储和管理数据的仓库
数据库里的数据是有组织的存储的
MySQL由瑞典 MySQL AB 公司开发, 后来Sun公司收购了MySQL,而Sun公司又被Oracle收购。
优点:永久储存,操作方便,可以确保数据的完整性和一致性,可以保护数据的安全性。
2.关系型数据库
关系型数据库是现在开发的时候用的挺多的一种数据库,现在常见的关系型数据库有:
(MySQL,Oracle,SQL Sever),特别是MySQL是中小型公司或者少数大公司用的一个数据库
二、关系型数据库(MySQL举例)数据库、表、数据的关系
1.关系型数据库
关系型数据库(RDBMS)建立在关系模型基础上,由多张相互连接的二维表组成的数据库。
特点:
使用表存储数据,格式统一,便于维护
统一使用SQL语言操作,标准统一,使用方便,可用于复杂的数据查询
2.数据库,表,数据之间的关系
●MySQL里面可以创建多个数据库
●数据库里面可以创建多张表
●表里面可以存储多个数据
●客户端可以通过数据库管理系统来操作MySQL数据库对数据进行增删改查
三、SQL的简介
SQL:一门操作关系型数据库的编程语言,定义所有关系型数据库的统一标准
简单的来说:SQL为所有的关系数据库制定了一套操作标准,比如数据查询、数据更新、数据插入、数据删除等操作,都要按照SQL给的标准来做,这样无论是不同的关系型数据库产品,都能很快上手。
1、SQL的通用语法
●SQL语句可以单行,多行书写以分号结尾。
●SQL语句可以使用空格/缩进来增强语句可读性
●MySQL语句不分大小写
●注释:单行注释:--注释的内容 或者 #注释的内容(MySQL特有)
多行注释:/*注释的内容*/(跟Java的注释一样)
2、SQL的分类
SQL的分类分为四大类
一、DDL(Data Definition Language)数据定义语言,创建数据库,设计表。
二、DML(Data Manipulation Language)数据操作语言,用来对数据库的数据进行增删改的操作
三、DQL(Data Query Language)数据查询语言,用来对数据库的数据进行查询
四、DCL(Data Control Language)数据控制语言,用来创建数据库用户,控制数据库访问权限
四、DDL对数据库和数据表的操作(重要)
1、数据库的登录
对数据库进行操作的时候我们要登录我们的MySQL才能进行操作,那么怎么登录呢?
第一种方式(没有可视化界面,用起来很难受):
win + R 输入cmd 打开命令行 输入命令 mysql -u后面写你的mysql的用户名 -p后面写你的密码
第二种方式(借用MySQL的图形化工具):我用的Navicat这个图形化工具
2、表结构分析(重点)
在我们设计表的时候,要分析我们的表的字段到底怎么写,长度写多少,需要什么类型的字段等等.......
首先,我们要从页面的一个增删改查去分析,其次从要求规则去分析,另外有三个默认的字段是要加上的
(id,添加时间,修改时间)这三个字段虽然没说,但是在开发中默认加上。
3、DDL操作数据库
●创建数据库:create database 数据库名;
●查询所有的数据库:show databases;
●查询当前数据库:select databases();
●使用数据库:user 数据库名;
●删除数据库:drop database 数据库名;
注意:上述的语法database可以改成schema 例如:show schema;
4、DDL操作数据表
●创建数据表:create table 表名(
字段 类型 [约束] [comment 字段的注释] ,
)
●查看当前数据库的所有表:show tables;
●查询表结构:desc 表名
●查询建表语句:show create table 表名;
●添加字段:alter table 表名 add 字段名 类型(长度) [注释] [约束]
●修改字段类型:alter table 表名 modify 字段名 新数据类型(长度)
●修改字段名和字段类型:alter table 表名 change 旧字段名 新字段名 新数据类型(长度)
●删除字段:alter table 表名 drop column 字段名
●修改表名:rename table 表名 to 新表名
●删除表: drop table 表名(注意:删除表的时候表的数据也会一并被删除)
5、操作数据添加数据注意:插入数据时添加的值要与表中的字段的顺序要对应才行 插入时间类型的数据时,要在加上''(单引号) 插入的数据长度,不能超过字段的长度范围●指定字段添加数据:insert into 表名 (字段名,字段名.....) values (值1, 值2, ........)●全部字段添加数据:insert into 表名 values (值1,值2) (注意:字段名有多少就要写多少个值)●批量添加数据(指定字段):insert into 表名 (字段名,字段名.....) values (值1, 值2, ........), (值1, 值2, ........)●批量添加数据(全部字段):insert into 表名 values (值1, 值2, ........), (值1, 值2, ........)修改数据修改数据:update 表名 set 字段名 = 值1 ,字段名 = 值2 [where 条件]删除数据
删除数据:delete from 表名 [where 条件]
6、约束
●主键约束:一行数据的唯一标识、要求唯一并且不为空(primary key auto_increment)
●非空约束:限制这个字段不能为空 (not null)
●唯一约束:限制这个字段是唯一的(unique)
●默认约束:给字段添加一个默认的值(default)
五、DQL对数据进行查询(重要)
1.DQL的基本查询
●查询多个字段:select 字段名,字段名 from 表名;
●查询所有字段(通配符):select * from 表名;(在开发中不建议使用,效率太差 ,用这个可能会有被骂的风险)
●设置别名:select 字段名 as 别名 , 字段名 as 别名 from 表名 (tips:as可以不写)
●去除重复记录:select distinct 字段列表 from 表名;2.DQL条件查询
●select 字段名 from 表名 where 条件
3.聚合函数
●select count(字段) from 表 (统计个数)
●select max(字段) from 表 (求最大值)
●select min(字段) from 表 (求最小值)
●select avg(字段) from 表 (求平均值)
●select sum字段) from 表 (求和)
4.分组查询(关键字group by,select后面只能写分组的字段和聚合函数,分组之后还想对分好组的数据进行过滤的话要用having 然后写条件)
格式:select 分组后的字段,聚合函数 from 表 where 条件 group by 字段 having 过滤条件
5.排序查询(asc升序,desc降序)
格式:select 字段名,字段名 from 表 where 条件 order by 字段 排序规则
排序查询
-- 1.根据入职时间, 对员工进行升序排序
select id, username, password, name, gender, image, job, entrydate, create_time, update_time from emp order by entrydate asc ;
select * from emp order by entrydate asc ;
-- 2.根据入职时间, 对员工进行降序排序
select id, username, password, name, gender, image, job, entrydate, create_time, update_time from emp order by entrydate desc;
select * from emp order by entrydate desc ;
-- 3.根据 入职时间 对公司的员工进行 升序排序, 入职时间相同, 再按照 ID 进行降序排序
select * from emp order by entrydate asc , id desc ;
6.分页查询
格式:select * from 表 limit 起始索引,分页展示的条数
计算起始索引公式:(当前页码-1)* 分页展示的条数
-- 公式:select * from 表 limit 起始索引,10;
-- 起始索引:(当前页 - 1 ) * 分页数;
-- 1.每页展示10条记录, 查询第1页, 跳过0条, 获取10条
select * from emp limit 0,10;
-- 1.每页展示5条记录, 查询第1页, 获取5条
select * from emp limit 0,5;
-- 2.每页展示10条记录, 查询第2页, 跳过10条, 获取10条
select * from emp limit 10,10;
-- 2.每页展示5条记录, 查询第2页,获取5条
select * from emp limit 5 , 5;
-- 3.每页展示10条记录, 查询第3页, 跳过20条, 获取10条
select * from emp limit 20,10;
-- 3.每页展示5条记录, 查询第3页,获取5条
select * from emp limit 10 , 5;
六、多表设计
1.一对多关系的表结构
要多的一方设置一个外键关联“一”的一方的主键
2.一对一关系的表结构
在任意一个表创建一个外键,外键用unique(唯一)修饰(通常来说一对一设置外键是在不常用的表上设置主键)
3.多对多关系的表结构
这个时候就要创建一个中间表来记录两个表的主键