MySql修改查询部分

  • MySql修改表结构
  • 数据表添加列 列名 desc 可变字符255
  • 修改列的数据表型 desc列,修改为int
  • 修改列名 desc为description
  • 修改表名 student 修改为 student_table
  • MySql添加数据
  • 添加数据的格式1:
  • 添加数据的格式2:
  • 添加数据的格式3:批量数据
  • MySql更新数据
  • MySql删除数据
  • MySql 约束
  • 主键约束:
  • 创建主键的方式1: 创建表的同时直接创建
  • 创建主键的方式2:在创建表的约束区域创建
  • 创建主键的方式3:先建好表,利用修改命令alter table
  • 联合主键,
  • 自动增长列
  • 唯一约束(唯一性)
  • 创建唯一约束的方式1:创建表的同时创建
  • 创建唯一约束的方式2:constraint区域添加
  • 创建唯一约束的方式3:修改表结构 alter table
  • 删除唯一约束
  • 默认约束
  • 创建默认约束方式1:创建表直接添加
  • 创建默认约束方式2:修改表结构
  • Mysql查询
  • 基本查询
  • 查询数据表,查询单列 去重
  • 查询数据表 列进行运算 并取新列名
  • 条件查询
  • 排序查询
  • 聚合查询_重点
  • 分组查询 重点_难点
  • 限制查询limit


MySql修改表结构

具有风险性(数据丢失)
关键字 alter table

数据表添加列 列名 desc 可变字符255

alter table 表明 add 列名 数据类型[长度] [约束]
ALTER TABLE student ADD `desc` VARCHAR(255);

修改列的数据表型 desc列,修改为int

alter table 表明  modify 列名 新数据类型【长度】 [约束]
ALTER  TABLE student MODIFY `DESC` INT;

修改列名 desc为description

alter table 表名 change 旧列名 新列名 新数据类型[长度] [约束]
ALTER TABLE student CHANGE `dexc` `description` INT;

修改表名 student 修改为 student_table

rename table 旧表名 to 新表明
RENAME TABLE student TO student_table

MySql添加数据

添加数据的格式1:

insert [into] 表名(列名1,列名2,列名3)values(值1,值2,值3)

数据库中,值的引号问题,数字可以不写任何符号,其他数据类型加引号(双单引号都行 推荐用单引号)

添加数据的格式2:

insert [into] 表名 values(全部的值)

添加数据的格式3:批量数据

insert [into] 表名 values(全部的值),(全部的值),(全部的值)

MySql更新数据

update  表名 set  列=值, 列=值,列=值 where 条件

MySql删除数据

delete from 表名 where 条件

MySql 约束

主键约束:

被设置为主键约束的列,数据在表中具有唯一性
这个主键列的数据不能为空,每个表只能设置一个主键 每个表都应该有一个主键
创建主键的方式1: 创建表的同时直接创建
CREATE TABLE persons(
   id INT PRIMARY KEY,
   ****
   ****
   );
创建主键的方式2:在创建表的约束区域创建

关键字:constraint,可以指定约束的名字

CREATE TABLE persons(
   id INT,
   ***,
   ***
   CONSTRAINT PRIMARY KEY  pk_id (id)
   );
创建主键的方式3:先建好表,利用修改命令alter table
CREATE TABLE persons(
   id INT,
   ***,
   ***
   );
    ALTER TABLE persons ADD CONSTARINT PRIMARY KEY pk_id (id);

联合主键,

多个列实现一个主键  多个列的值在一起算不能重复
CREATE TABLE persons(
   id INT,
   firstname varchar(50),
   lasetname varchar(50),
   ```,
   ```,
   CONSTARINT PRIMARY KEY pk(firstname,lastname)
   );

自动增长列

(必须是整数  必须是主键)

关键字: auto_increment

CREATE TABLE persons(
   id INT PRIMARY KEY AUTO_INCREMENT,
   ***,
   ***
   );

添加语句可以简化书写
主键列,写值是null,自动增长

唯一约束(唯一性)

关键字:unique

创建唯一约束的方式1:创建表的同时创建
CREATE TABLE persons(
   id INT PRIMARY KEY AUTO_INCREMENT,
   firstname varchar(255) UNIQUE,
   ***
   );
