1_数据库(一)

数据库

1. 数据库,简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行新增、截取、更新、删除等操作。
 
2.数据库分类
 
    关系型数据库: 描述实体与实体之间的关系
  •     mysql: 开源免费,中小型企业免费数据库,
  •     mariadb: mysql创始人搞的,mysql开源的 一个分支,命令一样
  •     oracle: 甲骨文公司,大型电商网站
  •     db2: IBM公司,银行系统大多采用db2
  •     sqlserver: windows,政府,大学,图形化工具不错
 
    非关系型数据库 : key value
    mongodb
    redis
 
3.E-R关系图( 必须要会画 )
    实体: 矩形
    属性: 椭圆
    关系: 菱形
 
4.MySQL数据库服务器
  •     mysql数据库 : 数据库管理软件
  •     服务器: 相当于 一台电脑 , 这台电脑安装了相关服务器软件, 软件会监听不同的端口, 提供不同的服务.
 
5.MySQL 安装和卸载
卸载:注意删除my.ini配置文件
 
 
 
6.SQL语句( 结构化查询语言 )
  • DDL: 数据定义语言: 定义 数据库 , 数据表和它们的结构,create,drop,alter
  • DML: 数据操纵语言: 操作 数据,  indert, update, delete 
  • DCL: 数据控制语言: 定义 访问权限, 取消访问权限, grant
  • DQL: 数据查询语言 select from where
 
7.数据库的CRUD操作
  • 首先登陆数据库服务器mysql -uroot -p123456
 
create database 数据库名;
create database day86;
 
--创建数据库的时候,指定字符集
create database 数据库名字 character set 字符集;
create database day8 character set utf8;
 
create database day8 characte set 字符集 collate 校对规则;
create database day8 characte set utf8 collate 校对规则;
 
校对规则是在字符集内用于比较字符的一套规则。让我们使用一个假想字符集的例子来区别清楚。
假设我们有一个字母表使用了四个字母:‘A’、‘B’、‘a’、‘b’。
我们为每个字母赋予一个数值:‘A’=0,‘B’= 1,‘a’= 2,‘b’= 3。字母‘A’是一个符号,数字0是‘A’的编码,这四个字母和它们的编码组合在一起是一个字符集。
 
 
  • 查看数据库:
 
--查看数据库定义的语句
show create database 数据库的名字;
 
--查看所有数据库
show databases;
 
infor_schema
performance_schema
mysql
这三个库不要去动
 
  • 修改数据库操作
 
alter database 数据库的名字 character set 字符集;
alter database day08 character set gbk;
 
  • 删除数据库
 
drop database 数据库的名字;
 
  • 其他操作
 
--切换数据库(选中数据库)
use 数据库名字
use day06;
 
--查看一下当前正在使用的数据库
select database();
 
 
8.表的CRUD 操作
  • 创建表
 
create database 数据库的名字
 
create table 表名{
    列名1 列的类型(长度) 约束,
    列名2 列的类型(长度) 约束,
};
 
--列的类型:
java        sql
int          int
char/String        char/varchar
                           char(3): 固定长度(不够补空格)
                           varchar(3): 可变长度
                            长度3代表字符的个数
double     double
float         float
boolean    boolean
                date: YYYY-MM-DD
                time: hh:mm:ss
                datatime: YYYY-MM-DD hh:mm:ss    默认是null
                timestamp: YYYY-MM-DD hh:mm:ss     默认使用当前时间
                text: 文本
                blob: 存放二进制
 
--列的约束
    主键约束: primary key
    唯一约束: unique
    非空约束: not null
    自动增长: auto_increment
 
创建表: 
    1. 分析实体: 学生
    2. 学生ID
    3. 姓名
    4. 性别
    5. 年龄
create table student(
    sid int primary key,
    sname varchar(10),
    sex int,
    age int
);
 
  • 查看表
 
--查看所有表
    show tables;
 
--查看表的定义
    show create table student;
 
--查看表的结构
    desc student;
 
 
  • 修改表
 
--添加列(add)
alter table 表名 add 列名 列的类型 列的约束 
alter table student add chengji int not null;
 
--修改列(modify)
alter table student modify sex varchar(2);
 
--修改列名(change)
alter table student change sex gender varchar(2);
 
--删除列(drop)
alter table student drop chengji;
 
 
 
--修改表名(rename)
rename table student to heima;
--修改表的字符集
alter table student character set gbk;
 
  • 删除表
 
drop table student;
 
 
 
9.SQL完成对表中数据的CRUE的操作
  • 插入数据
 
insert into 表名(列名1,列名2,列名3) values(值1,值2,值3);
insert into student(sid, sname, gender) values(1, '张三', '男');
 
--简单写法
  insert into student values(1, '张三', '男');
 
--批量插入
insert into student values
                (4,'zhangsan','男'),
                (4,'zhangsan','男'),
                (4,'zhangsan','男')
 
 
10.中文乱码问题
 
 

 

 

 

    
 
 
  • 删除操作
 
delete from 表名 [where 条件];
 
delete from student where sid = 1;
delete from student;//如果没有指定条件, 会将表中数据全部删除
 
--面试问题: 请说一下 delete 删除数据 和 truncate 删除数据有什么差别?
 delete:    DML 一条一条删除表中的数据
