zoukankan      html  css  js  c++  java
  • 41 数据库操作

    Mysql
    一.为什么使用数据库
    因为之前使用文件(Excel)管理数据,但数据量大时,再使用文件管理就比较麻烦
    所以引用一个新的数据管理软件:数据库软件
    官方定义:
    数据库(Database)是按照数据结构来组织、存储和管理数据的仓库

    二:数据库的分类
    关系型数据库
    1.有约束
    2.基于硬盘的存储(即将数据存储到硬盘上,即持久化)(更安全)
    3.需要有表结构
    数据落地即数据的持久化
    典型代表:
    Mysql oracle(用于国企) sqlserver(微软) sqllite(轻量级) db2(轻量级)
    非关系型数据库
    1.无约束(key-value)
    2.基于内存的存储(即将数据存储到内存中)(断电)
    3.没有表结构
    典型代表:
    MemCache redis(微博) mongodb

    三.Mysql的安装
    1、下载:MySQL Community Server 5.7.16


    2、解压
    如果想要让MySQL安装在指定目录,那么就将解压后的文件夹移动到指定目录,如:C:mysql-5.7.16-winx64

    3、添加环境变量
    【右键计算机】--》【属性】--》【高级系统设置】--》【高级】--》【环境变量】--》【在第二个内容框中找到 变量名为Path 的一行,双击】 --> 【将MySQL的bin目录路径追加到变值值中,用 ; 分割】

    4、初始化
    mysqld --initialize-insecure

    5、启动MySQL服务
    mysqld # 启动MySQL服务

    6、启动MySQL客户端并连接MySQL服务
    mysql -u root -p # 连接MySQL服务器

    7.安装

    六.数据库的操作(重点)
    sql语句:
    例子
    1.数据库
    查询:
    show databases;

    增加:
    create database 数据库名称;
    create database db1;

    修改:
    无固定修改指令
    updata(删了重新建)

    删除:
    drop database 数据库名称;
    drop database db1;

    使用:
    use 数据库名称;
    use db1;



    2.数据表
    查询:
    show tables;
    desc 表名; : 查看表的结构
    show create table 表名 : 查看表的创建过程

    关于主键自增:
    会话级别
    显示
    show session variables(可变量) like 'auto_inc%';
    设置
    set session auto_increment_increment(增加的步长) = 2;
    全局
    show global variables like 'auto_inc%';
    set global auto_increment_increment = 2;


    新建:
    create table 表明 (
    列名1 列表型
    );
    create table t1 (
    id int,
    name char(32)
    );

    插入新增:
    insert into 表名 (列1,列2) values (值1,值2);
    insert into t1 (id,name) values (1,'asan');
    insert into t1 (id,name) values (1,'阿三');
    查看:
    select 列名 from 表名;
    select * from t1;
    *:把表里所有的数据列都给查出来
    1.解决编码:
    先新建:
    create table 表名 (
    列名1 列类型
    )enginne=Innodb charset=utf8;
    小知识:
    引擎:Innodb 和 MyIsam
    5.5 版本以上 默认是Innodb
    create table t2 (
    id int,
    name char(32)
    )enginne=Innodb charset=utf8;
    再插入:
    insert into t1 (id,name) values (1,'asan');
    insert into t1 (id,name) values (1,'阿三');
    2.若插入列名有重复:
    先新建:
    create table 表名 (
    列名1 列类型 auto_increment primary key
    )enginne=Innodb charset=utf8;
    create table t3 (
    id int auto_increment primary key,
    )enginne=Innodb charset=utf8;
    auto_increment;自增
    primary key;主键索引
    索引;用于加快查找的速度
    插入方法1:改列名
    insert into t3 (id, name) values (1, '你好');
    insert into t3 (id, name) values (2, 'xxx');
    插入方法2;将列名省略不写
    insert into t3 (name) values ('hello');
    insert into t3 (name) values ('xxx');
    3.再改进
    create table t4 (
    id int auto_increment primary key ,
    name char(32) not null default ''
    )enginne=Innodb charset=utf8;

    not full;不能为空
    dafault;默认值
    默认值如果为字符串可为空'',如果为字符串,可为数字'数字'
    auto_increment 和not null default不适合在一起使用,如','隔开,则可以

    注意: 后面一列写完之后, 不能加逗号
    最终格式:
    create table 表名 (
    列1 列属性 [是否为null 默认值],
    列2 列属性 [是否为null 默认值],
    .....
    列n 列属性 [是否为null 默认值]
    )engine = 存储引擎 charset = 字符集
    create table t4 (
    id int auto_increment primay key,
    name char(32) not null default '',
    pwd char(32) not null default ''
    )engine=Innodb charset=utf-8;


    列类型;
    1.数值型
    create table t4 (
    id int auto_increment primay key,
    name char(32) not null default '',
    pwd char(32) not null default ''
    )engine=Innodb charset=utf-8;
    tinyint :
    范围:
    有符号: -128到127
    无符号: 0 到 255 unsigned
    smallint
    范围:
    有符号: -32768到32767
    无符号: 0 到 65535 unsigned

    mediumint
    范围:
    有符号: -8388608到8388607
    无符号: 0 到 16777215 unsigned
    int
    范围:
    有符号: -2147483648到2147483647
    无符号: 0 到 4294967295 unsigned
    bigint
    范围:
    超级大
    区别:
    a. 取值范围不一样, 根据自己公司的业务来去选择
    b. 无符号和有符号的区别


    unsigned表示为无符号
    float(M,D) 浮点型
    decimal(M,D) 定点型 比float更加的精准
    M: 精度(总位数)D: 标度(小数位)

    例如: 3.1415151519868789789
    float: 3.141515000000000000
    decimal : 3.1415151519868789789

    126.35

    M:小数总共多少位 decimal(5, )
    D:小数点后面几位 decimal(5, 2)

    使用场景:
    比如 说存 salary 工资 : 6000.23 decimal(,2)


    2.字符串类型
    char : 定长 char(32) 这一列的值就是32 优点: 速度快 缺点: 浪费
    varchar : 变长 varchar(32) 优点: 不浪费, 节省空间 缺点: 速度慢

    根据自己公司的业务来去选择:

    create table userinfo (
    id unsigned mediumint auto_increment primary key,
    name varchar(128) not null default '',
    pwd char(32) not null default '',
    create_time datetime not null default '1970-01-01 00:00:00'
    )engine=Innodb charset=utf8;

    一般情况下, 如果没有100%的把握, 都是用varchar()


    text: 文本 范围比较大, 如果存储大量字符的话, 可以使用这个字段

    3.时间类型
    data 日期 XXXX-ZZ-CC 2019-10-2
    time 时间 AA:SS:DD 3:15:25
    datatime 时间日期 XXXX-ZZ-CC AA:SS:DD 2019-10-2 3:15:25

    修改:
    create table t4 (
    id int auto_increment primary key,
    name char(32) not null default '',
    pwd char(32) not null default ''
    )engine=Innodb charset=utf8;

    修改字段:
    alter table 表名(t3) change 原列名(name) 新列名(username varchar(32) not null default '');

    新增字段:
    alter table 表名(t3) add 新列(pwd char(32) not null default '');

    删除字段:
    alter table 表名(t3) drop 列名(pwd);

    删除:
    指令:
    drop table 表名;

    连带着将数据表中的所有数据都会删掉

    ps: 工作中, 线上数据库, 这个命令根本不会让你用到

    实例:
    drop table t1;



    3.数据行
    查询:
    select * from t3; : 将表中的 所有的列全部列出
    select 列名, 列名, 列名 from t3 : 将某一列的值查出

    增加:
    insert into t3 (id, name) values (1, '你好');

    修改:
    update t3 set username='zekai';

    update t3 set username='xxxx' where id=3;

    update t3 set username='xxxx', pwd='xxxxx' where id=3;



    删除:
    delete from 表名(t3); 将表中的所有的 数据删除掉, 再次添加的时候, 继续会延续上一个 ID

    truncate 表名(t3); 将表中的所有的 数据删除掉, 再次添加的时候, ID 会重新开始

    truncate 速度快

    ps: 工作中, 线上数据库, 这个命令根本不会让你用到

    delete from 表名(t3) where name = 'xxxxx';


    七:外键(重点)

    外键

    定义:

    表的外键是另一表的主键, 外键可以有重复的, 可以是空值

    作用:

    用来和其他表建立联系用的

    个数:

    一个表可以有多个外键
    缺点:
    1. 数据重复
    2. 如果 部门过长的话, 太占用空间
    =====> 一对多

    部门表;
    create table department (
    id int auto_increment primary ley,
    depart_name varchar(32) not null default
    )engine=Innodb charset=utf8;

    insert into department (depart_name) values ('公关'), ('关关'),('关公');


    create table userinfo (
    id int auto_increment primary,
    name varchar(32) not null default,
    depart_id int not null default
    )engine=Innodb charset=utf8;

    insert into userinfo (name,depart_id) values ('root1',1);
    insert info userinfo (name,depart_id) values ('root2',99);错误,创建的应是外键里面有的

  • 相关阅读:
    U盘出现大量乱码文件,并且不能彻底删除
    使用命令生成配置文件
    input只读属性readonly和disabled的区别
    将sublime添加到鼠标右键
    mysql-front导入数据失败:“在多字节的目标代码页中,没有此 Unicode 字符可以映射到的字符”
    typeof运算符
    react input 设置默认值
    时间格式转换
    去除字符串首尾空格
    ES6基础知识汇总
  • 原文地址:https://www.cnblogs.com/komorebi/p/11015202.html
Copyright © 2011-2022 走看看