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数据库重要知识点(知了堂学习心得)的更多相关文章

  1. 【知了堂学习心得】浅谈c3p0连接池和dbutils工具类的使用

    1. C3P0概述 C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展.目前使用它的开源项目有Hibernate,Spring等. 2. C3P ...

  2. 【知了堂学习笔记】java 自定义异常

    java 常见异常种类(Java Exception): 算术异常类:ArithmeticExecption 空指针异常类:NullPointerException 类型强制转换异常:ClassCas ...

  3. [知了堂学习笔记]_Java代码实现MySQL数据库的备份与还原

    通常在MySQL数据库的备份和恢复的时候,多是采用在cmd中执行mysql命令来实现. 例如: mysqldump -h127.0.0.1 -uroot -ppass test > d:/tes ...

  4. 【知了堂学习笔记】java 底层容易忽略的知识点

    1. java中的关键字 提到关键字,最主要的就是不能用关键字作为标识符,值得注意的有以下几点. ①其中goto与const在java中没有定义,但是也是关键字.这个基本用不到,但是应该有个认知. ② ...

  5. [知了堂学习笔记]_JSON数据操作第2讲(JSON的封装与解析)

    上一讲为大家讲了什么是JSON,那么这一讲为大家带来了在WEB项目中JSON的用法,也就是JSON的封装与解析. 此图是数据库中的部分内容 一.JSON封装 所谓的JSON封装,指的是在Servlet ...

  6. [知了堂学习笔记]_纯JS制作《飞机大战》游戏_第1讲(实现思路与游戏界面的实现)

    整体效果展示: 一.实现思路 如图,这是我完成该项目的一个逻辑图,也是一个功能模块完成的顺序图. 游戏界面的完成 英雄飞机对象实现,在实现发射子弹方法过程中,又引出了子弹对象并实现.在此时,英雄飞机能 ...

  7. [知了堂学习笔记]_MVC设计模式与JavaWEB三层架构

    一.MVC设计模式 MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(Controlle ...

  8. [知了堂学习笔记]_ajax的两种使用方式

    一.Ajax概述 1.什么是同步,什么是异步 同步现象:客户端发送请求到服务器端,当服务器返回响应之前,客户端都处于等待 卡死状态 异步现象:客户端发送请求到服务器端,无论服务器是否返回响应,客户端都 ...

  9. 【知了堂学习笔记】java 编写几种常见排序算法2

    排序的分类: 1.直接选择排序 它的基本思想是:第一次从R[0]~R[n-1]中选取最小值,与R[0]交换,第二次从R[1]~R[n-1]中选取最小值,与R[1]交换,....,第i次从R[i-1]~ ...

随机推荐

  1. PHP 使用redis实现秒杀

    PHP 使用redis实现秒杀 使用redis队列,因为pop操作是原子的,即使有很多用户同时到达,也是依次执行,推荐使用(mysql事务在高并发下性能下降很厉害,文件锁的方式也是) 先将商品库存如队 ...

  2. Exif Info 隐私政策

    隐私政策 本应用尊重并保护所有使用服务用户的个人隐私权.为了给您提供更准确.更有个性化的服务,本应用会按照本隐私权政策的规定使用和披露您的个人信息.但本应用将以高度的勤勉.审慎义务对待这些信息.除本隐 ...

  3. 2、C#基础 - Visual Studio 的版本选择和下载

    有句话说:工欲善其事,必先利其器,我不推荐在学习一个语言时使用记事本练习,甚至说相当的排斥.当然了,你也可以选择你自己喜欢的方式.本系列推荐使用的IDE为vs2017 community版,银子不够的 ...

  4. COM组件转换为.NET元数据2

    上一篇通过命令的方式实现COM组件与.NET元素的转换.这次直接在VS中转换. 以下为步骤:

  5. [译]在Asp.Net Core 中使用外部登陆(google、微博...)

    原文出自Rui Figueiredo的博文<External Login Providers in ASP.NET Core> 摘要:本文主要介绍了使用外部登陆提供程序登陆的流程,以及身份 ...

  6. sendGrid 纯文本的换行问题

    项目中使用sendGrid发送邮件,并且要求纯文本格式,遇到了无法换行的问题(使用\r\n). 解决方案: 1. 在换行符前加空格(官方推荐的做法 https://sendgrid.com/docs/ ...

  7. iOS 提交AppStore不出现构建的版本

    提交App Store不出现构建的版本 Xcode版本:8.0 近日往App Store上跟新一个版本,提交了好几次,built号增加了好几个,上传每次都成功了,但是在iTunes Contact上一 ...

  8. Android IntentService的使用和源码分析

    引言 Service服务是Android四大组件之一,在Android中有着举足重轻的作用.Service服务是工作的UI线程中,当你的应用需要下载一个文件或者播放音乐等长期处于后台工作而有没有UI界 ...

  9. Java内存管理(一)

    好久没有写博客了,深感羞愧,今天聊一下Java的内存管理 简单介绍 Java相比传统语言(C,C++)的一个优势在于其能够自己主动管理内存.从而将开发人员管理内存任务剥离开来. 本文大体描写叙述了J2 ...

  10. Xamarin.iOS + MvvmCross: UIPickerView data binding, SelectedItemChanged event

    UI initialization: _pickerView = new UIPickerView(); _pickerView.ShowSelectionIndicator = true; _pic ...