数据库的基本概念

1.数据库:DataBase 简称 DB,用于存储和管理数据的仓库

特点:

1.持久化存储数据的,其实数据库就是一个文件系统,

2.方便存储和管理数据

3.使用了统一操作数据库 --SQL

SQL通用语法

  1. SQL语句可以单行或多行书写,以分号结尾

  2. 可使用空格和缩进来增强可读性

  3. MySQL数据库的SQL语句不区分大小写,关键字建议大写

  4. 3种注释

    1. 单行注释: -- 注释内容 或 # 注释内容

    2. 多行注释 :/* 注释*/

SQL分类:
  1. DDL(Data Definition Language)数据定义语言,用来定义数据库对象:数据库表,列等。关键字: create,drop,alter等
  2. DML(Data Maipulation Language)数据操作语言,用来对数据库中表的数据进行增删改,关键字:insert,delete,update等
  3. DQL(Data Query Language)数据查询语言,用来查询数据库中表的记录,关键字:select ,where等
  4. DCL(Data Control Language)数据控制语言,用来定义数据库的访问权限和安全级别,级及创建用户,关键字:GRANT,REVOKE等

DDL:操作数据库、表

操作数据库
  1. C(Create):创建

    1. 创建数据库 create database 数据库名称;

    2. 创建数据库,判断不存在在创建

      ​ create database if not exists 数据库名称;

    3. 创建数据库,并制定字符集

      ​ create database 数据库名称 character set 字符集名:

  2. R(Retrieve):查询

    1. 查询所有数据库的名称

      ​ show databases;

    2. 查询某个数据库的字符集:

      ​ show create database 数据库名称;

  3. U(Update):修改

    1. 修改数据库的字符集

      ​ alter database 数据库名称 character set 字符集名称;

  4. D(Delete):删除

    1. 删除数据库

      ​ drop database 数据库名称;

    2. 判断数据库存在,存在再删除

      ​ drop database if exists 数据库名称;

  5. 使用数据库

    1. 查询当前正在使用的数据库名称

      ​ select database();

    2. 使用数据库

      ​ use 数据库名称;

操作表

  1. C(Create):创建

    1. 语法:

      1. create table 表名(

        ​ 列名1 数据类型1,

        ​ 列名2 数据类型2,

        ​ .....

        ​ 列名n 数据类型n

        );

        注意:最后一列,不需要加逗号

        数据库常用类型:

        1. int: 整数类型
        2. double:小数类型
        3. date 日期类型,只包含年月日 ,
        4. datatime:日期类型,包含年月日时分秒
        5. timestamp:时间错类型 包含年月日时分秒(如果不给这个字段赋值,或赋值为null,则默认使用当前系统的时间)
        6. varchar:字符串

        复制表:create table 新的表名 like 被复制的表名;

  2. R(Retrieve):查询

    1. 查询某个数据库中所有的表名 show tables;

    2. 查询表结构

      ​ desc 表名;

  3. U(Update):修改

    1. 修改表名

      ​ alter table 表名 rename to 新的表名;

    2. 修改表的字符集

      ​ alter table 表名 character set 字符集名称;

    3. 添加一列

      ​ alter table 表名 add 列名 数据类型;

    4. 修改列名称 和数据类型

      ​ alter table 表名 change 旧的列名 新列名 新数据类型;

      ​ alter table 表名 modify 列名 新数据类型(这种方式只改数据类型);

    5. 删除列

      ​ alter table 表名 drop 列名;

  4. D(Delete):删除

    1. drop table 表名;
    2. drop table if exists 表名;
CREATE TABLE student(
id int,-- 列名id 数据类型 int
name varchar(32),-- 列名 数据类型字符串varchar,字符串数据类型要指定长度
age int,
score double(4,1),
birthday date,
insert_time timestamp -- 不要加逗号 );

