mysql

Mysql笔记:
今日任务:
完成对mysql数据库中的数据库,表及数据的CRUD的操作
目标:
掌握mysql的基本数据库,表及表中的记录的操作
1、完成对分类表的CRUD的操作
需求分析:使用cmd命令来创建一个数据库,并对数据库中的分类表进行增删改查
1.1:数据库的概述:
1.1.1:什么是数据库?    
数据库是一个文件系统,只不过我们需要命令(sql)操作。
数据库(Database)是按照数据结构来组织、存储和管理数据的建立在计算机存储设备上的仓库。
数据库是长期储存在计算机内、有组织的、可共享的数据集合
1.1.2:数据库的作用?
储存数据,数据的仓库,带有访问权限限制不同人可以由不同的操作
1.1.3:为什么要学习数据库?
操作的都是后台数据,取到后台数据进行封装,然后交给前台去展现
         1.1.4:常见的数据库:
Mysql:开源免费的适用于中小型企业的免费数据库,sun收购了mysql
Sun公司被oracle公司收购了。Oracle收购之后,开始收费了。
Marladb:是由mysql创始人摘出来的,直接是msql开源版本的一个分支,基本上命令都是一样的。
Oracle:甲骨文公司,商业软件,收费软件,适用于大型电商网站。收购了sun公司,java语言的运行环境是不能被修改的。
Db2:IBM公司,thinkpad,解决方案:软件和硬件,服务器架构,银行系统大多采用的是DB2的数据库。
SqlServer:windows里面,政府的网站,asp.net,大学教学基本采用的是sqlserver,图形化工具做的不错。
Sybase:被淘汰的数据库
2、关系型数据库:
主要是用来描述实体与实体之间的关系。
实实在在存在的事物:学生与班级,员工与部门。
E-R关系图:要求必须得会画。
实体:方框
属性:椭圆
关系:菱形
3、mysql数据库服务器:
Mysql数据库:数据库管理软件
服务器:就是一台电脑。这台安装相关的服务器软件,这些软件
会监听不同的端口号,根据访问的端口号,提供不同的服务。

4、mysql数据库的安装和卸载:
卸载:
    (1)打开控制面板,卸载软件
    (2)删除mysql安装目录的所有文件C:\Program Files\MySQL
    (3)删除mysql存放文件:C:\ProgramData\MySQL
安装:傻瓜式安装。
图形化界面:sqlyog软件

5、mysql的SQL语句:
 Sql:structure Query language结构化查询语言
DDL:
    数据定义语言:定义数据库,数据表,他们的结构
    Create(创建) ,drop(删除),alter(修改)
DML:
    数据操作语言:主要是用来操作数据得。
    Insert(c插入),update(修改),delete(删除)
DCL:
    数据控制语言。定义访问权限,取消访问权限,事务,用户
DQL:
    数据查询语言。Select(查询),form子句,where子句

6、数据库的CRUD的操作:
首先登陆数据库的服务器:mysql -uroot -proot
证明连接成功:


创建数据库****:
    Create database 数据库的名字;
    Create database day06; ----例子
    创建数据库的时候,指定字符集
    Create database 数据库的名字 character set 字符集;

删除数据库:
        DROP database day06;
查看数据库:
    show databases;
使用或进入某个数据库:
    use 数据库名称;

创建表****:
创建:
    Create table 表名(字段描述,字段描述)
    字段描述  ----字段名称 字段类型
    举例子:create table users(
    id int,
    name varchar(20)
    );

删除:
    drop table 表名;
举例子:drop table users;
(了解)常用命令:
查看当前数据库下所有表:show tables;
查看表结构:desc 表名;
查看建表语句:show create table 表名;

修改:
修改表名:
    Alter table 表名;
修改表名:alter table 表名 rename to 新表名;
举例子:alter table users rename to user;
        修改字段:
Alter table 表名 change 字段名称  新字段名称描述
举例:alter table user change name username varchar(40);
修改字段类型:
Alter table 表名 modify 字段名称 字段类型
举例:alter table user modify name varchar(50);
添加字段:
Alter table 表名 add 字段描述;
举例:alter table user add password varchar(20);
删除字段:
Alter table 表名 drop 字段名称;
举例:alter table user drop password;

