首页 > 数据库 >mysql

mysql

时间:2024-01-05 22:55:49浏览次数:39  
标签:int t1 key mysql db1 table id

1. 简介

数据库就是一个可以操作文件并且基于网络通信的应用程序,

任何基于网络通信的底层都是socket

SQL语句:MySql不单单支持MySQL自己的客户端还支持其他编程语言来充当客户端,统一采用SQL语句进行通信

2. 数据库的分类

2.1 关系型数据库

特点:

  • 数据之间彼此有关系或者约束
  • 存储数据的表现形式通常是以表格形式呈现
  • 例如:MySQL、Oracle、db2、access、sql server

2.2 非关系型数据库

特点:

  • 存储数据通常以k、v键值对的形式
  • 例如:redis、MongoDB、memcache

3. SQL语句的使用

3.1 SQL语句以;分号结尾

3.2 基本命令

  • show databases:查看所有库名
  • \c: 取消
  • quit:退出
  • exit:退出
  • use db1: 切换数据库db1
  • select database(): 查看当前所在库的名字
  • set global xxx : 设置全局属性,如set global sql_mode='STRICT_TRANS_TABLES,PAD_CHAR_TO_FULL_LENGTH'

3.3 游客模式

只输入mysql

3.4 库操作

  • create database db1;
    create database db1 charset='utf-8';
    
  • drop database db1;
    
  • alter database db1 charset='gbk';
    
  • show database;
    show create database db1;
    

3.5 表操作

在进行表(文件)操作时,需要指定所在的库(文件夹)

  • # 用绝对路径的形式操作不同的库
    create table db1.t1(id int,name char(4))
    
    # 完整写法
    create table db1.t1(字段名1 类型(宽度),字段名2 类型(宽度), 约束条件1, 约束条件2)
    
    • 在同一张表中字段名不能重复
    • 宽度和约束条件是可选的
    • 最后一行不能有逗号
  • # 删除表
    drop table db1.t1
    
    # 删除字段
    alter table 表名 drop 字段名;
    
  • # 修改字段属性
    alter table db1.t1 modify name char(16) comment 注释
    # 修改字段名
    alter table db1.t1 change 旧字段 新字段 char(8) comment 注释
    # 重命名表名
    alter table 旧表名 rename to 新表名
    # 新注释
    alter table comment 注释
    # 默认在最后增加添加新的字段
    alter table 表名 add 新增字段名 字段类型[约束条件] 
    # 在最前增加添加新的字段
    alter table 表名 add 新增字段名 字段类型[约束条件] first
    # 在其他字段后增加添加新的字段
    alter table 表名 add 新增字段名 字段类型[约束条件] after 其他字段名
    

    关键字:

    • add
    • modify
    • change
    • first
    • after
    • comment
    • rename to
  • # 显示所有表
    show tables; 
    # 显示指定表
    show create table db1.t1;
    # 格式化显示
    desc db1.t1
    

3.6 数据操作

  • # 不指定字段,按字段顺序填充,
    insert into db1.t1 values(1,'aaa'),(2,'bbb'),(3,'ccc')
    
    # 指定字段(name,id)
    insert into db1.t1(name,id), values('aaa',1)
    

    关键词:

    • insert to
  • # 删除表中数据,删除以后主键的自增不会停止
    delete from db1.t1;
    
    # 限定条件
    delete from db1.t1 where id=1;
    
    # 清空表数据并且重置主键
    truncate db1.t1
    

    关键词:

    • delete from
    • truncate
  • # 修改name值为hhh的所有项,新值设置为dba
    update db1.t1 set name='dba' where name='hhh'
    
  • # 查询所有字段
    select * from db1.t1;
    
    # 查询name字段
    select name from db1.t1;
    
    # 查询id>1的 id和name 字段
    select id,name from db1.t1 where id>1
    

    关键词:

    • select xxx from

4. 存储引擎

存储引擎就是不同的处理机制针对不同的数据(txt,pdf,word....)应该有对应的不同的处理机制来存储

  • innodb:5.7以后的默认引擎,存储数据更加安全,有事务,外键等
  • myisam:5.7以前的默认引擎,速度比innodb更快
  • memory: 内存引擎,数据存储在内存中,断电数据丢失
  • blackhole: 无论存什么都立即消失
# 查看引擎
show engines;

# 创建表时设置引擎
create table t1(id int) engine=innodb # xx.frm xx.ibd
create table t2(id int) engine=myisam # xx.frm xx.MYD xx.MYI
create table t3(id int) engine=memory # xx.frm
create table t4(id int) engine=blackhole # xx.frm

