数据库学习

creaDDL:操作数据库,表
1.操作数据库:CRUD
      创建(Create):
               创建数据库:create database 数据库名称;
                创建数据库并判断是否存在,并制定字符集:create database if not existed 数据库名称 character set 字符集名称
      查询(Retrieve):
                查询所有数据库名称:show databases;
                查询某个数据库的创建语句:show createdatabase 数据库名称
      修改(Update):
                 修改数据库的字符集:alter database 数据库名称 character set 字符集名称;
      删除(Delete):
                  删除数据库:drop database 数据库名称;
                  判断数据库是否存在并删除:drop database if exists 数据库名称;
       使用数据库:
                   查询当前正在使用的数据库名称:select database();
                   使用数据库 :use 数据库名称;
2.操作表
         创建(Create):
                 创建表:create table 表名(列名1 数据类型,列名2 数据类型,...列名n 数据类型);
                 复制表:create table 表名 like 被复制的表名;
          查询(Retrieve):
                 查询某个数据库中所有的表名称:show tables;
                 查询表结构:desc 表名;
         修改(Update)
                  修改表名:alter table 表名 rename to 新的表名;
                  修改表的字符集:alter table 表名character set 字符集名称;
                  添加一列:alter table 表名 add 列名 数据类型;
                  修改列名称   类型:alter table 表名change 列名 新列名 新数据类型;
                  删除列:alter table 表名 drop 列名;
         删除(Delete):
                   drop table 表名;
                   drop table if exist


DML:增删改表中的数据
 1.添加数据:
        语法;insert into 表名(列名1,列名2,...,列名n) values(值1,值2,...值n);
        注意:*列名和值要一一对应
                  *如果表名后不定义列名,则默认给所有列添加值,
                       如:insert into 表名 values(值1,值2,...值n);
                  *除了数字类型,其他类型需要使用引号引起来,单双引号都可以
2.删除数据:
         语法:delete from 表名 where 条件;
         注意:*如果不加条件,则删除表中所有记录。
                  *如果要删除所有记录,
                         delete from 表名;--不推荐使用,有多少条记录就会执行多少次删除操作。
                          truncate table 表名;--先删除表,然后早创建一张一摸一样的表。
3.修改数据:
          语法:updata 表名 set 列名1=值1,列名2=值,...where 条件;
          注意:*如果不加任何条件,则会将表中所有的记录全部修改。
                    
DQL
1.查询语句
        语法:order by 子句
               *order by 排序字段1,排序方式1,排序字段2 排序方式2,...
          排序方式:*asc:升序,默认。
                           *desc:降序。
          注意,如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件
2.聚合函数:将一列数据作为一个整体,进行纵向的计算
      *count:计算个数
      *max:计算最大值
      *min:计算最小值
      *sum:计算和
      *avg:计算平均值
        注意:聚合函数的计算,排除null值
                  解决方案:*选择不包含非空的列进行计算
                                   *ifnull语句
3.分页查询
           语法:limit 开始的索引,每页查询的条数;
           公式:开始的索引=(当前的页码-1)*每页的条数
             select *from student limit0,3;--第一页
             select *from student limit3,3;--第二页
              select *from student limit6,3;--第三页
             分页操作是一个方言。

4.基础查询
    查询表中的记录:select *from 表名;
     1.语法: select:字段列表
                   from :列名列表
                   where:条件列表
                   group by:分组列表
                   having:分组之后的条件
                   order by:排序
                   limit:分页限定
     多个字段的查询:select 字段名1,字段名2,...from 表名;
                            注意:如果查询所有字段,则可以使用*来替代字段列表
       去除重复:distinct
         计算列:*一般可以使用四则运算计算一些列的值(一般只会用于数值型的计算)
                     *ifnull(表达式1,表达式2):null参与的运算,计算结果都为null
                               表达式1:哪个字段需要判断是否为null
                                如果该字段为null后的替换值
          起别名:as;as也可以省略

5.条件查询
      语句:where子句后跟条件
       运算符:*>,<,<=,>=,=<>
                    *brtween ... and
                    *in (集合)
                     *like:模糊查询。
                             占位符:*_:单个任意字符
                                          *%:多个任意字符
                     *is null:
                     *and 或&&
                     *not 或!

约束:
      概念:对表中的数据进行限定,保证数据的正确性,有效性和完整性
      分类:1;主键约束:primary key;
                2;非空约束:not  null;
                3;唯一约束: unique;
                4;外键约束:foreign key;


  1.非空约束:not null
        1.创建表时添加,如create table stu(id int,name varchar(20) not null);
        2.删除约束: alter table stu modify name varchar(20);
        3.创建表完后添加非空约束:alter table stu modify name varchar(20) not null;
  2.唯一约束:unique,唯一约束列的值可以有多个null
        创建表时添加:create table stu(id int,name varchar(20) unique);
        删除约束:alter table 表名 drop 列名;
        创建表完后添加非空约束:alter table stu modify name varchar(20) unique;
  3.主键约束:含义:非空且唯一,一张表只能有一个字段为主键,主键就是表中记录的唯一标识
        创建表时添加,如create table stu(id int primary key,name varchar(20));
         删除主键:alter  table 表名 drop primary key;
         创建完表时添加主键:alter table 表名 modify 列名 int primary key;
         创建表时,添加主键约束,并且完成主键自增长,关键词为auto_increment
            如create table stu(id int primary key auto_increment,name varchar(20));
         删除自动增长:alter table 表名 modify 列名 数据类型;
         添加自动增长:alter table 表名 modify 列名 数据类型 auto_increment;
         主键约束的自动增增长只和上一个数据有关系,在上一个数据的基础上增长 