java中    数据库中
Byte    Tinyint
Short    smallint
int    Int(*)
long    bigint
boolean    Tinyint|int
char|String    Char(长度)|varchar(长度)
Varchar(*)mysql方言,可变的长度
float|double    Float|double(*) double(5,2)数位数是5,小数占2位
Java.sql.Date    Date日期(*)
Java.sql.Time    Time时间(*)

Java.sql.timestamp    timestamp时间戳(*)
若类型为时间戳,name当值设置为null时,该列的数据值取系统当前的值
Java.sql.Clob(长文本)    mysql的方言(text)
Java.sql.Blob(二进制)    blob

7、数据库表的增删改查
DML:数据操作语言:
        操作对象:记录。
        关键字:insert update delete
插入insert:
格式1:
    insert into 表名 values(字段1,字段2....,字段n);
    注意:默认插入全部字段
    必须保证values内容(类型,顺序)和表中一致
    若类型非数值,必须加引号’’;
    举例:INSERT INTO USER VALUES (1,'zhangsan');
格式2(*):
    insert into 表名(字段名,字段名....,字段名n) values(字段值,字段值,字段值n);
    注意:插入指定的字段
    必须保证表名和values内容(类型,顺序)一致。
    INSERT INTO USER (id,username) VALUES (2,'王五');
修改:update
    Update 表名 set 字段名=字段值,字段名=字段值....【where 条件】;
    注意:where条件
    UPDATE USER SET username='xxx' WHERE id=1;
删除:delete
    Delete from 表名【where条件】;
    注意:where条件
    DELETE FROM USER WHERE id=1;
    (了解)truncate 表名;干掉表,重写建一张和表结构一样的表。不能逐条删除

查询:
DQL:数据查询语言:
关键字:select
格式:
    select .... from 表名
                Where条件
                Group by 分组字段
                Having 条件
                Order by 排序字段 ase| desc
初始化环境:
--创建商品表:
    create table products(
                pid int primary key auto_increment,
                pname varchar(20),
                price double,
                pnum int,
                cno int,
                pdate timestamp
            );

        insert into products(pname,price,pnum,cno,pdate) values ('泰国大榴莲',98,12,1,null);
            insert into products values (null,'新疆大枣',38,123,1,null);
            insert into products values (null,'新疆切糕',68,50,2,null);
            insert into products values (null,'十三香',10,200,3,null);
            insert into products values (null,'老干妈',20,180,3,null);
            insert into products values (null,'豌豆黄',20,120,2,null);    
  
    
简单查询:
        练习:
        1.查询所有的商品的信息.
            select * from products;
            
        2.查询商品名和商品价格.
            --查询指定列。
            -- 格式: select 字段名1,字段名2 from 表名    
                select pname,price from products;
                
        3.查询所有商品都有那些价格.
            -- 去重操作 distinct
            -- 格式: select distinct 字段名,字段名2 from 表名    
                select distinct price from products;
                
        4.将所有商品的价格+10元进行显示.(别名)
        -- 可以在查询的结果之上进行运算,不影响数据库中的值
            SELECT pname,price+10 FROM products;    
            
            -- 给列起别名 格式: 字段名 [as] 别名
            SELECT pname AS "商品名",price+10 商品价格 FROM products;

条件查询:
        练习:
        1.查询商品名称为十三香的商品所有信息:    
            SELECT * FROM products WHERE pname='十三香';
                
        2.查询商品价格>60元的所有的商品信息:
            SELECT * FROM products WHERE price>60;
        
        3.查询商品名称中包含”新”的商品    
            --模糊查询:LIKE
            --%很多任意字符
            --    格式: 字段名 like "匹配规则";
            --        匹配内容 %
                            "龙"    值为龙
                            "%龙"    值以"龙"结尾
                            "龙%"    值以"龙"开头
                            "%龙%"     值包含"龙"
            --        匹配个数 "__" 占两个位置
            
            SELECT * FROM products WHERE pname LIKE '%新%';
            
            
            此时\是转义字符,将_转义。
            SELECT * FROM products WHERE pname LIKE '%\_%';
        
        4.查询价格为38,68,98的商品
            SELECT * FROM products WHERE price=38 OR price=68 OR price=98;
            SELECT * FROM products WHERE price IN(38,68,98);
            SELECT * FROM products WHERE price BETWEEN 38 AND 98;
            
            where后的条件写法:
            * > ,<,=,>=,<=,<>,!=
            * like 使用占位符 _ 和 %  _代表一个字符 %代表任意个字符.
                    * select * from product where pname like '%新%';
            * in在某个范围中获得值.
                    * select * from product where pid in (2,5,8);
            * between 较小值 and 较大值
                select * from products where price between 50 and 70;

