• mysql数据库


    概念

    数据库:组织,存储,管理数据的仓库

    数据库的关系系统(DBMS):实现对数据有效组织,管理和存取的系统软件

    数据库分类

    关系型数据库和非关系型数据库:

    mysql , oraclle ,postgreSQL

    关系型数据库

    关系型数据库存储的结构:是一张二维的表格,表里面有行和列

    列:是对象,字段

    行:对象的信息,字段的属性

    行+列组成一张表

    优点:表的结构清晰,逻辑容易整理,记录的数据比较完整

    缺点:读写速度比较慢,并发量差,数据迁移比较麻烦

    非关系型数据库

    缓存型数据库:redis

    索引型数据库:ES

    文档型数据库:MongoDB

    非关系型数据库是键值对形式存储的结构

    优点:可以进行高并发读写,对海量数据依旧可以保持高效率的存储和访问。架构可扩展

    缺点:键值对形式存储,数据逻辑比较复杂,数据是保存在缓存当中,如果意外重启所有数据都会丢失

    数据库的数据类型:

    char:固定长度的字符类型,用于存储固定长度的字符串

    varchar:可变长度的字符类型,存储的是可变长度的字符串

    int:存储的数据类型为整数

    float:单精度浮点数,小数点。float(m,d) :m表示总位数,d表示小数位数

    double:双精度浮点数,doublet(m,d) :m表示总位数,d表示小数位数

    date:用于存储日期,YYYY-MM-DD(年-月-日)

    datetime:用于存储日志和时间,格式YYYY-MM-DD HH:MM:SS(年-月-日 时:分:秒)

    timestamp:和datetime类似,但是他可以自动记录当前时间

    smallinit:存储小整数

    bigint:存储大整数

    decimal(5,2):存储精度的浮点数,5表示总位数,2表示小数位

    char和varchar区别:

    char定义好了长度之后,不论写的值是多少,都会占用固定长度的字节大小。保存在磁盘上都是4字节

    varchar在保存字符串时,是多少就保存多少,在保存的字符串结尾默认有一个隐藏的结束符,会多占一个字节

    varchar比char要节约磁盘空间

    读写速度:char的读写性能要高于varchar,char是连续的磁盘空间,保存的内容是连续的

    varchar在增伤改查之后,会产生一个磁盘空间的碎片文件,影响读写性能

    数据库的管理:

    增删改查------sql语句

    sql中的名词

    数据库:database

    表:table

    行:row

    列:column

    索引:index

    视图:view

    用户:user

    权限:privilege

    存储过程:procedure

    存储函数:funcrion

    调度器:exent

    sql的语言规范

    在数据库系统中,sql语句不区分大小写,但是建议用大写

    sql语句可以分单行和多行,但是必须以“ ; ” 结尾

    命令规范:库名,表明,列的名字,都必须以字母开头,后面可以数字,也可以跟上特殊符号

    不要使用mysql的保留字,

    数据库名,表名,用户名严格区分大小写

    sql语言的分类

    1、DDL:数据库定义语言:创建数据库的对象语言,库 ,表和索引

    create drop

    2、DML:数据库操作语言,可以对表里面的数据进行管理

    select update insert插入 delete

    3、DQL:数据库查询语言,数据库的查询语句

    select

    4、DCL:数据控制语言,控制和管理数据库用户的角色和权限

    grant revoke

    5、tcl:事务控制语句,用来管理数据库的事务,脚本开发,存储过程等

    commit rollback savepoint

    DDL:创建库和表的语句

    一条数据库的语句是连贯的,以分号为结尾表示一条完整的sql

    但是太长了不方便阅读和理解,可以对一条语句进行分行的写法

    关键词不能跨行

    语法:

    create database +库名 :创建库

    drop database +库名:删除库

    创建表:

    create table  表名 (

    id 数据类型 not null,

    name 数据类型 not null,

    score 数据类型

    );

    drop database +表名 :删除表

    not null 表示不能为空

    示例:

    1、创建库xy102:create database xy102;

    2、删除库xy102:drop database xy102;

    3、创建表student:

    create table student (

    id int(4) not null,

    name char(10) not null,

    score decimal(5,2)

    );

    含义:

    create table student (

    创建的表名为 student

    id int(4) not null

    名字是id,字符类型是int ,(4)字符长度是4,not null不能为空

    name char(10) not null

    名字是name,字符类型varchar, (12)字符长度是12,not null不能为空

    sroce decimal(5,2)

    名字是sroce,字符类型是decimal , (5,2)总长度是5,小数点后面最多2位,可以为空

    4、删除表student:

    drop dataase student;

    desc 表名;查看表的结构,  desc 表名\G;纵向查看表的结构

    key:表示是否是主键或者外键

    default:如果没有数据的默认展示结果

    extra:提供列的附加信息。自增长等等

    DML:插入数据
    语法

    语法1:

    insert into 表名(字段1,字段2,字段3) values(1,2,3);

    语法2:

    insert into 表名 values(1,2,3)

    修改和更新数据:update

    语法:

    修改

    update 表名 set 列名=值 where 条件;

    删除

    delete from 表名 where 条件;

    修改表名和修改表结构:alter

    修改表名:

    alter table 表名 rename 修改后的表名

    给表添加一列:

    alter table 表名 add 添加的列名 数据类型 default '地址不详'

    修改字段的数据类型:

    alter table 表名 modify column 列名 数据类型;

    删除列:

    alter table 表名 drop 删除的列名;

    修改列名:

    alter table 表名 change 列名 修改后的列名 数据类型; 数据类型可以一起修改

    null和空值之间的区别:

    null就是啥也没有

    空值也是值,只是值为空

    示例:

    1、在表student中列名(id,name,score) 分别添加1,'swz',60,即id=1,name=swz,score=60

    insert into student(id,name,score) values(1,'swz',60);

    2、在表student中 依次添加2,'qwe',65,即id=2,name=qwe,score=65

    insert into student values(2,'qwe',65);

    3、将表student中name=qwe行的id改为2

    update student set id=2 where name = 'qwe';

    4、将表student中name=qwe行删除

    delete from student where name = 'qwe';

    5、修改表student为stut

    alter table student rename stut;

    6、给表student添加一列address,可变长度的字符类型,长度为50

    alter table student add address varchar(50) default '地址不详'

    7、将表student中的address列数据类型修改为固定长度的字符类型,长度为10

    alter table stydent modify column address char(10);

    8、删除表student中的address列:

    alter table student drop address;

    9、修改表student中的name列名为username

    alter table student change name username char(10); 

    最后的数据类型一定要加,可以和列名一起修改

    DQL,查询语句:
    语法:

    select * from 表名;(*表示所有,可以指定列名)

    查看指定行:

    select * from 表名 limit 2,3;

    2,3表示:从第2+1行开始往下3行

    去重查询:

    select distinct 列名 from 表名

    where语句:条件的筛选:

    select * from 表名 where 条件(*表示所有,可以指定列名)

    and 且

    or 或

    模糊查找: LIKE

    select * from student where 列名 like '内容%'

    以内容为开头

    select * from student where 列名 like '%内容'

    以内容为结尾

    示例:

    1、查询表student中所有列

    select * from student;(*表示所有,可以指定列名)

    2、查看表student中前三行:

    select * from stydent limit 0,3;

    3、去掉表student中name列中重复的

    select distinct name from student

    4、查找表student中id=1并且score=60的行

    select name from student where id = 1 and score = 60;

    查找表student中id=1或score=60的行

    select name from student where id = 1 or score = 60;

    5、查找表student中name列中以q为开头的行

    select * from student where name like 'q%';

    查找表student中name列中以q为结尾的行

    select * from student where name like '%q'

    数据库的约束方式:

    主键约束:用于标识表中的主键列的值,而且这个值是全表当中唯一的,而且值不能为null

    一个表只能有一个主键

    外键约束:用来建立表与表之间关系,确保外键中的值与另一个表的主键匹配,保证数据引用的完整性。  外表联查,不要超过三张,超过三张表会降低查询效率

    非空约束:not null,保证列中的值不含null值

    唯一性约束:unique key,确保列中的所有值都是唯一的,类似主键,但一个表可以有多个唯一约束

    自增约束:auto_increment,在列生成的每一行都会自动生成一个唯一标识符,通常和主键一起使用,每次插入新行时,自增列的值会自动增加

    默认值约束:default,在插入表数据时,如果没有定义值,会提供一个默认值。

    外键是和主表进行关联的列,不需要设置为从表的主键,但是不能为空,必须和主表的数据类型保存一致。

    外键的值和主键的值要相同

    先插入主表的数据,再插入从表的数据

    删除表的外键不是直接删除外键的列名,要先删除外键的索引,用show create table 表名,查看表是详细信息

    删除主键不需要加上主键的列名,如果有extra的额外属性,比如说自增长,要先移除属性,然后才能删除主键

    删除主键的方式:alter进行修改

    复制表:

    create table stu_1 like student;

    将表的内容复制:

    insert into stu_1 select * from student;

    表和表的内容一起复制:

    create table stu_2 (select * from student);

    创建临时表:

    临时表创建完成后,在库里看不到,但是依然可以进行增删改查。重新连接数据后,临时表就会消失

    create temporary table 表名

    清空表:

    drop删除表 (不推荐)

    *如何删除表内的数据,但是保留表和表结构

    1、delete from 表名 :保留表结构,一行一行的清除表数据,速度比较慢,如果有自增长字段,delete清空之后,会继续按照原来增长的序号继续递增

    2、truncate table 表名 :保留表结构,清空之后,原有的记录全部抹去,自增长也从头开始,速度比较快

    数据库的用户管理:

    root都是相同的,

    Host:可以登录的主机,

    localhost指的是本地登录

    %:任意主机(ip地址)

    权限上:localhost > %的权限

    创建用户

    create user 'gfw'@'192.168.233.10' identified by '123456';

    root%localhost 安装完mysql后就有了,不需要额外设置。其他的都需要人工创建 其他的用户也不设置成localhost,都是设置主机名

    删除用户

    drop user 'gfw'@'192.168.233.10';

    设置用户权限

    grant all privileges on * . * to 'swz'@'192.168.203.12' identified by '123456'

    all:

    *. * : 前面*表示库,后面 *表示 库里的表

    information_schema:这个库的作用包含了mysql服务器中所有其他数据库,表、列、索引权限等详细的元数据的信息,可以查询数据库的结构和元信息

    performance_schema:包含mysql的服务性能和资源利用情况,查询语句的执行时间和锁定信息

    查看用户权限

    show grants for 'gfw'@'192.168.233.10';

    只给用户查的权限

    grant select on xy102.* to 'gfw'@'192.168.233.10' ;

    给用户多个权限

    grant insert,update,alter,delete on xy102.* to 'gfw'@'192.168.233.10' ;

    取消权限

    revoke all privileges on *.* from 'gfw'@'192.168.233.10' ;

    revoke insert,update,alter,delete on xy102.* from 'gfw'@'192.168.233.10' ;

    mysql本地免密登录

    vim /ect/my.cnf

    添加  skip-grant-tables

  • 相关阅读:
    软考2018高级架构师下午案例分析第4题:关于MemCache、Redis数据同步、分布式存储、集群切片
    【解决】常见反爬总结之SVG映射
    MYSQL之增删改查(中)
    搜索与图论——Kruskal算法求最小生成树
    便携烙铁开源系统IronOS,支持多款便携DC, QC, PD供电烙铁,支持所有智能烙铁标准功能
    Redis集群部署
    PCL 4PCS点云粗配准
    期末前端web大作业——名侦探柯南网页制作 Hbuiderx制作网页 静态HTML网页单页制作 dreamweaver网页设计与制作代码 web前端期末大作业
    Java高级特性:泛型、集合框架和异常处理
    Pico neo3+Unity开发记录
  • 原文地址:https://blog.csdn.net/s320721/article/details/140439343