DML:增删改表中数据

  1. 添加数据:

    ​ 语法:insert into 表名(列名1,列名2,,...列名n)values(值1,值2,...值n);

    注意

    1. 列名和值都要一一对应
    2. 如果表名后,不定义列名,则默认给所有列添加值
    3. 除了数字类型,其他类型都需要使用引号(单双都可以)引起来
  2. 删除数据

    ​ 语法:

    ​ delete from 表名[where 条件]

    ​ 如果不加条件,则删除表中所有记录

  3. 修改数据

    ​ 语法:

    ​ update 表名 set 列名1 = 值1 ,列名2 = 值2,....[where 条件];

    ​ 如果不加任何条件,则会将表中所有记录全部修改

DQL:查询语句

  1. 排序查询

    ​ 语法:

    ​ SELECT *FROM 表名 ORDER BY 排序字段1 排序方式1,排序字段 排序方式2...

    ​ 排序方式:

    ​ ASC:升序,磨人的

    ​ DESC:降序

    ​ 注意:

    ​ 如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件

  2. 聚合函数

    1. count:计算个数 SELECT COUNT(列名) FROM 表名;
    2. max:计算最大值 SELECT MAX(列名) FROM 表名;
    3. min:计算最小值 SELECT MIN(列名) FROM 表名;
    4. sum:计算和 SELECT SUM(列名) FROM 表名;
    5. avg:计算平均值 SELECT AVG(列名) FROM 表名;
  3. 分组查询

    ​ 1.语法:group by分组字段;

    ​ 2.注意:

    1. 分组之后查询的字段:分组字段、聚合函数

    2. where和having的区别

      ​ 1.where在分组之前就已经限定了(筛选出条件不满足的)having在分完组之后在进行限定,又一次筛选出不满足的

      ​ 2.where后不可以跟聚合函数,having可以跟聚合函数

    DESC student;
    SELECT*FROM student;
    INSERT INTO student VALUES(9,'小乔',17,'女','建业',83,95); -- 把男女分为两组,然后按照性别来求他们的数学平均分
    SELECT sex,AVG(math) FROM student GROUP BY sex;
    -- sex是数组字段,AVG(math)是聚合函数,COUNT(id)也是聚合函数
    -- MAX(english)也是聚合函数,现在可以求出他们分组后的,分组后的,分组后的所需的各种值
    -- 把男女分为两组,然后按照性别来求他们的数学平均分
    -- 把他们分为两组之后他们的一组都有多少人
    SELECT sex,AVG(math),COUNT(id),MAX(english) FROM student GROUP BY sex;
    -- 要求分数大于90分的才参与分组
    SELECT sex,AVG(math),COUNT(id),MAX(english) FROM student WHERE math >90 GROUP BY sex;
    UPDATE student SET math=95 WHERE id=9;
    -- 要求分组后的人数大于2个人,才参入求数学平均分,分组后的人数,英语最大值 SELECT sex,AVG(math) ,COUNT(id) ,MAX(english) FROM student WHERE math >90 GROUP BY sex HAVING COUNT(id)>2;
    -- 可以对分组后的聚合函数后面可以加别名
    SELECT sex,AVG(math) 平均分,COUNT(id) 人数,MAX(english)最大值 FROM student WHERE math >90 GROUP BY sex HAVING COUNT(id)>2;
    --
  4. 分页查询

    1. 语法:limit 开始的索引,每页查询的条数;
    2. 公式:开始的索引= (当前的页码-1)*每页显示的条数

DQL:查询表中的记录

  1. 语法

    select

    ​ 字段列表(name ,age,sex)

    from

    ​ 表名列表

    where

    ​ 条件列表

    group by

    ​ 分组查询

    having

    ​ 分组后的条件

    order by

    ​ 排序

    limit

    ​ 分页限定

  2. 基础查询

    1. 多个字段的查询

      ​ select 字段名1,....from 表名;

    2. 去除重复

      ​ distinct

    3. 计算列

      ​ 一般可以使用四则运算计算列与列之间的值

      ​ ifnull(表达式1,表达式2):表达式1表示的是哪个字段,如果该字段为null,则使用表达式2来替代null

    4. 其别名

      as