排序查询:
        order by 后面可以是字段名,序号,别名.
            
        1.查询所有的商品,按价格进行排序.(asc-升序-默认,desc-降序)
            select * from products order by price;
        2.查询名称有新的商品的信息并且按价格降序排序.
            select * from products where pname like '%新%' order by price desc;

聚合函数|通用函数|组函数|多行函数:
            对一列进行计算 返回值是一个,忽略null值
        * sum(),avg(),max(),min(),count();
        1.获得所有商品的价格的总和:
            select sum(price) from products;
        
        2.获得商品表中价格的平均数:
        SELECT AVG(price) FROM products;

        -- round(x,2) 保留x的两位小数,四舍五入
        SELECT ROUND(AVG(price),2) FROM products;
        
        3.获得商品表中有多少条记录:
        select count(pid) from products;

   group by 增强 : group by rollup(a,b)  )

分组:使用group by,查询时,凡是select后不在组函数中的字段,
                                都需要写在group by后面
                                
        1.根据cno字段分组,分组后统计商品的个数.
        select count(*) from products;
        SELECT pid,cno,COUNT(*) FROM products GROUP BY pid,cno;
        -- having 是对分组后的数据进行条件过滤。
        -- where 是对分组前的数据进行条件过滤。并且where后面不能使用组函数。
        2.根据cno分组,分组统计每组商品的总数量,并且总数量> 200;
            SELECT cno,SUM(pnum) FROM products GROUP BY cno HAVING SUM(pnum)>200;
