MySql 【DDL, DML, DQL, 约束(主键,外键)】

 

目录

  SQL语句:

1.DDL 操作数据库和数据表

2.DML表数据的增删改 

3.DQL表数据的查询 

基础查询:

条件查询 :

聚合函数查询

排序查询

 分组查询

分页查询 

-- 公式:开始索引 = (想显示的第几页的页码-1) * 每页显示的条数

约束

1.主键约束 

2.主键自动增长约束

 3.唯一约束【值不能重复】

 4.非空约束

5.外键约束

 6.外键的级联更新和级联删除(了解)


SQL语句:

1.DDL 操作数据库和数据表

DDL 对数据库,表,列进行操作  create drop alter show
数据库操作
crud

【增删进行个判断,是否存在】
创建(增)create
    * 创建数据库:               create database 库名称;
    * 创建数据库,判断不存在,再创建:    create database if not exists 库名;
    * 创建数据库,并指定字符集        create database  XXX character set  GBK;
    * 创建db4数据库,判断是否存在,并制定字符集为gbk
        create database if not exists XXX character set GBK;

D(Delete):删除
    * 删除数据库      drop database XXX;
    * 判断数据库存在,存在再删除         drop database if exists XXX;
    
U(Update):修改
    * 修改数据库的字符集    alter databse XXX character set GBK;
    
 R(Retrieve):查询
    * 查询所有数据库的名称:     show databses;
    * 查询某个数据库的字符集:查询某个数据库的创建语句    show create databse XXX;
    

使用
    * 查询当前正在使用的数据库名称    select database();
    * 使用数据库    use XXX;


关于表操作【删除进行个判断,是否存在

 创建(增)
     create table 表名(
            列名1 数据类型1,  
                        
            列名2 数据类型2,
            ....
            列名n 数据类型n
                );

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

    * 复制表        create table XXX like XXXed;

数据类型:

1. int:整数类型
    * age int
2. double:小数类型
    * score double(5,2)
    * price double
3. date:日期,只包含年月日     yyyy-MM-dd
4. datetime:日期,包含年月日时分秒     yyyy-MM-dd HH:mm:ss
5. timestamp:时间戳类型    包含年月日时分秒     yyyy-MM-dd HH:mm:ss    
    * 如果将来不给这个字段赋值,或赋值为null,则默认使用当前的系统时间,来自动赋值
6. varchar:字符串
    * name varchar(20):姓名最大20个字符
    * zhangsan 8个字符  张三 2个字符


    drop table XXX;
    drop table if exists XXX;

改【对表及其表中的某列操作修改表中的列
    * 修改表名        alter table XXX rename to 新XXX;
    * 修改表的字符集    alter table XXX character set GBk;
    * 添加一列        alter table XXX  add 列名 数据类型;
    * 修改列名称及类型    alter table XXX  change 列名 新列名 新数据类型;
    * 修改某列的数据类型    alter table XXX  modify 列名 新数据类型;
    * 删除列        alter table XXX  drop 列名        
        

 查
    * 查询某个数据库中所有的表名称    show tables;
    * 查询表结构            desc XXX;

     * 查询表中的字符集     SHOW TABLE STATUS FROM 库名 LIKE '表名';


2.DML表数据的增删改 

DML增删改表中数据   insert into , delete, update ,select
    对数据进行操作

                Eg:insert into stu values(3,’张三丰’,17,99.9,”1893-11-11”,null);
添加数据:insert into 表名 (  列名1,列名2  )   values(值1,值2     );   

                列和值要一一对应, 列名        

  默认给全部列添加数据  INSERT INTO 表名 VALUES (值1,值2,值3,...);            

MySql 【DDL, DML, DQL, 约束(主键,外键)】_第1张图片

                除了数字类型,其他类型需要使用引号(单双都可以)引起来【日期类型≠数字类型】

删除表中数据:
    delete from 表名 [where 条件]        不加条件代表全删
    全删推荐用 truncate table 表明

* 修改数据:
    update 表名 set 列名1 = 值1, 列名2 = 值2,... where 条件;    不加条件代表全改

        eg:update stu set age=11 where id=20;    


3.DQL表数据的查询 

【字段:列表中的每个列名】

1.语法:

MySql 【DDL, DML, DQL, 约束(主键,外键)】_第2张图片


基础查询:

        查询全部:                         select * from 表名;  查询表中全部内容

        指定字段查询:                  select 字段名1,字段名2... from 表名;

        去重复查询:                      SELECT DISTINCT 列名1,列名2,... FROM 表名;

        计算列(四则运算):        SELECT 列名1 运算符(+ - * /) 列名2 FROM 表名;

计算列时,如果某一列为null,可以进行替换
    ifnull(表达式1,表达式2)

        表达式1:想替换的列
        表达式2:想替换的值

        null参与的运算,计算结果都为null

        eg:SELECT NAME, math, math+IFNULL(english,0) FROM student;

                SELECT NAME,IFNULL(stock,0)+10 FROM product;如果stock列有的值为null,那么把他替换为0,在进行+10运算

        给列起别名:                        SELECT 列名1,列名2,... AS 别名 FROM 表名;

     as关键字可以省略

        eg:SELECT NAME,IFNULL(stock,0)+10 AS getsum FROM product;

        SELECT NAME,IFNULL(stock,0)+10 getsum FROM product;        

条件查询 :

符号 功能
> 大于
< 小于
>= 大于等于
<= 小于等于
= 等于
<> 或 != 不等于
BETWEEN ... AND ... 在某个范围之内(都包含)
IN(...) 多选一
LIKE 占位符 模糊查询   _一个任意字符   %多个任意字符
IS NULL 是NULL
IS NOT NULL 不是NULL
AND 或 && 并且
OR 或 || 或者
NOT 或 ! 非,不是