-- 去除重复的结果集
SELECT DISTINCT address FROM student;
-- 计算math和english的和
SELECT NAME,math+english FROM student;
SELECT NAME,math 数学,english 英语,math+english 总分 FROM student;

条件查询

  1. where子句后跟条件

  2. 运算符>,<,<=,>=,=,<>,,BETWEEN...AND ,IN(集合),LIKE, IS NULL ADN或&&,or或||,not或!

表的约束

  1. 主键约束:primary key
  2. 非空约束:not null
  3. 唯一约束:unique
  4. 外键约束:foreign key
非空约束:
-- 非空的作用:被修饰的列不能为null
-- 非空约束的创建
在创建表示添加非空约束
CREATE TABLE stu(
id INT NOT NULL, -- id为非空
NAME VARCHAR(20)
);
-- 在表创建完之后添加非空
ALTER TABLE stuMODIFY NAME VARCHAR(20) NOT NULL; -- NAME为非空

唯一约束

-- 唯一约束的作用:被修饰的列的值不能重复
-- 创建表时,添加唯一元素
CREATE TABLE stu(
id INT,
phome_number VARCHAR(20) UNIQUE -- 添加了唯一元素
);
-- 在表创建后添加唯一约束
ALTER TABLE stu MODIFY phone number VARCHAR(20) UNIQUE;
-- 删除唯一约束
ALTER TABLE stu DROP INDEX phone_number;
主键约束
CREATE TABLE stu(
id INT PRIMARY KEY AUTO_INCREMENT, -- 给id添加主键约束,AUTO_INCREMENT自动增长
NAME VARCHAR(20)
);
-- 删除主键
ALTER TABLE stu DROP PRIMARY KEY;
-- 创建表后,添加主键
ALTER TABLE stu MODIEY id INT PRIMARY KEY;
-- 删除自动增长
ALTER TABLE stu MODIEY id INT;
-- 添加自动增长
ALTER TABLE stu MODIEY id INT AUTO_INCREMENT;
外键约束
-- 外键约束作用:让表与表之间产生关系,从而保证数据的正确性
CREATE TABLE 表名(
....
外键列
constraint 外键名称 foreign key (外键列名称) references 主表名称(注表列名称)
);
-- 删除外键
ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
-- 创建之后,添加外键
ALTER TABLE 表名 ADD constraint 外键名称 foreign key (外键列名称) references 主表名称(注表列名称)
-- 级联操作
-- 作用,列被修改后被关联的另外一条列也会被更改
-- 添加方法
ALTER TABLE 表名 ADD ALTER TABLE 表名 ADD constraint 外键名称 foreign key (外键列名称) references 主表名称(注表列名称) ON UPDATE CASCADE ON DELETE CASCADE;
ON UPDATE CASCADE;级联更新,更新一条列,被关联的列也会被更新
ON UPDATE CASCADE;级联删除,删除一条列,被关联的列也会被删除