truncate:    DDL,先删除表再重建表
关于哪一条执行效率高: 具体要看表中的数据量
    如果数据比较少, delete会比较高效
    如果数据比较多,truncate 会比较高效
 
  • 更新表记录
 
update 表名 set 列名=列的值, 列名2=列的值2 [where 条件]
 
--将sid为5的名字改成李四
--如果参数是字符串,日期要加上单引号
update student set sname='李四' where sid = 5;
  • 查询记录
 
select [distinct] [*] [列名,列名2] from 表名 [where 条件]
distinct: 去除重复的数据
 
--商品分类: 手机数码, 皮靴箱包
1.分类ID
2.分类名称
3.分类描述
Create table category (
    cid int primary key auto_increment,
    cname varchar(10),
    cdesc varchar(30)
);
 
insert into category values(null, '手机数码','电子产品,黑马生产');
insert into category values(null, '皮靴箱包','江南皮革厂亲情打造');
insert into category values(null, '香烟酒水','衡水老白干');
insert into category values(null, '酸奶饼干','君乐宝乳业');
insert into category values(null, '馋嘴零食','花生瓜子八宝粥');
 
select * form category;
select cname,cdesc from category;
 
--所有商品
1.商品ID
2.商品名称
3.商品价格
4.商品数量
5.生产日期
6.商品分类ID
 
商品和商品分类: 所属关系
 
create table product(
    pid int primary key auto_increment,
    pname varchar(10) ,
    price double,
    pdate timestamp,        (时间戳,默认当前时间)
    cno int
);
 
insert into product values(null, '小米mix8',998,null,1);
insert into product values(null, '锤子',2888,null,1);
insert into product values(null, '阿迪王',99,null,2);
insert into product values(null, '老白干',598,null,3);
insert into product values(null, '敬酒',298,null,3);
insert into product values(null, '小熊饼干',1,null,4);
insert into product values(null, '卫龙辣条',3,null,5);
 
--简单查询
--查询所有商品信息
    select * from product;
--查询商品名称和商品价格
    select pname,price from product;
 
--别名查询, as的关键字, as 关键字可以省略
    --表别名: select p.pname , p.price from product p; (主要用于夺标查询)
    select p.pname as 商品名称 , p.price as 商品价格 from product as p;
    select p.pname 商品名称 , p.price 商品价格 from product  p;
 
--去掉重复的值
    --查询所有商品的价格
    select price from product;
    select distinct price from product;
 
--select 运算查询 仅仅在查询结果上做了运算处理 + - * /
    select * , price *0.9 as 折后价 from product;
 
--条件查询( where关键字 )
     指定条件,确定要操作的纪律
    
--查询商品价格大于60元的所有商品信息
    select * from product where price > 60;
 
--where 后的条件写法
    --关系运算发: > >= < <= != <>
    <>:不等于: 标准SQL语法
    !=: 不等于: 非标准SQL语法
 
--查询商品价格不等于88的所有商品
    select * from product where price != 88;
    select * from product where price <> 88;
 
--查询商品价格再 10 到 100 之间
    select * from product where price >= 10 and price <= 100;
    between ...and...
    select * from product where price between 10 and 100;
 
--查询商品价格大于100 或者 商品价格大于10
    select * from product where price > 100 or price  < 10;
 
--like : 模糊查询
    -    :     代表是一个字符
    %    :    代表多个字符
--查询出名字中带 有饼的所有商品 '%饼%'
    select * from product where pname like '%饼%'; 
--查询第二个名字是 酒的所有商品 '_%'
    select * from product where pname like '_酒%';
 
--in 在某个范围中获得值
    --查询出商品分类 ID 在 1,4,5 里面的所有商品
    select * from product where cno in (1,4,5);
 
--排序查询: order by 关键字
    asc: ascend 升序    (默认)
    desc: descend 降序
 
    --0.查询所有商品按照价格进行排序
        select * from product  order by price;
    --1.查询所有的商品,按照价格进行降序 排序
        select * from product order by price desc;
    --2.查询名称有 干 的商品 ,按照价格降序排序
        select * from product where pname like '%干%' order by price  desc;
 
--聚合函数:
        sum() 求和
        avg() 求平均值
        count() 统计数量
        max()    最大值
        min()    最小值
    --1.获得所有的商品价格的总和
        select sum(price) from product ;
    --2.获得所有商品的平均价格
        select avg(price) from product;
    --3.获得所有商品的个数
        select count(*) from product;
 
    --注意: where条件后面不能接聚合函数
    --查出商品价格大于平均价格的所有商品信息
     select * from product where price > avg(price); ×
    查出所有商品
    select * from product;
    大于
    平均价格
    select avg(price) from product;
 
    select * from product where price > (select avg(price) from product);
    
--分组: group by
    --1.根据cno字段分组,分组后统计商品id
        select cno,count(*) from product group by cno;
 
    --2.根据cno分组,分组统计每组的平均价格,并且商品平均价格 > 60
        select avg(price),cno from product group by cno
        having avg(price) > 60;
        
    --having 关键字 可以接聚合函数的 出现在分组之后 
    --where 关键字 他是不可以接聚合函数的 , 出现在分组之后 
 
--编写顺序
    select  ... from ... where ... group by ... having ... order by
 
--执行顺序
    from ... where ... group by ... having select ... order by
 
IFNULL(expr1,expr2)
当expr1不为空返回expr1,否则返回exp2。
例如:IFNULL(score,0)如果score不为空返回score,否则返回0。
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值