条件查询语法:写在where后

MySql 【DDL, DML, DQL, 约束(主键,外键)】_第3张图片

 


聚合函数查询

  • 将一列数据作为一个整体,进行纵向的计算

  • 聚合函数分类

函数名 功能
count(列名) 统计数量(一般选用不为null的列)
max(列名) 最大值
min(列名) 最小值
sum(列名) 求和
avg(列名) 平均值

 聚合函数语法:

-- 标准语法
SELECT 函数名(列名) FROM 表名 [WHERE 条件];  【where可有可无】

MySql 【DDL, DML, DQL, 约束(主键,外键)】_第4张图片


排序查询

  • 排序分类

    • 注意:多个排序条件,当前边的条件值一样时,才会判断第二条件

关键词 功能
ORDER BY 列名1 排序方式1 列名2 排序方式2 对指定列排序,ASC升序(默认的) DESC降序

 标准语法:
SELECT 列名 FROM 表名 [WHERE 条件] ORDER BY 列名1 排序方式1,列名2 排序方式2;

[where] 中括号内容表示可有可无

排序方式:                

        ASC升序【默认】   DESC降序   不写则默认为升序

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

MySql 【DDL, DML, DQL, 约束(主键,外键)】_第5张图片


 分组查询

-- 标准语法
SELECT 列名 FROM 表名 [WHERE 条件] GROUP BY 分组列名 [HAVING 分组后条件过滤] [ORDER BY 排序列名 排序方式];

 先按照要求进行分组,分完组后在查询要求的字段

先按照要求进行分组,将列值相同的一条数据归纳到一组当中,然后按照要求查每组的字段

where 和 having 的区别?

1. where 在分组之前进行限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不满足结果,则不会被查询出来

2. where 后不可以跟聚合函数,having可以进行聚合函数的判断。

MySql 【DDL, DML, DQL, 约束(主键,外键)】_第6张图片


分页查询 

 当我们查询出来的数据比较多时,可以进行分页查询操作。

-- 公式:开始索引 = (想显示的第几页的页码-1) * 每页显示的条数

第一页:(1-1)*3

第二页:(2-1)*3

  1. limit 是一个MySQL"方言"

语法: 

MySql 【DDL, DML, DQL, 约束(主键,外键)】_第7张图片


总结查:

1.基础查询:多字段查询,去重复查询,计算列,取别名,多条件查询

2. DQL:查询语句

        1. 排序查询

        2. 聚合函数

        3. 分组查询

        4. 分页查询


约束

  • 约束的概念

    • 对表中的数据进行限定,保证数据的正确性、有效性、完整性!

  • 约束的分类

约束 说明
PRIMARY KEY 主键约束
PRIMARY KEY AUTO_INCREMENT 主键、自动增长
UNIQUE 唯一约束
NOT NULL 非空约束
FOREIGN KEY 外键约束
FOREIGN KEY ON UPDATE CASCADE 外键级联更新
FOREIGN KEY ON DELETE CASCADE 外键级联删除

1.主键约束 

主键约束特点

  • 主键约束包含:非空【不能为null】和唯一【不能重复】两个功能

  • 一张表只能有一个列作为主键

  • 主键一般用于表中数据的唯一标识

MySql 【DDL, DML, DQL, 约束(主键,外键)】_第8张图片

MySql 【DDL, DML, DQL, 约束(主键,外键)】_第9张图片

MySql 【DDL, DML, DQL, 约束(主键,外键)】_第10张图片


2.主键自动增长约束

将来给主键这一列添加数据的时候,可以写成null,它会根据我们的编号自动增长填充数据

MySql 【DDL, DML, DQL, 约束(主键,外键)】_第11张图片

 并非局限于主键,其他键也可以 

MySql 【DDL, DML, DQL, 约束(主键,外键)】_第12张图片

 3.唯一约束【值不能重复】

MySql 【DDL, DML, DQL, 约束(主键,外键)】_第13张图片

MySql 【DDL, DML, DQL, 约束(主键,外键)】_第14张图片

 4.非空约束

MySql 【DDL, DML, DQL, 约束(主键,外键)】_第15张图片

MySql 【DDL, DML, DQL, 约束(主键,外键)】_第16张图片

5.外键约束

比如订单表和用户表,一个用户可以拥有订单,理论上是存在联系的,比如1号订单属于1号用户的,3号订单属于2号用户的,而在实际创建表中,我们没有对其进行添加约束,那么这两张表没有任何联系,是单独存在的两张表MySql 【DDL, DML, DQL, 约束(主键,外键)】_第17张图片

外键约束: 两表之间有关联关系的时候,如果没有数据约束,则无法保证数据的准确性。

MySql 【DDL, DML, DQL, 约束(主键,外键)】_第18张图片


MySql 【DDL, DML, DQL, 约束(主键,外键)】_第19张图片

将orderlist表中字段uid 列作为外键,关联user表中的id 

MySql 【DDL, DML, DQL, 约束(主键,外键)】_第20张图片

添加失败,因为user表中没有uid与3关联的用户。

删除李四失败,因为订单表中由于其关联的数据

MySql 【DDL, DML, DQL, 约束(主键,外键)】_第21张图片


 6.外键的级联更新和级联删除(了解)

什么是级联更新和级联删除

  • 当我想把主表中的某个用户删掉,我希望该用户所有的订单也随之被删除

  • 当我想把主表中的某个用户id修改,我希望订单表中该用户所属的订单用户编号也随之修改

MySql 【DDL, DML, DQL, 约束(主键,外键)】_第22张图片

你可能感兴趣的:(JavaWeb,mysql,数据库,sql,java)