笔记-JavaWeb学习之旅2的更多相关文章

  1. 笔记-JavaWeb学习之旅5

    CP30的演示 package cn.itcast.datasourcejdbc; import com.mchange.v2.c3p0.ComboPooledDataSource; import j ...

  2. 笔记-JavaWeb学习之旅7

    JavaScript基础 概念:一门客户端脚本语言,运行在客户端浏览器中,每一个浏览器都有JavaScript的解析引擎,是一个脚本语言,不需要编译,直接就可以被浏览器解析执行. JavaScript ...

  3. 笔记-JavaWeb学习之旅19

    Redis:redis是一款高性能的NOSQL系列的非关系型数据库 NOSQL: Not Only SQL ,意即"不仅仅是SQL",是一项全新的数据库理念,泛指非关系型数据库 r ...

  4. 笔记-JavaWeb学习之旅18

    AJAX:ASynchronous JavaScript And XML 异步的JavaScript 和XML 异步和同步:客户端和服务器端相互通信的基础上 同步:客户端操作后必须等待服务器端的响应, ...

  5. 笔记-JavaWeb学习之旅17

    1.过滤选择器 首元素选择器:first 获得选择的元素中的第一个元素 尾元素选择器:last获得选择元素中的最后一个元素 非元素选择器:not(selector) 不包括指定内容的元素 偶数选择器: ...

  6. 笔记-JavaWeb学习之旅16

    增强对象的功能 动态代理:在内存中形成代理类 实现步骤: 代理对象和真实对象实现相同的接口 代理对象 = Proxy.newProxyInstance(); 使用代理对象调用真实对象的方法 增强方法 ...

  7. 笔记-JavaWeb学习之旅15

    Filter:过滤器 概念:当访问服务器的资源是,过滤器可以将请求拦截下来,完成一些特殊的功能 快速入门: 步骤: 定义一个类,实现接口Filter 复写方法 配置拦截路径 package com.d ...

  8. 笔记-JavaWeb学习之旅14

    JSTL:JavaServer Pages Tag Library JSP标准标签库 if标签 <%@ page import="java.util.ArrayList" % ...

  9. 笔记-JavaWeb学习之旅10

    Servlet server applet运行在服务器端的小程序,servlet就是一个接口,定义了Java类被浏览器访问到的规则(Java类重写这个接口,就可以被浏览器(tomcat)识别) Ser ...

  10. 笔记-JavaWeb学习之旅13

    验证码案列 昨天晚上出现的500错误原因在于验证码没有获取到,获取验证码是应该获取的是共享域中的验证码,而我把获取值得键给写成了jsp中的键,而不是内存生成图片中,然后把图片上传到共享域中的键.这两个 ...

随机推荐

  1. HDU 2049 不容易系列之(4)——考新郎 (递推,含Cmn公式)

    不容易系列之(4)——考新郎 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

  2. XMLHTTPRequest DEMO(发送测试)

    对于其中的HTTP状态,我们知道200-299表明访问成功:300-399表明需要客户端 反应来满足请求:400-499和500-599表明客户端和服务器出错:其中常用的如404表示资源没找到,403 ...

  3. 李洪强iOS开发之-入门指南

    李洪强iOS开发之-入门指南 1零基础小白如何进行iOS系统学习 首先,学习目标要明确:其次,有了目标,要培养兴趣,经常给自己一些正面的反馈,比如对自己的进步进行鼓励,在前期小步快走:再次,学技术最重 ...

  4. thinkphp getField( )和field( )

    thinkphp getField( )和field( )   做数据库查询的时候,比较经常用到这两个,总是查手册,记不住,现在把它总结下,希望以后用的时候不查手册了. 不管是用select 查询数据 ...

  5. nyoj 题目10 skiing —— 南阳oj

    题目信息例如以下: skiing 时间限制:3000 ms  |  内存限制:65535 KB 难度:5 描写叙述 Michael喜欢滑雪百这并不奇怪, 由于滑雪的确非常刺激.但是为了获得速度,滑的区 ...

  6. git push & git pull 推送/拉取指定分支

    https://blog.csdn.net/litianze99/article/details/52452521

  7. POJ 3279 Dungeon Master

    Dungeon Master Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 21242   Accepted: 8265 D ...

  8. Codeforces Round #352 (Div. 2) C. Recycling Bottles

      C. Recycling Bottles time limit per test 2 seconds memory limit per test 256 megabytes input stand ...

  9. maven常用命令总结

    搞了多年java 似乎还有些命令 混混沌沌 今儿来总结下 mvn -v 查看版本 mvn -compile 编译当前工程 生成target目录的字节码文件以及报告 mvn -package 将当前工程 ...

  10. 概率dp集合

    bzoj1076 你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关.在这个奖励关里,系统将依次随机抛出k次宝物,每次你都可以选择吃或者不吃(必须在抛出下一个宝物之前做出选择,且现在决定不吃的宝物以后 ...