数据库的基本概念

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;级联删除,删除一条列,被关联的列也会被删除

最新文章

  1. ios7.1 in-house app的发布方法
  2. SQLite的优化总结
  3. 【转】C#线程同步示例
  4. 关于Assets.car素材问题
  5. ARM多核处理器启动过程分析【转】
  6. HTML 的 &lt;div&gt; 和 &lt;span&gt; 标签
  7. UVA 1252 十五 Twenty Questions
  8. mysql笔记(前面自己写的不标准有些地方)
  9. 常用的Linux系统调用命令
  10. 《NFS文件共享服务的搭建》RHEL
  11. SQL Server Analysis Services 数据挖掘(1)
  12. Open Source RTOS
  13. NET开发面向对象2
  14. FireBug 调试工具(推荐)
  15. STM32串口寄存器操作(转)
  16. 201521123012 《Java程序设计》第十一周学习总结
  17. linkList hashSet ArrayList IO 序列化 1.1.瞬态transient .字符编码表 Properties
  18. vue中的axios封装
  19. ubuntu在终端下复制粘贴的2种方法
  20. Spring学习之旅(一)极速创建Spring框架java工程项目

热门文章

  1. 组件接口(API)设计指南[2]-类接口(class interface)
  2. php 封装memcache类
  3. 【转载】FAT12格式的引导程序
  4. OpenStack IceHouse版cinder模块新添加功能
  5. dubbo springCloud比较
  6. Android版DesiredCapabilities参数配置
  7. 创建Vue项目的步骤
  8. iOS RAC常用方法
  9. Springboot读取自定义的yml文件中的List对象
  10. bashdb bashdebug