Mysql数据库重要知识点(知了堂学习心得)
Mysql数据库知识点
1.管理数据库语句:
使用数据库:
use test;
添加数据库:
create database 数据库名;
create database test;
修改数据库:
alter database 数据库名;
alter database test;
删除数据库:
drop database 数据库名;
drop database test;
查看所有数据库:
show databases;
2.管理表语句:
添加数据表:
create table 表名(
列名 数据类型 数据约束,
列名 数据类型 数据约束
);
create table student(
name varchar(20) not null,
age int(4)
)
修改数据表:
alter table 表名;
1)在表中增加新字段
alter table student add colunm name varchar(20);
2)删除表中的字段
alter table student drop name;
3)修改表中字段的类型
alter table student modify name varchar(10);
删除数据表:
drop table 表名;
drop table student;
查看所有表:
show tables;
3.管理数据语句:
插入数据:
insert into 表名 (列1,列2...) values (值1,值2...);
insert into student (name,age) values ('张三',20);
更新数据:
update 表名 set 列=修改值 where 条件;
update student set name='李四' where name='张三';
删除数据:
delete from 表名 where 条件;
delete from student where name='李四';
查询数据:
selete * from 表名 where 条件;
selete * from student where name='张三';
4.各种查询语句:
查询时指定别名:
1) SELECT id AS '编号',NAME AS '姓名' FROM student;
2) SELECT id '编号',NAME '姓名' FROM student;(AS可以省略)
查询时合并列:
需求:查询每个学生的总分
SELECT NAME AS '姓名',(servlet+mysql) AS '总成绩' FROM student;
注意:合并列的字段必须是数值类型的字段
查询时去除重复(distinct)
需求:查询有哪些地区的学生
SELECT DISTINCT address FROM student;
另一种语法
SELECT DISTINCT(address) FROM student;
条件查询
逻辑条件: and or
需求:查询学生的id为1,且姓名为张三的学生
SELECT * FROM student WHERE id=1 AND NAME='张三';(交集)
需求:查询学生的id为2,或姓名为张三的学生
SELECT * FROM student WHERE id=2 OR NAME='张三';(并集)
比较条件: > < >= <= = <> (between and--在...之间 包前包后)
需求:查询servlet分数大于80分的学生
SELECT * FROM student WHERE servlet>80;
需求:查询mysql分数小于或等于85分的学生
SELECT * FROM student WHERE mysql<=85;
需求:查询servlet分数大于或等于80分,且小于或等于85分的学生
SELECT * FROM student WHERE servlet>=80 AND servlet<=85;
代替上面语句的语法
SELECT * FROM student WHERE servlet BETWEEN 80 AND 85;
需求:查询年龄不等于30的学生
SELECT * FROM student WHERE age<>30;
判空条件: is null, is not null, =’’, <>’’
Null:表示没有数据
空字符:表示有数据
需求:查询没有性别数据的学生(数据‘男’或‘女’)
SELECT * FROM student WHERE gender IS NULL OR gender='';
需求:查询有性别数据的学生
SELECT * FROM student WHERE gender IS NOT NULL AND gender<>'';
模糊条件: like
模糊替代符号:
%:替代任意个字符
_:替代一个字符
需求:查询姓“李”的学生
SELECT * FROM student WHERE NAME LIKE '李%';
需求:查询姓名中包含‘四’字的学生
SELECT * FROM student WHERE NAME LIKE '%四%';
需求:查询姓‘李’,全名只有两个字的学生
SELECT * FROM student WHERE NAME LIKE '李_';
聚合函数查询(用于统计结果)
Max()取最大值 min()取最小值 avg()取平均值 count()统计标的记录数量 sum()求和
需求:查询servlet的最高分
SELECT MAX(servlet) FROM student;
需求:查询mysql的最低分
SELECT MIN(mysql) FROM student;
需求:查询servlet的平均分
SELECT AVG(servlet) FROM student;
需求:查询当前有几个学生
SELECT COUNT(*) FROM student;
需求:查询servlet成绩的总和
SELETE SUM(servlet) from student;
分页查询(limit)
Limit起始行数,查询的行数
起始行数从0开始
需求:查询第1,2条数据
SELECT * FROM student LIMIT 0,2;
分页查询需知道:当前页码,每页显示条数
结论分页查询当前页数据:select * from student limit (当前页码-1)*每页显示条数,每页显示条数;
需求:学生共20条数据,每页显示5条,共4页
查询第3页(第11到15条)的学生数据:select * from student limit 10,5;
查询后排序(order by)
Desc:降序。数值从大到小,字母z-a
Asc:升序。数值从小到大,字母a-z
默认情况下,按照插入的顺序排序
需求:按照id的升序排序
Select * from student order by id asc;
需求:按照servlet成绩降序排序
Select * from student order by servlet desc;
多个排序条件的情况:先按照前面的条件排序,当出现重复记录,再按照后面的条件排序
需求:按照age升序,再按照servlet成绩升序排序
Select * from student order by age asc,servlet asc;
分组查询(group by)
需求:查询每个地区有多少人
SELECT address,COUNT(*) FROM student GROUP BY address;
需求:统计男女的人数
注意:where条件必须放在group by 分组之前
SELECT gender,COUNT(*) FROM student WHERE gender IS NOT NULL AND gender<>'' GROUP BY gender;
分组后筛选(having)
需求:查询哪些地区的人数是大于2个的地区
查询哪些地区多少人 2)筛选人数大于2的地区
注意:having使用在group by分组之后,对分组后的条件进行筛选
SELECT address,COUNT(*) FROM student GROUP BY address HAVING COUNT(*)>2;
5.数据约束(给表添加数据约束,从而约束用户操作表数据的行为)
1)默认值约束(default)
create table test(
name varchar(20),
gender varchar(20) default ‘男’
)
需求:当不插入gender的时候,分配一个‘男’的默认值
注意:1)当没有插入gender字段的时候,分配一个默认值
2)非空约束(not null)
create table test(
name varchar(20) not null,
gender varchar(20)
)
需求;name字段一定要有值(不能不插入数据,不能是null),这是给name添加非空约束
1)非空约束,不能不插入值
Insert into test(gender) values(‘男’);
2)非空约束,不能插入null
Insert into test(name,gender) values(null,’男’);
3)唯一约束(unique)
create table test(
Id int unique,
name varchar(20)
)
需求:id的值不能出现重复。这时就要给id添加一个唯一约束
1)不能插入重复的值
2)唯一约束,可以插入多个null。所以唯一约束不能约束null
Insert into test(id,name) values(1,’张三’);
4)主键约束(primary key)(唯一+非空)
注意;
1)通常情况下,我们会给每张表都设置一个主键字段,用来标记记录的唯一性
2)但是不建议把业务含义字段作为主键,因为随着业务的变化,业务字段可能出现重复
3)建议给每张表都独立添加一个叫id的字段,把这个id字段设置成主键,用来作为记录的唯一性
create table test(
Id int primary key,
name varchar(20)
)
1)唯一性
2)非空性
5)自增长约束(auto_increment)
create table test(
Id int primary key auto_increment,
name varchar(20)
)
自增长约束:初始值为0,每次递增1
使用truncate table 删除数据的时候,可以把自增长的初始值置为0
6)外键约束
//员工表(副表:被别的表约束的表,外键设置在副表)
Create table employee(
Id int primary key auto_increment,
name varchar(20),
deptId int,
添加外键约束(foreign key)
Constraint employee_dept_fk foreign key(deptId) references dept(id)
外键名 外键字段 参考
)
//部门表(主表:约束别人的表)
Create table dept(
Id int primary key auto_increment,
Name varchar(20)
)
外键约束在什么情况下会起作用?
插入数据:当往副表插入了主表中不存在的数据时,外键起作用
修改数据:当往副表中修改主表中不存在的数据时,外键起作用
删除数据:副表中有关联主表数据的情况下,当删除主表数据时,外键起作用
当有了外键之后,应该如何管理数据呢?
插入数据:先插入主表的数据,再插入副表数据
修改数据:先修改主表数据,再修改副表数据
删除数据:先删除副表数据,再删除主表数据
7)级联技术(cascade)
级联:当有了外键的时候,我们希望修改或删除数据的时候,修改或删除主表数据时,同时能够影响副表的数据,这时就可以使用级联
Create table employee(
Id int primary key auto_increment,
name varchar(20),
deptId int,
添加外键约束(foreign key)
添加级联修改:on update cascade
添加级联修改:on delete cascade
Constraint employee_dept_fk foreign key(deptId) references dept(id) on update cascade on delete cascade
外键名 外键字段 参考
);
//部门表(主表:约束别人的表)
Create table dept(
Id int primary key auto_increment,
Name varchar(20)
);
6.数据库设计的三大范式
第一范式;要求表的每个字段必须独立的不可分割的单元
学生表: student name ---违反第一范式
张三|狗娃
王涵|张小涵
查询:现用名中包含‘张’的学生
Select * from student where name like ‘%张%’;
学生表: student name old_name ---符合第一范式
张三 狗娃
王涵 张小涵
第二范式:在第一范式的基础上,要求表的除主键以外的字段都和主键有依赖关系
一张表只表达一个意思
员工表:employee
员工编号 员工姓名 部门名称 订单名称 ---违反第二范式
员工表:employee
员工编号 员工姓名 部门名称 ---符合第二范式
订单表:
订单编号 订单名称
第三范式:在第二范式的基础上,要求表的除主键以外的字段都只能和主键有直接决定的依赖关系
员工表:employee
员工编号 员工姓名 部门编号 部门名称 ---违反第三范式(出现数据冗余)
1 张三 1 软件开发部
2 李四 1 软件开发部
员工表:employee
员工编号 员工姓名 部门编号 ---符合第三范式
1 张三 1
2 李四 1
部门表:dept
部门编号 部门名称
1 软件开发部
8)多表查询
1.交叉连接查询(笛卡尔乘积:4*3=12,产生笛卡尔积的原因是没有足够的连接条件)(一般不用)
需求:查询员工及其部门名称
SELECT employee.name,dept.name
FROM employee,dept;
2.内连接查询(使用最多)
多表查询的步骤:1)确定查询哪些表
2)确定查询哪些字段
3)确定连接条件(规则:条件=表数量-1)
SELECT employee.name,dept.name
FROM employee,dept
WHERE employee.deptId=dept.id;
另一种语法
SELECT e.name,d.name
FROM employee e
INNER JOIN dept d
ON e.deptId=d.id;
3.左外连接查询(左表数据全部显示,如果右边不满足,则显示null)
需求:查询部门及其部门的员工
SELECT d.name,e.name
FROM dept d
LEFT OUTER JOIN employee e
ON d.id=e.deptId;
4.右外连接查询(右表数据全部显示,如果左边不满足,则显示null)
SELECT d.name,e.name
FROM employee e
RIGHT OUTER JOIN dept d
ON e.deptId=d.id;
Mysql数据库重要知识点(知了堂学习心得)的更多相关文章
- 【知了堂学习心得】浅谈c3p0连接池和dbutils工具类的使用
1. C3P0概述 C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展.目前使用它的开源项目有Hibernate,Spring等. 2. C3P ...
- 【知了堂学习笔记】java 自定义异常
java 常见异常种类(Java Exception): 算术异常类:ArithmeticExecption 空指针异常类:NullPointerException 类型强制转换异常:ClassCas ...
- [知了堂学习笔记]_Java代码实现MySQL数据库的备份与还原
通常在MySQL数据库的备份和恢复的时候,多是采用在cmd中执行mysql命令来实现. 例如: mysqldump -h127.0.0.1 -uroot -ppass test > d:/tes ...
- 【知了堂学习笔记】java 底层容易忽略的知识点
1. java中的关键字 提到关键字,最主要的就是不能用关键字作为标识符,值得注意的有以下几点. ①其中goto与const在java中没有定义,但是也是关键字.这个基本用不到,但是应该有个认知. ② ...
- [知了堂学习笔记]_JSON数据操作第2讲(JSON的封装与解析)
上一讲为大家讲了什么是JSON,那么这一讲为大家带来了在WEB项目中JSON的用法,也就是JSON的封装与解析. 此图是数据库中的部分内容 一.JSON封装 所谓的JSON封装,指的是在Servlet ...
- [知了堂学习笔记]_纯JS制作《飞机大战》游戏_第1讲(实现思路与游戏界面的实现)
整体效果展示: 一.实现思路 如图,这是我完成该项目的一个逻辑图,也是一个功能模块完成的顺序图. 游戏界面的完成 英雄飞机对象实现,在实现发射子弹方法过程中,又引出了子弹对象并实现.在此时,英雄飞机能 ...
- [知了堂学习笔记]_MVC设计模式与JavaWEB三层架构
一.MVC设计模式 MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(Controlle ...
- [知了堂学习笔记]_ajax的两种使用方式
一.Ajax概述 1.什么是同步,什么是异步 同步现象:客户端发送请求到服务器端,当服务器返回响应之前,客户端都处于等待 卡死状态 异步现象:客户端发送请求到服务器端,无论服务器是否返回响应,客户端都 ...
- 【知了堂学习笔记】java 编写几种常见排序算法2
排序的分类: 1.直接选择排序 它的基本思想是:第一次从R[0]~R[n-1]中选取最小值,与R[0]交换,第二次从R[1]~R[n-1]中选取最小值,与R[1]交换,....,第i次从R[i-1]~ ...
随机推荐
- SQL知识目录
SQL理论知识 -------理论知识总结 -------理论知识总结 -------理论知识总结 -------理论知识总结 -------理论知识总结 -------理论知识总结 -------理 ...
- ShoneSharp语言(S#)的设计和使用介绍系列(3)— 修炼工具
ShoneSharp语言(S#)的设计和使用介绍 系列(3)- 修炼工具 作者:Shone 声明:原创文章欢迎转载,但请注明出处,https://www.cnblogs.com/ShoneSharp. ...
- JavaScript正则表达式(Regular Expression):RegExp对象
第一部分:新建正则表达式 JavaScript中正则表达式是参照Perl 5(一门历史很悠久的语言,现在tiobe编程语言排行依然在10名左右)建立的. 新建正则表达式的方法有两种: 1.使用字面量( ...
- Undefined index: HTTP_RAW_POST_DATA的解决办法
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; 替换为 $postStr = isset($GLOBALS['HTTP_RAW_POST_DA ...
- django1.11如何实时访问mysql数据库
前几天,一直在研究django框架,发现它自身封装了很多有用的API,很有意思.比如,数据库操作基本的创表,查询,插值,更新,删除都有,很方便,再加上json库可以直接将数据json化,通过服务器传给 ...
- CSS中line-height与vertical-align
参考文章: 深入了解CSS的line-height属性 Vertical-Align: 你需要知道的所有事[译] Vertical-Align: All You Need To Know 1.什么是行 ...
- Python爬虫(十六)_JSON模块与JsonPath
本篇将介绍使用,更多内容请参考:Python学习指南 数据提取之JSON与JsonPATH JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它是的人们很容易 ...
- linux0.11学习笔记(1)
公布软件包包括内容: bootimage.Z - 具有美国键盘代码的压缩启动映像文件: rootimage.Z - 以1200kB 压缩的根文件系统映像文件: linux-0.11.tar.Z- 内核 ...
- 谈谈单元測试之(二):測试工具 JUnit 3
前言 上一篇文章<为什么要进行烦人的单元測试?>讨论了一下现阶段软件开发中,程序猿们測试情况的现状.这篇文章中,我打算介绍一下单元測试的工具(插件).而且推荐大家以后在开发中,真正的用上单 ...
- NBUT 1217 Dinner
[1217] Dinner 时间限制: 1000 ms 内存限制: 32768 K 问题描写叙述 Little A is one member of ACM team. He had just won ...