数据库的基本概念

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. Androidclient验证Licence的原理

    需求 限制App的使用,使App仅仅能在有许可的设备上执行. 分析及解决方式 原理 让App在每次执行的时候都连接server进行合法性验证--当然是一个非常成熟可靠的方案. 可是这样做的局限也是每次 ...

  2. mysqld与mysqld_safe的区别

    文章1: 直接运行mysqld程序来启动MySQL服务的方法很少见,mysqld_safe脚本会在启动MySQL服务器后继续监控其运行情况,并在其死机时重新启动它.用mysqld_safe脚本来启动M ...

  3. 通视频URL截取第一帧图片

    为了方便直接给UIImage加个类别,以后什么时候使用可以直接调用. #import <UIKit/UIKit.h> @interface UIImage (Video) /** 通过视频 ...

  4. (转载)常用的Mysql数据库操作语句大全

    打开CMD,进入数据库命令:mysql -hlocalhost -uroot -p 退出数据库:exit 用户管理: 1.新建用户: >CREATE USER name IDENTIFIED B ...

  5. VC 无边框对话框的任务栏右键菜单

    MFC ,基于对话框的程序,属性为:Border : none. 程序运行后,在任务栏里面点右键,不会弹出类似下面的菜单: 在对话框的OnInitDialog里面添加如下语句即可: ModifySty ...

  6. 2016/06/16 phpexcel

      程序部分   require_once './phpexcel/PHPExcel.php';   // 首先创建一个新的对象  PHPExcel object $objPHPExcel = new ...

  7. Codeforces Round #422 (Div. 2) C. Hacker, pack your bags! 排序,贪心

    C. Hacker, pack your bags!     It's well known that the best way to distract from something is to do ...

  8. android 图片内存问题

    在android开发过程中,经常遇到oom的问题,原因有很多种,其中最难处理的是图片造成的oom,于是在网络上对比了几个图片加载的库,最终选择了Facebook的fresco库(github地址:ht ...

  9. (MySQL里的数据)通过Sqoop Import Hive 里 和 通过Sqoop Export Hive 里的数据到(MySQL)

    Sqoop 可以与Hive系统结合,实现数据的导入和导出,用户需要在 sqoop-env.sh 中添加HIVE_HOME的环境变量. 具体,见我的如下博客: hadoop2.6.0(单节点)下Sqoo ...

  10. POJ 3750 小孩报数问题 (线性表思想 约瑟夫问题 数组模拟运算的 没用循环链表,控制好下标的指向就很容易了)

    小孩报数问题 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10423   Accepted: 4824 Descripti ...