/
auto_increment 自增  (oracle没有--序列)
    要求:
        1.被修饰的字段类型支持自增. 一般int
        2.被修饰的字段必须是一个key 一般是primary key
        3.用来在表的主键上修饰。

    create table products(
            pid int primary key auto_increment,
            -- pid这一列是表的主键 :primary key
            -- pid并且自动增长:auto_increment
            

    create table ai01(
        id varchar(10) auto_increment
    );-- 错误 Incorrect column specifier for column 'id'

    create table ai01(
        id int auto_increment
    );-- 错误 Incorrect table definition;
    
    
    例子:
        CREATE TABLE ai01(
            id INT PRIMARY KEY AUTO_INCREMENT,
            NAME VARCHAR(20),
            PASSWORD VARCHAR(40)
        );
        
        INSERT INTO ai01(id,NAME,PASSWORD) VALUES(1,'tom','123');
        INSERT INTO ai01(NAME,PASSWORD) VALUES('tom','123');
        INSERT INTO ai01(id,NAME,PASSWORD) VALUES(NULL,'tom','123');
/
约束:
    作用:
        为了保证数据的"有效性"和"完整性"。    

    mysql中常用的约束:都是加在某个字段上
        主键约束(primary key)  
        唯一约束(unique)
        非空约束(not null)
        外键约束(foreign key)
/
主键约束(primary key)  
        被修饰过的字段唯一,非空
        
        注意:一张表只能有一个主键,这个主键可以包含多个字段(联合主键)    
        
        方式1:建表的同时添加约束 格式: 字段名称 字段类型 primary key
            CREATE TABLE ai01(
                id INT PRIMARY KEY AUTO_INCREMENT,
                ...
                );

                
        方式2:建表的同时在约束区域添加约束
            所有的字段声明完成之后,就是约束区域了
            格式: primary key(字段1,字段2)    
            
            CREATE TABLE ai01(
                id INT,
                NAME VARCHAR(20),
                PASSWORD VARCHAR(40),
            
                -- 上面声明完表的字段后,从这里开始就属于约束区域。
                primary key(id)
                );

                
        方式3:建表之后,通过修改表结构添加约束,一般应用在多表建立时.
            create table pk03(
                id int,
                age int,
                username varchar(20)
            );    
            
            alter table pk03 add primary key(字段名1,字段名2..);
            alter table pk03 add primary key(id,age); -- 联合主键
/
唯一约束:(了解)
        被修饰过的字段唯一,对null不起作用
        方式1:建表的同时添加约束 格式: 字段名称 字段类型 unique
            create table un(
                id int primary key auto_increment,
                username varchar(20) unique
            );
            
            insert into un value(9,'tom');-- 成功
            insert into un value(10,'tom');-- 错误
            insert into un value(null,'jack');-- 成功
            insert into un value(null,'rose');-- 成功
            
        方式2:建表的同时在约束区域添加约束
            所有的字段声明完成之后,就是约束区域了
            unique(字段1,字段值2...)
            
            create table un2(
                id int primary key auto_increment,
                username varchar(20)
                unique(username)
            );
            
        方式3:建表之后,通过修改表结构添加约束
            create table un3(
                id int primary key auto_increment,
                username varchar(20)
            );
            
            alter table 表名 add unique(字段1,字段2);-- 添加的联合唯一
            alter table 表名 add unique(字段1);-- 给一个添加唯一
            alter table 表名 add unique(字段2);-- 给另一个添加唯一
    
    非空约束(了解)
        特点:被修饰过的字段非空
        方式:
            create table nn(
                id int primary key auto_increment,
                username varchar(20) not null unique -- 该字段两个约束
            );
            
            insert into nn values(null,null);--  错误的 Column 'username' cannot be null    
/
创建多表    
网上商城的实体:
    用户 订单 商品
常见关系:
    一对多. 用户和订单
    多对多. 订单和商品    学生和课程
    一对一. 丈夫和妻子    人和身份证    
    
    学习路线:
        1.明确多张表之间有哪些关系(一对多,多对多,一对一)
        2.如何建立数据库中多张表的关系(外键foreign key)
        3.如何查询多张表的数据(条件连接)
    
    (★)外键约束(foreign key),用于建立多个表之间的关系。
    
    
    java中关系:
        class User{
            int id;
            String username;
            List<Orders> orders;  -- 一个User对象,有多个Orders对象
        }
        
        class Orders{
            int id;
            double totalprice;
        }
/

一对多:
    用户和订单    
    -- 创建用户表 -- 1
    create  table user(
        id int primary key auto_increment,
        username varchar(20)
    );
    
    -- 创建订单表 -- N
    create  table orders(
        id int primary key auto_increment,
        totalprice double,
        user_id int -- 外键列,关联user表的id列
    );    
    
    
    为了保证数据的有效性和完整性,添加约束(外键约束).
    在多表的一方添加外键约束,关联另一张表某列(主键列)
        格式:
            alter table 多表名称 add foreign key(外键列) references 一表名称(主键);
        例如:
            alter table orders add foreign key(user_id) references user(id);
    
    添加了外键约束之后有如下特点:★
        1.主表中不能删除从表中已引用的数据
        2.从表中不能添加主表中不存在的数据
        
        
    开发中处理一对多:★
        在多表中添加一个外键,名称一般为主表的名称_id,字段类型一般和主表的主键的类型保持一致,
        为了保证数据的有效性和完整性,在多表的外键上添加外键约束即可.
//
多对多

例子:商品和订单
        -- 创建商品表
    create table product(
        id int primary key auto_increment,
        name varchar(20),
        price double
    );

    -- 创建中间表
    create table orderitem(
        oid int,
        pid int
    );        
        
    -- 添加外键约束
        alter table orderitem add foreign key(oid) references orders(id);
        alter table orderitem add foreign key(pid) references product(id);
        alter table orderitem add primary key(oid,pid); -- 做为联合主键存在。
    
    开发中处理多对多:★
        引入一张中间表,存放两张表的主键,一般会将这两个字段设置为联合主键,
        这样就可以将多对多的关系拆分成两个一对多了
        为了保证数据的有效性和完整性
            需要在中间表上添加两个外键约束即可.
/
-- 多表查询

构建数据环境:新建一个数据库,按照顺序添加数据
    
    
    
    初始化数据:
    -- 用户表(user)
       create table `user` (                             
          `id` int auto_increment primary key,                
          `username` varchar(50)  -- 用户姓名                                                
        );


    -- 向user表中添加数据
        insert into user values(3,'张三');
        insert into user values(4,'李四');
        insert into user values(5,'王五');
        insert into user values(6,'赵六');

        
    -- 订单表(orders)
        create table `orders` (                                                  
          `id` int  auto_increment primary key,                                  
          `price` double,                                           
          `user_id` int                                       
        );
        
        -- 给订单表添加外键约束
        alter table orders add constraint user_fk foreign key (user_id) references user(id);

    -- 向orders 表中插入数据
        insert into orders values(1,1314,3);
        insert into orders values(2,1314,3);
        insert into orders values(3,15,4);
        insert into orders values(4,315,5);
        insert into orders values(5,1014,null);

       

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值