zoukankan      html  css  js  c++  java
  • MySQL数据库

    什么是数据库呢?

      简单明了就是存储数据的库,它是通过一定的数据结构来进行组织和操作的,例如MySQL、DB2、Oracle、SQL Server、MariaDB等等目前最常用的就是MySQL和Oracle

    什么是MYSQL?

      MySQL是将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

      MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。

    数据库类型

      当前主流的关系型数据库Oracle、DB2、Microsoft SQL Server、Microsoft Access、MySQL等。

      非关系型数据库有 NoSql、Cloudant、redis。

      1.关系型数据库       

      关系型数据库把所有的数据都通过行和列的二元表现形式表示出来。

      关系型数据库的优势:1. 复杂查询可以用SQL语句方便的在一个表以及多个表之间做非常复杂的数据查询。2. 事务支持使得对于安全性能很高的数据访               问要求得以实现。对于这两类数据库,对方的优势就是自己的弱势,反之亦然。

      2.非关系型数据库

      非关系型数据库的优势:1. 性能NOSQL是基于键值对的,可以想象成表中的主键和值的对应关系,而且不需要经过SQL层的解析,所以性能非常高。

      2. 可扩展性同样也是因为基于键值对,数据之间没有耦合性,所以非常容易水平扩展。

    SQL结构化查询语言

      必须是通过服务器,连接我们的数据库,才能进行操作

      使用各种SQL语句、增、删、改、查

      1.数据定义语言(DDL):

      用于定义和管理数据对象,包括数据库,数据表等。例如:CREATE,DROP,ALTER等。

      数据库 -> 数据表:对数据库或数据表的创建、删除、修改等操作

      2.数据操作语言(DML):

      用于操作数据库对象中所包含的数据。例如:INSERT,UPDATE,DELETE语句。

      对数据的 增、删、改 这些操作,就是数据操作语言

      3.数据查询语言(DQL):

      用于查询数据库对象中所包含的数据,能够进行单表查询,

      连接查询,嵌套查询,以及集合查询等各种复杂程度不同的数据库查询,并将数据

      返回客户机中显示。SELECT

      4.数据控制语言(DCL):

      是用来管理数据库的语言,包括管理权限及数据更改。

    对数据库的操作

        1.创建数据库

          create database 数据库名;

        注意:
          1.如果数据库已存在,不能创建同名的数据库
          2.创建命令和数据库名都不区分大小写

          if not exists 如果数据库已存在,加上前面的关键字可以避免报错

        2.删除数据库

          drop database 数据库名;

        3.查看已创建的数据库

          show databases;

        4.使用一个数据库

          use 数据库名;

        5.查看当前我们所使用的数据库

          select database();

        6.查看建库语句

          show create database 数据库名;

          说明:通过该命令,我们可以看到所建数据库的建库语句、编码类型;

          注意:
              1.MySQL数据库中命令不区分大小写。

              2.每创建一个数据库,就会在data目录下创建一个以此数据库名称命名的文件夹。

              3.在Windows下,数据库名称也是不区分大小写的,但在Linux下,数据库名称严格区分大小写。

    用户权限

    用户管理:

    创建用户
        create user '用户名'@'IP地址' identified by '密码';
    删除用户
        drop user '用户名'@'IP地址';
    修改用户
        rename user '用户名'@'IP地址'; to '新用户名'@'IP地址';

    权限管理:

    show grants for '用户'@'IP地址'                  -- 查看权限
    grant 权限 on 数据库.表 to
    '用户'@'IP地址' -- 授权
    revoke 权限 on 数据库.表
    from '用户'@'IP地址' -- 取消权限
     all privileges  除grant外的所有权限
                select          仅查权限
                select,insert   查和插入权限
                ...
                usage                   无访问权限
                alter                   使用alter table
                alter routine           使用alter procedure和drop procedure
                create                  使用create table
                create routine          使用create procedure
                create temporary tables 使用create temporary tables
                create user             使用create user、drop user、rename user和revoke  all privileges
                create view             使用create view
                delete                  使用delete
                drop                    使用drop table
                execute                 使用call和存储过程
                file                    使用select into outfile 和 load data infile
                grant option            使用grant 和 revoke
                index                   使用index
                insert                  使用insert
                lock tables             使用lock table
                process                 使用show full processlist
                select                  使用select
                show databases          使用show databases
                show view               使用show view
                update                  使用update
                reload                  使用flush
                shutdown                使用mysqladmin shutdown(关闭MySQL)
                super                   使用change master、kill、logs、purge、master和set global。还允许mysqladmin调试登陆
                replication client      服务器位置的访问
                replication slave       由复制从属使用
    权限列表

    例如:

    创建用户
    create user 'user1'@'127.0.0.1' INDENTIFIED '123456'; #授权方式一:为用户授权 db1数据库下的所有表的 查询、修改、删除权限 grant select,update,delete on db1.* to 'user1'@'127.0.0.1'; #授权方式二:为用户授权 所有库的所有权限(除grant权限外) grant all privileges on *.* to 'user1'@'127.0.0.1';

     修改密码

    方式一: mysqladmin 命令

    输入cmd进入对话框
    mysqladmin -u用户名 -p密码 password 新密码

    方式二: 直接设置用户密码

    set password for '用户名'@'IP' = password('新密码')
     flush privileges;

    方式三:修改mysql库下的user表

    5.7版本修改密码方式:
    update mysql.user set authentication_string=password('新密码') where user= '用户名'          
    flush privileges; -- 刷新权限
                 
    5.6 版本
    update mysql.user set password = password('新密码') where user= '用户名'
    flush privileges; -- 刷新权限

    对数据表的操作

         表中的字段,其实可以理解为table表格中的表头


              1>创建数据表(不加任何主键信息,自增,数据限制条件的简易数据表创建)>最初练习可用
                create table 表名(
                字段名1 字段类型,
                字段名2 字段类型,
                字段名3 字段类型
                );

                注意:
                1.创建一个数据表时,它的每个字段之间用逗号","隔开;
                2.最后一个字段不用逗号",";
                3.创建完表以后,最后的括号后面使用分号结束
                4.建表时,表名后面的括号中写表的字段名(字段类型)

     

    create table user(
        id  int not null auto_increment  primary key,
        name varchar(50) null,  
        email varchar(100) not null,
       course_id int,
    foreign key(course_id) references course(cid)
    )engine = innodb default charset utf8; ps: not null :表示此列不能为空 auto_increment :表示自增长,默认每次增长+1 注意:自增长只能添加在主键或者唯一索引字段上   
       varchar 表示字符串的长度是可变的
    primary key :表示主键(唯一且不为空) engine =innodb :表示指定当前表的存储引擎 default charset utf8 :设置表的默认编码集


              2> 查看表结构

                desc 表名;

              3> 查看建表语句

                show create table 表名;

              4> 查看当前数据库存在的数据表

                show tables;

              5> 删除数据表

                drop table 表名

              6> 修改数据表

               添加列  ALTER table  表名  add 列名  类型
    
              删除列  ALTER table  表名  drop column 列名
    
              修改列  :
    
                  alter  table 表名 modify  column 列名 类型;
    
                  alter table 表名 change 原列名 新列名 类型;
    
              添加主键:
    
                  alter table 表名 add PRIMARY key (列名)   
    
              删除主键:
    
                  alter table 表名 drop PRIMARY key
    
                  移除主键时先去掉自增属性
    
                  alter table 表名 modify id int null , drop PRIMARY key;
    
              修改默认值:
    
                设置默认值:alter table 表名  alter 列名 set  default  ' haha '
    
                删除默认值:alter table 表名  alter 列名 drop default
    
              修改表名称
                          rename  table info1 to info; -- 修改表名
        
              复制表
                      1.CREATE table info3 select * from info where id =1;  
                      ps:主键自增/索引/触发器/外键 不会 被复制
        
                      2.复制表结构
                          CREATE table info5 SELECT * FROM info where 1!=1
                          CREATE table info4 LIKE info;
                       ps: 数据/触发器/外键 不会被复制

    对数据的操作     

              1> 添加数据

                ① insert into 表名 (字段1,字段2……) values (值1,值2……);
    
                ② insert into 表名 values (值1,值2……),(值1,值2……);
    
                ③ insert into 表名 (字段1,字段2……) values (值1,值2……),(值1,值2……);
    
                ④ insert into 表名 values (值1,值2...);
    
                ⑤ insert into 表名 set 字段1=值1,字段2=值2...;
    
                  注意:
                    1.值和字段名要一一对应,否则会报错
                    2.你写入的值一定要和数据类型相匹配


               2> 删除数据

                 delete from 表名 where 条件;
    
                  注意:删除数据的时候,一定要加上where条件,否则会删除所有的数据

             3> 修改数据

               

      update 表名 set  要修改的字段 = 修改后的值 where 条件
    
                  注意:修改数据的时候,一定要加上where条件,否则会修改所有的数据

              4> 查找数据


            

                 select *(所有字段) from 表;        --- 查询所有
    
                 select 字段1,字段2.. from 表;     --- 按指定字段查询
    
                  select name,SEX as'性别' from person; -- as 表示为字段起别名
    
                 select salary+200 from person; -- 可以进行数据列运算
    
                 select DISTINCT age,name FROM person; -- 去重复查询  
    
         条件查询
                 运算符
                 select * FROM person WHERE age >20;
                 select * FROM person WHERE age <=20;
    
                    select * FROM person WHERE age <>20;
                    select * FROM person WHERE age !=20;
    
                 null 关键字
                  select * FROM person where dept_id is null;
    
                  select * FROM person where dept_id is not null;
    
                  elect * FROM person where name ='';
    
                 逻辑运算符 and or
    
                  select * from person where age = 28 and salary =53000;
    
                  select * from person where age = 23 or salary =2000;
    
                  select * from person where not(age = 28 and salary =53000);
    
                  区间查询
    
                  select * from person where age BETWEEN 18 and 20;
    
                  ps: between...and 前后包含所指定的值
                  等价于 select * from person where salary >= 4000 and salary <= 8000;
    
    
                 集合查询
    
                  select * from person where id = 1 or id = 3 or id = 5;
    
                  select * from person where id not in(1,3,5);
    
    
                  模糊查询
    
                  select * from person where name like '%e%'; -- 包含指定参数
                  select * from person where name like '%e'; -- 以什么结尾
                  select * from person where name like 'e%'; -- 以什么开头
    
                  select * from person where name like '__e%'; -- _表示单个字符站位符              
    
                  select * from person where name like '__';            
    
                  排序查询
    
                  select * from person where age >30 ORDER BY salary desc; -- ASC正序 DESC倒序
    
                            select * from person ORDER BY CONVERT(name USING gbk);-- 中文排序
  • 相关阅读:
    BSGS
    斯特林数 笔记
    「CF932E」Team Work
    「hihoCoder1869」Items
    「Luogu1345」[USACO5.4]奶牛的电信Telecowmunication
    「Luogu4363/BZOJ5248」[九省联考2018]一双木棋chess
    「Luogu2522」[HAOI2011]Problem b
    狄利克雷卷积学习笔记
    莫比乌斯函数学习笔记
    欧拉函数学习笔记
  • 原文地址:https://www.cnblogs.com/liusouthern/p/8475452.html
Copyright © 2011-2022 走看看