• mysql数据库基础总结


    一、数据库是什么?

    存储数据的仓库,是一种数据存储的文件系统,我们可以通过语言进行数据库中的数据的增删改查的操作。

    二、常见的数据库产品?

    关系型数据库:

    oracle:oracle公司的大型收费数据库产品,大型的java项目常用

    SQL Server:微软的大型收费的数据库产品,主要用在.net大型项目中

    mysql:oracle公司的中小型免费产品,中小型的java和php项目中

    DB2:IBM公司的大型收费数据库,主要用在银行、金融系统中 一般是配套IBM的硬件一起出售

    非关系型数据库:     常用:mogoDB、Redis、hbase

    三、sql语言的介绍及分类

    介绍:结构化查询语言,是一种数据库操作和程序设计的语言,可以对数据库、数据表以及数据表中的数据进行增加、删除、修改以及查询的操作

    分类:

    DDL:数据定义语言,对数据库、数据表的定义

    DML:数据操作语言,对数据表中的数据进行增加、删除、修改的操作

    DQL:数据查询语言,对数据表中的数据进行查询操作

    DCL:数据控制语言,对数据库的权限、安全、用户的管理操作

    四、定义数据库和数据表

    定义数据库:

    创建数据库

    语法:create database 数据库名称 [character set 编码] [collate 校对规则] 注意:[]意思是可以选择 不是语法格式

    示例:create database mydb character set utf8 collate utf8_general_ci

    查看数据库

    show databases; 代表查看数据库服务器中的所有的数据库

    show create database 数据库名称;

    修改数据库编码

    语法:alter(改变) database 数据库名称 character set 编码;

    示例:alter database mydb character set gbk;

    删除数据库

    语法:drop database 数据库名称;

    示例:drop database mydb;

    其他

    进入、切换数据库:use 数据库名称

    示例:use mydb;

    查看当前所在的数据库:select database();

    定义数据表

    创建数据表

    语法:

    create table 表名称(
    字段名称 数据类型 [约束],
    字段名称 数据类型 [约束],
    … …
    );

    示例:

    create table user(
        id int,
        name varchar(15),
        age int
    );

    创建一个张表user,该表具有以下字段:

    id int 主键 自动增长
    username 字符串 长度20 非空
    password 字符串 长度20 非空
    gender 字符串 长度10
    age 整型 默认25岁
    email 字符串 长度50 唯一 非空
    salary 浮点型 最大8位其中两位小数
    state 整型 默认0
    role 字符串 长度10 默认值 “VIP”
    registTime 时间戳

    示例:

    create table user(
        id int primary key auto_increment,
        username varchar(20) not null,
        password varchar(20) not null,
        gender varchar(10),
        age int default 25,
        email varchar(50) unique not null,
        salary double(8,2),
        state int default 0,
        role varchar(10) default ‘VIP’,
        registtime timestamp
    );

    查看数据表

    show tables;查看此数据库下的所有的表名

    show create table 表名称;查看指定表的创建语句

    示例:show create table user;

    desc 表名;查看表的结构

    示例:desc user;

    删除表

    语法:drop table 表名称;

    示例:drop table user;

    修改表

    修改表的名称

    语法:rename table 旧名称 to 新名称;

    示例:rename table user to newuser;

    修改表的编码

    语法:alter table 表名称 character set 编码;

    示例:alter table newuser character set gbk;

    新增字段

    语法:alter table 表名称 add 字段名称 数据类型 [约束];

    示例:alter table newuser add idcard varchar(18) unique;

    删除某字段

    语法:alter table 表名称 drop 字段名;

    示例:alter table newuser drop idcard;

    修改字段

    语法:alter table 表名称 change 旧名称 新名称 数据类型

    示例:alter table newuser change gender sex varchar(2);

    修改数据类型

    语法:alter table 表名称 modify 字段名称 新的数据类型;

    示例:alter table newuser modify role varchar(30);

    五、单表操作

    插入数据 insert

    语法:insert into 表名(字段名1,字段名2,…字段名n) values(值1,值2,…值n);

    示例:

    insert into newuser(id,username,password,sex,age,email,salary,state,role,registtime)
    values(1,’zhangsan’,’123’,’1’,25,’zs@itcast.cn’,100,0,’teacher’,’2015-10-10 12:35:50’);
    insert into newuser(id,username,password,sex,age,email,salary,state,role,registtime) values(2,’lisi’,’321’,’0’,35,’ls@itcast.cn’,200,0,’teacher’,’2015-10-10 13:35:50’);

    注意:

    (1) 如果主键是auto_increment的,那么,主键列的值可以写成null或者主键列省略不写
    insert into newuser(id,username,password,sex,age,email,salary,state,role,registtime)
    values(null,'wangwu','123','1',25,'ww@itcast.cn',300,0,'teacher','2014-10-10 12:35:50');
    (2) 如果插入的数据是全数据的话,那么字段名称可以省略
    insert into newuservalues(null,'tianqi','123','1',25,'tq@itcast.cn',400,0,'teacher','2012-10-10 12:35:50');

    修改数据 update

    语法:update 表名称 set 字段名称=值,字段名称=值… [where条件语句]

    示例:update newuser set password=’zhangsan123’,age=45 where id=1;

    注意:
     
    如果不写where条件子句的话 会把表中的所有相应字段的数据全部修改
     
    示例:
    update newuser set password='lisi123',age=50,salary=12000 where username='lisi';

    删除数据 delete

    语法:delete from 表名 [where条件句];

    示例:delete from newuser where email=’fs@itcast.cn’;

    注意:
     
    如果不写where条件句的话 那么会把表中的数据全部删掉
     
    问题:delete from newuser和drop table user的区别?
     
    前者是删除数据,但是表的结构还在,后者是把整个表全部删掉
     
    truncate table newuser;和delete from newuser;区别?
     
    前者一次性将表摧毁,然后在新建表结构,后者是一条一条的将数据删除

    查询数据 select

    (1) 全部查询:select * from 表名;

    (2) 查询部分数据:select 字段名称1,字段名称2… from 表名称;

    (3) 去重查询:select distinct 字段名称 from 表名;

    (4) 运算查询:select username,salary*1000 from user;

    注意: null在运算的时候还是null

    (5) 聚合函数

    count():计数函数 select count(username) from user;注意:在使用count进行计数的时候 如果列中的项为null 不计入
    sum():求和函数 select sum(salary) from user;注意:加和函数在进行加和的时候会把null看成0
    max():最大值函数 select max(salary) from usermin():最小值函数 select min(salary) from useravg():平均值 select avg(salary) from user

    (6) 排序查询 order by 字段;

    默认是升序的排序顺序的

    desc:表示降序

    asc:表示升序

    (7) 条件查询

    单一条件查询:

    select * from user where username=’范瑾’; > < >= <= !=

    select * from user where dept=’技术部’;

    多条件查询:

    select * from user where dept=’技术部’ and gender=’女’;

    select * from user where dept=’技术部’ and gender=’女’ and age<30;

    注意: 逻辑连接符 and or  not 优先级:and  >or

    范围查询:between … and … 包括两个端点

    select * from user where salary between 5000 and 10000;

    枚举查询 in(枚举字段)

    select * from user where age in <18,20,23>;

    模糊查询:like ‘数据’;

    select * from user where username like ‘张%’;

    注意: %:代表多个任意字符_代表任意一个字符

    (8) 分组查询 group by 字段 [having 条件]

    问题:where和having的区别?  where在进行分组之前执行的,having是在分组之后执行的

    sql语句的书写顺序与执行顺序:

    书写顺序:select 字段 from 表名 where 条件 group by 字段 having 条件 order by 字段;

    执行顺序:from > where > group by > having > select >order by

    六、多表查询

    外键与外键约束

    外键:与主键对应,其目的是使两张表通过主外键进行关联

    外键约束:在创建表的时候对响应的外键列进行描述

    语法:constraint(约束的意思) 外键的名称 foreign key 从表名称(外键字段) references (参照的意思)主表名称(主键名称)

    需求:创建两张表 一张是customer表 一张orders表 有主外键关系

    /*创建customer表*/
    create table customer(
        id int primary key auto_increment,
        name varchar(20) not null,
        tel varchar(20) not null,
        grade varchar(20) default ‘铜牌会员’
    );
    /*创建orders表*/
    create table orders(
        id int primary key auto_increment,
        oCode varchar(20) not null,
        cid int not null,
        constraint customer_orders foreign key orders(cid) references customer(id)
    );

    多表设计

    往往java实体对象存在多种关系,把这些对象抽象成数据表也就存在一对一、一对多、多对多的关系

    注意:多对多的关系时 往往存在关系表

    例如:

    一对一:用户表和购物车表 实际开发中往往表字段比较多或者需要表的语义明确时进行分表操作

    一对多:用户表和订单表

    多对多:订单表和商品表

    多表查询

    多表查询其实就是使用一条sql同时查询出多个表中关联的数据

    内连接:
     
    在查询的时候必须数据之间一一对应才可查询出
     
    语法:select 字段 from 表1 inner join 表2 on 条件
     
    内连接需求:查询所有的用户的订单中的商品信息
     
    select * from customer inner join orders on customer.id=orders.cid
    inner join orders_goods on orders.id = orders_goods.oid
    inner join goods on orders_goods.gid = goods.id;
     
    隐式的写法:select 字段 from 表1,表2,... where 条件
     
    示例:
     
    select * from customer c,orders o,orders_goods og,goods g
    where c.id=o.cid and o.id=og.oid and og.gid=g.id;
     
    一般情况下 n张表需要最少 n-1个条件可以保证数据不冗余
    外连接:
    左外连接:保证左表中的数据全部显示,右表中的数据仅仅显示与左表有关联的
    语法:select 字段 form 左表 left  join 右表 on 条件
    左外连接需求:查询所有的用户的信息,如果该用户有订单信息一起显示
    select * from customer c left join orders o on c.id=o.cid;
    如果使用内连接:select * from customer c inner join orders o on c.id=o.cid;
    右外连接:保证右表中的数据全部显示,左表中的数据仅仅显示与右表有关联的
    语法:select 字段 from 左表 right join 右表 on 条件
    右外连接需求:查询所有的商品信息,如果该商品有所属的订单则一起显示订单信息
    示例:select * from orders_goods og right join goods g on og.gid=g.id
    select * from goods g left join orders_goods og on og.gid = g.id;

    子查询:
    子查询查出的数据可以在当成一个表看待
    子查询:查询订单为2的用户的用户的姓名
    分布查:

    select cid from orders where id=2;
    select name from customer where id=2;
    select name from customer where id=(select cid from orders where id=2);

    子查询:查询商品价格大于1800的订单编号

    分布查:

    select id from goods where gprice>1800;
    select oid from orders_goods where gid in(1,2,4);
    select * from orders where id in(1,2);
    
    select * from orders where id in(select oid from orders_goods where gid in(select id from goods where gprice>1800));

    参考来源:mysql数据库基础总结

  • 相关阅读:
    Jmeter_实现操作postgresql数据库
    测试人员如何使用Git部署测试环境
    GitLab简单使用
    ssh: Could not resolve hostname git.*****-inc.com : Temporary failure in name resolution fatal: The remote end hung up unexpectedly
    本地Linux服务器上配置Git
    SeleniumIDE_初识
    自动化测试_测试模型
    Top命令详解02
    【Linux性能调优一】观大局:系统平均负载load average
    【自动化专题】借助firefox插件定位web元素小技巧
  • 原文地址:https://www.cnblogs.com/guorange/p/7420473.html
Copyright © 2020-2023  润新知