5. 数据的类型

  • 整型

    tinyint(m) 1个字节 范围(-128~127)
    smallint(m) 2个字节 范围 (-32768~32767)
    mediumint(m) 3个字节 范围(-8388608~8388607)
    int(m) 4个字节 范围(-2147483648~2147483647)
    bigint(m) 8个字节 范围(+-9.22*10的18次方)

    默认情况下整型是带符号的,超出限制只存最大可接收的值(非严格模式,严格模式下报错)

    取值范围如果加unsigned,则为无符号,最大值翻倍,如tinyint unsigned取值范围为(0~256)

    特例:只有整型括号里面的数字不是表示限制位数如:

    • id int(8) 如果数字没有超出8位 那么默认用空格填充至8位
    • 如果数字超出了8位 那么有几位就存几位(但是还是要遵守最大范围)

    针对整型字段 括号内无需指定宽度 因为它默认的宽度int(11)足够显示所有的数据了

  • 浮点型

    float(m,d) 单精度 8位有效位(4字节) m表示总长度,d表示小数部分长度
    double(m,d) 双精度 16位有效位(8字节)m表示总长度,d表示小数部分长度
    decimal(m,d) 定点类型 m表示总长度,d表示小数部分长度

    精度比较:float<double<decimal

    decimal适用于科学计算,金融方面,它是最精确的值

  • 日期类型

    date 日期格式 2000-12-1
    time 时间格式 12:24:23
    datetime 2008-12-2 22:06:44
    timestamp 自动存储记录修改时间
    Year 年2008
  • 字符串

    char(m) 固定长度,最多255个字符,位数不够是空格(默认)补位
    varchar(m) 固定长度,最多65535个字符,位数不够有几个存几个

    char与varchar对比:

    1. 存储空间:char浪费空间(固定的字符存数据),varchar节省空间(存的时候需要制作报头,1bytes),
    2. 存取速度:char存取简单,varchar存取复杂(取的时候先读取报头,),
  • 枚举

    enum(选择1,选择2,...) 多选一
  • 集合

    set(选择1,选择2,...) 多选多

6. 约束条件

宽度是用来限制数据的存储,约束条件是在宽度的基础上额外的约束

  • not null: 不能为空
  • zerofill: 位数不够补0
  • unsigned: 无符号操作
  • default: 默认值
  • unique: 唯一
    • 联合唯一: 在最后写unique(id,port)
    • 单列唯一: 在字段类型后写unique
  • primary key: 主键(非空且唯一)
    • 单一主键: 如 id int primary key
    • 联合主键: primary key(id,port)
  • auto_increment: 自增 通常加在主键上,不能给普通字段加

7. 表与表之间

7.1 外键:

外键是建立表与表之间关系的纽带,写法:foreignkey(当前表中的键名) references 主表表名(主表表中的键名)

如:foreign key(t2_id) reference t2(id) 表示将t2_id字段设置为外键,关联t2表中的id字段

外键创建的时机:

  • 创建表时创建

    create table t2(id int primery key,addr varchar(50),t1_id int,foreign  key(t1_id) references t2(id))
    
  • 修改表时添加

    # 外键忘记关联:先删除后添加
    show create table 表名 # 查找外键名称
    # CONSTRAINT `emp_ibfk_1` FOREIGN KEY (`dep_id`) REFERENCES `dep` (`id`)
    alter table t2 drop foreign key 外键名
    
    # 添加外键
    alter table t2 add foreign key(t1_id) references t1(id)
    

级联操作:

alter table t2 add foreign key(t1_id) references t1(id)
on update cascade # 如果主键表中被参考字段更新,外键表中也更新
on delete cascade # 主键表中的记录被删除,外键表中改行也相应删除

表与表之间两种建立关系的方式:

  1. 通过外键强制建立关联

  2. 通过sql语句逻辑上建立联系

    delete from t1 where id=1;
    delete from t2 where id=1;
    
创建外键会消耗一定的资源,并且增加表与表之间的耦合度在实际项目中,如果表很多,可以不建立外键而是采用逻辑上建立联系的方式去建立联系

7.2 表关系

一对多

举例:员工表和部门表,

  1. 先站在员工表思考一个员工能否对应多个部门(一条员工数据能否对应多条部门数据) ,答案是不能!! (不能直接得出结论 一定要两张表都考虑完全)
  2. 再站在部门表思考一个部门能否对应多个员工(一个部门数据能否对应多条员工数据),答案是能!!! 得出结论
  3. 员工表与部门表示单向的一对多所以表关系就是一对多
# 部门表
create table dep(
	id int premary key auto_increment,
    dep_name char(16),
    dep_desc char(32)
);
# 员工表
create table dep(
	id int primery key auto_increment,
    name char(16),
    gender enum('male','female','others') default 'male',
    dep_id int,
    foreign key(dep_id) references dep(id),
    
    # 真正做到数据之间有关系,级联更新与删除 
    on update cascade  # 同步更新
    on delete cascade  # 同步删除
)

总结:

  • 一对多关系,外键字段建在多的一方,如上:一个部门(部门表)对应多个员工(员工表),外键建在员工表中
  • 在创建表的时候,一定要先建立被关联的表,如上:先建立部门表,部门表是被员工表关联的关联表
  • 在录入数据的时候,也必须先录入别关联表, 如上:先录入部门数据
  • 真正做到数据之间有关系,级联更新与删除on update cascade,on delete cascade

多对多

举例:书籍和作者

一本书籍可以有多个作者,一个作者可以有多本书籍,这就是多对多的关系

针对多对多:需要建立第三张表进行关联