4.外键约束:foreign key,让表于表产生关系,从而保证数据的正确性
       1.在创建表时,可以添加外键
           语法:create   table  表名(
                               ...
                              外键列
                               constraint  外键名称  foreign  key  (外键列名称) references  主表名称  (主表列名称)
                        );    
       2.删除外键:alter  table 表名  drop foreign key  外键名;
       3.创建完表之后添加外键;
             alter table 表名 add constraint  外键名称  foreign  key  (外键列名称) references  主表名称  (主表列名称);
       4.添加外键,设置级联更新
              alter  table  表名 add  constraint  外键名称  foreign key(外键字段名称)referencrs  主表名称(主表列名称) on updata cascade on delete cascade;
          级联更新:on update cascade
          级联删除:on  delete  cascade
多表关系
      1.一对多:在多的一方建立外键,指向一的一方的主键。
      2.多对多:多对多关系实现需要借助第三张表,中间表至少包含两个字段,这两张表作为第三张表的外键,分别指向两张表的主键。
      3.一对一:一对一关系,可以在任意一方添加外键指向另一方的主键,


数据库的备份和还原
     命令行语法:
               *备份:mysldump -u用户名 -p密码  数据库名称 > 保存的路径
               *还原:
                    1.登录数据库
                    2.创建数据库
                    3.使用数据库
                    4.执行文件,source文件路径


多表查询
    1.内连接查询
             1.隐式内连接;使用where条件消除无用数据
              SELECT  
                    要查询的信息
              FROM
                    查询信息的地址
              WHERE
                     条件限制
             2.显式内连接
                语法:select  字段列表 from 表名1 inner(可省略) join 表名2  on  条件;
     2.外连接查询
              1.左外查询:
                 *语法:select  字段列表  from  表1  left  outer(可省略) join  表2  on 条件;
                  *查询的是左表所有的数据以及其交际部分
               2.右外连接 
                  *语法:select  字段列表  from  表1  right outer(可省略) join  表2  on 条件;
                    *查询的是右表所有的数据以及其交际部分
     3.子查询
         概念:查询嵌套查询,称嵌套查询为子查询。
         比如:select  *from  emp.'salary' =(select max(salary) from emp);


事务
   1.事务的基本介绍
          1.概念:如果一个包含多个步骤的业务操作被事务管理,那么这些操作要不同时成功,要不同时失败
         2. 操作:
              开启事务:start  transaction
               回滚:rollback
                提交:commit
     2.事务的四大特性
          1.原子性:是不可分割的最小操作单位,要不同时成功,要不同时失败
          2.持久性:当事务提交或回滚后,数据库会持久化的保存数据
          3.隔离性:多个事务之间,相互独立
          4.一致性:事务操作前后数据总量不变
     3.事务的隔离级别
        概念:多个事务之间隔离的,相互独立。但是如果多个事务操作同一批数据,则会引发一些问题,
                  设置不同的隔离级别就可以解决这些问题
         存在问题:
            1.脏读:一个事务,读取到另一个事务中没有提交的数据
             2.不可重复读:在同一个事务中,两次读取到的数据不一样
             3.幻读:一个事务操作(dml)数据表中的所有记录,另一个事务添加一条数据,则第一个事务查询不到自己的修改
        隔离级别:
            read uncommitted:读未提交
                 产生的问题:脏读,不可重复读,幻读
            read committed:读已提交
                   产生的问题:不可重复读,幻读
           repeatable read :可重复读(mysql默认)
                产生我呢提:幻读
           serializable:串行行
                 可以解决所有问题
             注意:隔离级别从小到大安全性越来越强,但是效率越来越低
             数据库查询隔离级别
                      select @@tx_isolation;
             数据库设置隔离级别
                     set global  transaction isolation level  级别字符串;


DCL
    DBA:数据库管理员
     DCL:管理用户,授权
         1.管理用户
             1.添加用户:
                 语法:create user  ‘用户名’@‘主机名’ identifien  by  ‘密码’;
              
               2.删除用户
                  语法:drop  user  ‘用户名’@‘主机名’;
                3.修改用户密码、
                   语法:update  user password =password(‘新密码’) where  user=‘用户名’;
                       set password for ‘用户名’@‘主机名’=password(‘新密码’);
          2.权限管理
               1.查询权限:
                     show grants for ‘用户名’@‘主机名’;
               2.授予权限:
                     grant 权限列表 on 数据库名.表名 to ‘用户名’@‘主机名’;
               3.撤销权限:
                      revoke 权限列表 on 数据库名.表名 from ‘用户名’@‘主机名’;
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值