创建唯一约束的方式2:constraint区域添加
CREATE TABLE persons(
   id INT PRIMARY KEY AUTO_INCREMENT,
   firstname varchar(255) ,
  ***
   CONSTRAIT UNIQUE qk_firstname(firstname)
   );
创建唯一约束的方式3:修改表结构 alter table
CREATE TABLE persons(
   id INT PRIMARY KEY AUTO_INCREMENT,
   firstname varchar(255) ,
   ****
   );
   ALTER TABLE persons MODIFY firstname VARCHAR(255) UNIQUE;
删除唯一约束
添加唯一约束后:数据口认为,这个列会经常被查询,会为这个列自动添加索引(提高数据查询效率)删除的是这个索引
ALTER TABLE persons DROP INDEX firstname

默认约束

对一个列的数据默认

关键字: default

创建默认约束方式1:创建表直接添加
CREATE TABLE persons(
    id INT PRIMARY KEY AUTO_INCREMENT,
    firstname varchar(255) ,
    address VARCHAR(255) DEFAULT '北京市'
    ****
    );
创建默认约束方式2:修改表结构
ALTER TABLE persons MODIFY firstname VARCHAR(255) UNIQUE;

Mysql查询

基本查询

关键字
select 选择 from 来自哪里里 where条件 as重命名 distinct去重
基本语法:
select 列名 from 表名 where

查询数据表,查询单列 去重
select DISTINCT(列名) from 表名
查询数据表 列进行运算 并取新列名
select 列名+100 AS 新列名 FROM 表名
简化:
select 列名+100 新列名 from 表名

条件查询

比较运算符

< <= > >= = <>

大于、小于、大于(小于)等于、不等于

BETWEEN …AND…

显示在某一区间的值(含头含尾)

IN(set)

显示在in列表中的值,例:in(100,200)

LIKE ‘字符’

模糊查询,like语句中,% 代表零个或多个任意字符,_ 代表一个字符, 例如:first_name like '_a%';

IS NULL

判断是否为空

逻辑运行符

and

多个条件同时成立

or

多个条件任一成立

not

不成立,例:where not(salary>100);

排序查询

通过order by语句,可以将查询出的结果进行排序。暂时放置在select语句的最后

SELECT * FROM 表名 ORDER BY 列名 ASC|DESC;
#ASC 升序 (默认), 从小到大排序
#DESC 降序, 从大到小排序

聚合查询_重点

之前我们做的查询都是横向查询,它们都是根据条件一行一行的进行判断,而使用聚合函数查询是纵向查询,它是对一列的值进行计算,然后返回一个单一的值;另外聚合函数会忽略空值。

五个聚合函数:

  • count:统计指定列不为NULL的记录行数;
  • sum:计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
  • max:计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
  • min:计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
  • avg:计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;

分组查询 重点_难点

分组查询是指使用group by字句对查询信息进行分组。

  • 格式:
SELECT 字段1,字段2… FROM 表名 where 条件 GROUP BY 分组字段 HAVING 分组条件;

因为where不能再查询后的临时数据表中使用,所以用having

  • having与where的区别:
  • having是在分组操作执行后, 对分组后的数据进行过滤.
    where是在分组操作执行前, 对分组前的数据 只能使用表原始列进行条件过滤
  • having后面可以使用 聚合函数
    where后面不可以使用 聚合函数。
  • 当一条SQL语句中, 既有where 又有 group by \ having时, 先执行 where, 再执行 group by, 最后执行having
    优先级:
    select 6
    from 1
    where 2
    group by 3
    having 4
    order by 5
  • 练习附答案
#统计各个分类商品的个数
select category_id,count(*) from product group by category_id;

#统计各个分类商品的个数,且只显示个数大于1的信息
SELECT category_id,count(*) from product GROUP BY category_id HAVING count(*)>1;

#统计价格>200元的 各个分类商品的个数,且只显示个数大于1的信息
-- select * from product where price>200 group by category_id;
-- select category_id,count(*) from product where price>200 group by category_id ;
select category_id,count(*) from product where price>200 group by category_id HAVING count(*)>1;

限制查询limit

关键字:limit(放在sql’语句最末尾)
语法:limit m,n
适用于分页查询
规律:
limit 第二个 参数,就是一页显示多少条
limit 第一个参数 代表索引
索引=(当前的页数-1)*每页的条数

count(pid) 总数据量
页数=总数据量/每页条数 (向上取整)