create table book(
   id int primary key auto_increment,
    title varchar(32),
    price int
);
create table author(
   id int primary key auto_increment,
    name varchar(32),
    age int
);

# 第三张表
create table book2author(
   id int primary key auto_increment,
    author_id int,
    book_id int,
    foreign key(author_id) references author(id) 
    on update cascade  # 同步更新
    on delete cascade,  # 同步删除
    foreign key(book_id) references book(id) 
    on update cascade  # 同步更新
    on delete cascade  # 同步删除
);

一对一

如果一个表的字段特别多,每次查询又不是所有字段都用到,可以分表

举例:用户表和用户详情表

用户表中的字段: id,name,age

用户详情表的字段:id, addr ,phone ,hobby, email........

一个用户只能对应一个用户详情,这就是一对一关系

# 详情表
create table authordetail(
   id int primary key auto_increment,
    phone int,
    addr varchar(64)
);

# 用户表
create table author(
   id int primary key auto_increment,
    name varchar(32),
    age int,
    authordetail_id int unique,
    foreign key(authordetail_id) references authordetail(id) 
    on update cascade  # 同步更新
    on delete cascade  # 同步删除
)

外键的位置:建立在任何一方都可以,但是推荐建立在查询频率较高的表中

标签:int,t1,key,mysql,db1,table,id
From: https://www.cnblogs.com/hyf120/p/17948265

相关文章

  • mysql数据库(2)
    一、B树、B+树官方文档里说到,B树根节点指向叶子节点,但是人们忘了叶子节点可以互相指向,于是B+。createtablet1(aintprimarykey,bint,cint,dint,evarchar(20))engine=InnoDB;操作系统页单位4KB,mysql页单位16KB(逻辑单位,逻辑上一次取这么大)。如果按行读取时,相当于......
  • mysql8.0变量
    1、变量在MySQL数据库的存储过程和函数中,可以使用变量来存储查询或计算的中间结果数据,或者输出最终的结果数据。在MySQL数据库中,变量分为系统变量以及用户自定义变量1.1、系统变量1.1.1、系统变量分类变量由系统定义,不是用户定义,属于服务器层面,启动MySQL服务,生成MySQL服务实例期......
  • EF CodeFirst mysql 迁移异常Unable to create a 'DbContext' of type
    问题过程终端执行dotnetefmigrationsaddinit出现如下错误:Pomelo.EntityFrameworkCore.MySqlMicrosoft.EntityFrameworkCore.ToolsUnabletocreatea'DbContext'oftype''.Theexception'Methodnotfound:'VoidCoreTypeMappingParameters......
  • MySQL-8.0布署
    下载软件https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.35-linux-glibc2.17-x86_64.tar.xz解压软件tarxvfmysql-8.0.35-linux-glibc2.17-x86_64.tar.xz-C/usr/local/mv/usr/local/mysql-8.0.35-linux-glibc2.17-x86_64/usr/local/mysql-8.0.35安装依赖......
  • 使用 dbgate 在 sealos 上完美管理 mysql pgsql 等数据库
    先登录sealos创建数据库,可以创建个pgsql:再到模版市场启动dbgate:配置数据库的连接信息,即可搞定收工sealos以kubernetes为内核的云操作系统发行版,让云原生简单普及laf写代码像写博客一样简单,什么dockerkubernetes统统不关心,我只关心写业务!......
  • Mysql8忽略大小写的解决方案
    ​一、删除服务器数据文件由于8.0没法设置参数后重启(失败),所以必须删掉老库,重新启动才行。切记:;本步骤要删掉老库所有资料,如果是数据库当前有用,请做好备份,再进行操作。systemctlstopmysqldcd/var/lib/mysql默认数据在这里rm-rf*二、添加配置,大小写不敏感vim/etc/m......
  • mysql5.7 大量sleep连接解决方法
    showprocesslist查看发现有大量sleep进程查看当前数据库设置的最大连接数showvariableslike'max_connections';如果是生产环境需要紧急处理的话,可以先临时扩大支持的最大连接数setglobalnax_connections=1000;但是这个并不能永久性解决这个问题查看系统设置的wai......
  • MYSQL
    DB:“数据库”是以一定方式储存在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。DB类型关系数据库:MySQL,Oracle数据库非关系型数据库:BigTable(Google)DBA:数据库管理员DBMS:数据库管理系统:数据库管理系统(DatabaseMa......
  • Centos7安装mysql5.7
    Centos7安装mysql5.71、查看rpm包rpm-qa|grepmysql若有可用rpm-e卸载查找是否有mysql:find/-namemysql检测系统是否自带mysqlrpm-qa|grepmysql如果是,则使用下面命令进行删除:rpm-e--nodeps‘上一步查找的名称’删除成功后,查询所有Mysql对应的文件夹whereis......
  • MYSQL函数
    MYSQL中的函数包括:数学函数、字符串函数、日期和时间函数、条件判断函数、系统信息函数和加密函数等其他函数。 一、数学函数主要的数学函数有:绝对值函数、三角函数(包含正弦函数、余弦函数、正切函数、余切函数等)、对数函数、随机数函数等。在有错误产生时,数学函数将返回空......