day 41

MySql

一. 为啥使用数据库?

因为之前使用文件(Excel)管理数据, 但是数据量特别大的时候,使用Excel管理 的话, 就比较的麻烦了
因此引入一个新的数据管理软件 : 数据库软件

二. 数据库的分类?

关系型数据库

    1. 有约束
2. 基于硬盘的存储 (就是将数据存储到硬盘上, 持久化 === 落地) 典型代表:
MySQL oracle(国企) sqlserver(微软) sqllite db2 非关系型数据

1. 没有约束 (key--->value)
2. 基于内存存储 (将数据放入到内存中) 典型代表:
MemCache, redis(微博), mongodb

三. mySQL的架构:

    客户端:
socket客户端, 连接服务端, 发送指令 (SQL语句)
服务端:
socket服务端, 接收客户端的指令, 并将结果返回给客户端

四. MySQL 的安装

    版本: 5.5 以上  5.7 以下

    1. 可执行文件:
.exe 或者 .msi文件
点击下一步 2. 压缩包 解压, 进入目录 bin mysqld : 启动服务 mysql : 连接服务端 3. 环境变量的配置
ps:
工作中, 线上的 MySQL 不需要开发自己装, 运维或者DBA装
练习中, 需要自己手动安装MySQL

五. 初始化: mysqld --initialise-secure

数据库 (文件夹):
表 (文件)
  数据行 (文件中的一行内容)

六. 数据库的操作: (************)

    1. 数据库:

            增加:
SQL语句:  
create database 数据库名称;
例子:
create database db1; 删
drop database 数据库名称;
drop database db1; 修改 没有专门的修改指令 update 删了重新建 查询
show databases; 使用:
use 数据库名;
use db1; 2. 数据表: 新建:
use db1; # 移动到你需要创建表的库下面 版本0:
SQL语句:
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, 'zekai');
insert into t1 (id, name) values (2, '你好'); 改进1:
create table 表名 (
列名1 列类型
)engine=Innodb charset=utf8; ps:
引擎: Innodb 和 MyIsam
5.5 版本以上 默认是Innodb create table t2 (
id int,
name char(32)
)engine=Innodb charset=utf8; insert into t2 (id, name) values (1, '你好');
insert into t2 (id, name) values (1, 'xxx'); 改进2: create table 表名 (
列名1 列类型 auto_increment primary key
)engine=Innodb charset=utf8; create table t4 (
id int auto_increment primary key,
name char(32) not null default ''
)engine=Innodb charset=utf8; auto_increment : 自增
primary key : 主键索引 (作用: 加快查找的速度)
not null : 不能为空
default : 默认值 注意: 后面一列写完之后, 不能加逗号 (*********) 一种:
insert into t3 (id, name) values (1, '你好');
insert into t3 (id, name) values (2, 'xxx');
二种:
insert into t3 (name) values ('hello');
insert into t3 (name) values ('xxx');
                -------------------------------------------------------------

                最终的格式:
create table 表名 (
列1 列属性 [是否为null 默认值],
列2 列属性 [是否为null 默认值],
.....
列n 列属性 [是否为null 默认值]
)engine = 存储引擎 charset = 字符集

最终的例子:
create table db1 (
id int auto_increment primary key,
name char(32) not null default '',
pwd char(32) not null default ''
)engine=Innodb charset=utf8; 查看:
指令:
select 列名 from 表名;
例子:
select * from t1;
                列类型:

                    a. 数值型
create table t4 (
id unsigned mediumint auto_increment primary key,
name char(32) not null default '',
pwd char(32) not null default ''
)engine=Innodb charset=utf8; tinyint :
范围:  
有符号: -128到127
无符号: 0 到 255 unsigned
smallint
范围:  
有符号: -32768到32767
无符号: 0 到 65535 unsigned mediumint
范围:  
有符号: -8388608到8388607
无符号: 0 到 16777215 unsigned
int
bigint 区别:
a. 取值范围不一样, 根据自己公司的业务来去选择
b. 无符号和有符号的意思 float(M,D) 浮点型
decimal(M,D) 定点型 比float更加的精准 例如: 3.1415151519868789789
float: 3.141515000000000000
decimal : 3.1415151519868789789 126.35 M:小数总共多少位 decimal(5, )
D:小数点后面几位 decimal(5, 2) 使用场景:
比如 说存 salary 工资 : 6000.23 decimal(,2) b. 字符串类型 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: 文本  范围比较大, 如果存储大量字符的话, 可以使用这个字段

                    c. 时间类型
date 2019-6-12 推荐使用datetime

指令:
drop table 表名; 连带着将数据表中的所有数据都会删掉 ps: 工作中, 线上数据库, 这个命令根本不会让你用到 实例:
drop table t1; 查询
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 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);
    3. 数据行:

            增
insert into t3 (id, name) values (1, '你好'); 查询 select * from t3; : 将表中的 所有的列全部列出
select 列名, 列名, 列名 from t3 : 将某一列的值查出 删 delete from 表名(t3); 将表中的所有的 数据删除掉, 再次添加的时候, 继续会延续上一个 ID truncate 表名(t3);   将表中的所有的 数据删除掉, 再次添加的时候, ID 会重新开始 truncate 速度快 ps: 工作中, 线上数据库, 这个命令根本不会让你用到 delete from 表名(t3) where name = 'xxxxx';
            修改

                update t3 set username='zekai';

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

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

七. 外键: (***********************)

    缺点:
1. 数据重复
2. 如果 部门过长的话, 太占用空间
    解决方法:

        重新设计一张表, 这张表 中存放部门的相关信息
    部门表:

        create table department (
id int auto_increment primary key,
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 key,
name varchar(32) not null default '',
depart_id int not null default 1, # constraint 外键名(fk_userinfo_depart) foreign key (列名(depart_id)) references 关联的表名(department)(关联的列名(id)),
constraint fk_userinfo_depart foreign key (depart_id) references department(id) )engine=Innodb charset=utf8;
        insert into userinfo (name, depart_id) values ('root1', 1);
insert into userinfo (name, depart_id) values ('root2', 2); 错误的 注意:
创建多个外键的时候, 名称不能一样 =====> 一对多

mysql 数据库的基本操作的更多相关文章

  1. mysql数据库的基本操作

    mysql数据库的基本操作dos命令启动mysql服务:net start mysql启动数据库: mysql -uroot -p查看所有的数据库:show databases:新建数据库:creat ...

  2. 【第四章】MySQL数据库的基本操作:数据库、表的创建插入查看

    MySQL数据库基本操作 创建表 create table 查看表结构 desc table, show create table 表完整性约束 修改表 alter table 复制表 create ...

  3. Linux下MySQL数据库常用基本操作 一

    1.显示数据库 show databases; 2.选择数据库 use 数据库名; 3.显示数据库中的表 show tables; 4.显示数据表的结构 describe 表名; 5.显示表中记录 S ...

  4. Linux下MySQL数据库常用基本操作

    1.显示数据库 show databases; 2.选择数据库 use 数据库名; 3.显示数据库中的表 show tables; 4.显示数据表的结构 describe 表名; 5.显示表中记录 S ...

  5. 通过sql语句对MySql数据库的基本操作

    一.数据库的基本操作 CREATE DATABASE mybookstore; DROP DATABASE mybookstore; 二.表的基本操作 1.创建表 insert into 表名(字段名 ...

  6. Linux下MySQL 数据库的基本操作

    1. 创建数据库相关命令: 首先,下载MySQL相关软件包:aptitude install mysql-server/mysql-client MySQL中的root用户类似于Linux下的root ...

  7. mysql数据库的基本操作:索引、视图,导入和导出,备份和恢复

    1.索引: 索引是一种与表有关的结构,它的作用相当于书的目录,可以根据目录中的页码快速找到所需的内容. 当表中有大量记录时,若要对表进行查询,没有索引的情况是全表搜索:将所有记录一一取出,和查询条件进 ...

  8. mysql数据库的基本操作:创建数据库、查看数据库、修改数据库、删除数据库

    本节相关: 创建数据库 查看数据库 修改数据库 删除数据库 首发时间:2018-02-13 20:47 修改: 2018-04-07:考虑到规范化,将所有语法中“关键字”变成大写;以及因为整理“mys ...

  9. mysql数据库之基本操作和存储引擎

    一.知识储备 数据库服务器:一台计算机(对内存要求比较高) 数据库管理系统:如mysql,是一个软件 数据库:oldboy_stu,相当于文件夹 表:student,scholl,class_list ...

  10. 二、mysql数据库之基本操作和存储引擎

    一.知识储备 数据库服务器:一台计算机(对内存要求比较高) 数据库管理系统:如mysql,是一个软件 数据库:oldboy_stu,相当于文件夹 表:student,scholl,class_list ...

随机推荐

  1. CF1009F Dominant Indices——长链剖分优化DP

    原题链接 \(EDU\)出一道长链剖分优化\(dp\)裸题? 简化版题意 问你每个点的子树中与它距离为多少的点的数量最多,如果有多解,最小化距离 思路 方法1. 用\(dsu\ on\ tree\)做 ...

  2. 一个列表实现__iter__和__next__方法的例子

    x = ['厉智','陈培昌','程劲','徐晓冬'].__iter__() #这非得这么写不可,否则无法调用下面的__next__()方法,切记! print(x.__next__()) print ...

  3. springboot2.0入门(一)----springboot 简介

    一.springboot解决了什么? 避免了繁杂的xml配置,框架自动帮我们完成了相关的配置,当我们需要进行相关插件集成的时候,只需要将相关的starter通过相关的maven依赖引进,并可以进行相关 ...

  4. python不换行输出

    python默认的print是换行输出的.要想实现不换行输出,方法如下: python 2.X版本: print('要在print后面加个逗号-> , '), python 3.X版本: pri ...

  5. 斑马105SLPlus串口打印二维码

    1.根据说明书调试硬件,校准介质还有色带(很重要),我自己搞了好几天才搞明白. 2.设置好参数,比如打印介质连续.非连续,热敏还是热转质 3.打印机上电后悔自动校准,校准成功后就可以直接通过串口打印, ...

  6. 【转】css样式的书写顺序及原理——很重要!

    记得刚开始学习前端的时候,每次写css样式都是用到什么就在样式表后添加什么,完全没有考虑到样式属性的书写顺序对网页加载代码的影响.后来逐渐才知道正确的样式顺序不仅易于查看,并且也属于css样式优化的一 ...

  7. fatal: refusing to merge unrelated histories(git pull)

    https://blog.csdn.net/lindexi_gd/article/details/52554159 (refusing to merge unrelated histories) ht ...

  8. Spring中,请求参数处理

    Spring中,Controller里,获取请求数据有多种情况 在使用@RequestParam的方式获取请求中的参数时, 如果没有设置required这个属性,或者主动设置为true,则意味着这个参 ...

  9. Microsoft.Practices.Unity使用配置文件总是报错The type name or alias could not be resolved.

    Type name could not be resolved. Please check config file http://stackoverflow.com/questions/1493564 ...

  10. 洛谷P2135 方块消除

    洛谷题目链接 动态规划(真毒瘤!) 变量声明: $val[i]$:表示第$i$块颜色 $num[i]$:表示第$i$块颜色数量 $sum[i]$:表示$num$的前缀和 我们设计状态$f[l][r][ ...