返回顶部
首页 > 资讯 > 数据库 >如何学习MySQL约束及存储引擎
  • 685
分享到

如何学习MySQL约束及存储引擎

2023-06-28 23:06:21 685人浏览 独家记忆
摘要

这期内容当中小编将会给大家带来有关如何学习MySQL约束及存储引擎,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1. Mysql约束# ### char varchar&nb

这期内容当中小编将会给大家带来有关如何学习MySQL约束及存储引擎,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

1. Mysql约束

# ### char varchar (补充)char    字符长度   255个varchar 字符长度 21845个# ### part1  时间类型date  YYYY-MM-DD 年月日 (节假日,纪念日)time  HH:MM:SS   时分秒 (体育竞赛,记录时间)year  YYYY       年份   (历史,酒的年份)datetime  YYYY-MM-DD HH:MM:SS  年月日 时分秒 (上线时间,下单时间)create table t1(d date, t time , y year , dt datetime);insert into t1 values("2020-11-3","9:19:30","2020","2020-11-3 9:19:30");insert into t1 values(now(),now(),now(),now());timestamp YYYYMMDDHHMMSS(时间戳)  自动更新时间 (不需要手动写入,自动实现更新记录,[用作记录修改的时间])create table t2(dt datetime , ts timestamp);insert into t2 values(20201103092530 , 20201103092530);insert into t2 values(null,null); # 区别 timestamp 自动更新时间(以当前时间戳) datetime没有insert into t2 values(20390102101010 , 20390102101010); error # 超越2038 # ### part2 约束 : 对编辑的数据进行类型的限制,不满足约束条件的报错unsigned   :    无符号not null   :    不为空default    :    默认值unique     :    唯一值,加入唯一索引(索引相当于字典目录,索引的提出是为了加快速度,一味地乱加索引不会提高查询效率)primary key:    主键auto_increment: 自增加一zerofill   :    零填充foreign key:    外键# unsigned 无符号create table t3(id int unsigned);insert into t3 values(-1); errorinsert into t3 values(4000000000); success# not null   :    不为空create table t4(id int not null , name varchar(11));insert into t4 values(1,"张宇");insert into t4 values(null,"张宇"); errorinsert into t4(name) values("李四"); error# default    :    默认值create table t5(id int not null  , name varchar(11) default "沈思雨" );insert into t5 values(1,null);insert into t5(id) values(2);create table t5_2(id int not null  default "1111" , name varchar(11) default "沈思雨" );insert into t5_2 values(); # 在values里面不写值,默认使用默认值;# unique     :    唯一值,加入唯一索引(索引的提出是为了加快速度,一味地乱加索引不会提高查询效率)# 唯一 可为null  标记成: UNIcreate table t6(id int unique , name char(10) default "赵万里" );insert into t6(id) values(1);insert into t6(id) values(1); errorinsert into t6(id) values(null);insert into t6(id) values(null); # id变成了多个null# primary key:    主键 [ 唯一 + 不为null ]   PRI 标记数据的唯一特征"""一个表中,只能设置一个字段为一个主键,unique唯一约束可以设置多个"""# 创建主键create table t7(id int primary key , name varchar(10) default "赵沈阳");insert into t7(id) values(1);insert into t7(id) values(1); error insert into t7(id) values(null); error# unique + not null => PRIcreate table t8(id int unique not null ,  name varchar(10) default "赵沈阳" );# primary key  / unique + not null  => 优先把primary key 作为主键;create table t9(id1 int unique not null ,  id2 int primary key );# 一个表只能设置单个字段为一个主键;create table t10(id1 int  primary key  ,  id2 int primary key ); error# auto_increment: 自增加一 (一般配合 主键或者unique 使用)create table t11(id int primary key auto_increment , name varchar(255) default "敬文栋");insert into t11 values(1,"张三");insert into t11 values(null,"李四");insert into t11(id) values(null);# 使用默认值或者自增插入数据insert into t11 values();# 删除数据delete from t11;# 删除数据 + 重置idtruncate table t11;# zerofill   :    零填充 (配合int使用,不够5位拿0来填充)create table t12(id int(5) zerofill);insert into t12 values(1234567);insert into t12 values(12);

2. 外键_联合主键_唯一索引

# ### part3"""主键索引 : PRI    [primary key]唯一索引 : UNI    [unique]普通索引 : MUL    [index]"""# 1.联合唯一索引"""unique(字段1,字段2,字段3 ..... )  合在一起,该数据不能重复"""# unique + not nullcreate table t1_server(id int , server_name varchar(10)  not null , ip varchar(15) not null , port int not null , unique(ip,port) );insert into t1_server values(1,"阿里","192.168.11.251",3306);insert into t1_server values(1,"阿里","192.168.11.251",80);insert into t1_server values(1,"阿里","192.168.11.252",80);insert into t1_server values(1,"阿里","192.168.11.252",80); error# unique : 有可能出现多个空值的情况要注意;create table t2_server(id int , server_name varchar(10)  not null , ip varchar(15) , port int , unique(ip,port) );insert into t2_server values(1,"腾讯","192.168.11.251",3306);insert into t2_server values(1,"腾讯","192.168.11.251",3306); errorinsert into t2_server values(1,"腾讯",null,null); # 注意点: 允许插入多个空值;+------+-------------+----------------+------+| id   | server_name | ip             | port |+------+-------------+----------------+------+|    1 | 腾讯        | 192.168.11.251 | 3306 ||    1 | 腾讯        | NULL           | NULL ||    1 | 腾讯        | NULL           | NULL ||    1 | 腾讯        | NULL           | NULL ||    1 | 腾讯        | NULL           | NULL |+------+-------------+----------------+------+# 2.联合唯一主键create table t3_server(id int ,server_name varchar(10)  not null , ip varchar(15) , port int  , primary key(ip,port) );insert into t3_server values(1,"华为","192.168.11.251",3306);insert into t3_server values(1,"华为","192.168.11.251",3307);"""总结:primary key(字段1,字段2 ... )   联合唯一主键 , 单个字段情况,可以设置一个主键,如果是多个字段只能设置成联合主键,合在一起表达一个主键概念;unique(字段1,字段2 ... )    联合唯一索引index(字段1,字段2 ... )    联合普通索引"""# 3.foreign key:    外键,把多张表通过一个关联字段联合在一起 (该字段可以设置成外键,作用是可以联级更新或者联级删除)"""  语法:foreign key(classid) references class1(id)  条件:被关联的字段,必须具备唯一属性;"""student1:id  name          age    classid      1  wangtongpei   58     12   liuyifeng     85     13   wangwen       18     2class1:id classname 1  python322  python33# 创建class1create table class1(id int , classname varchar(255));# 添加唯一索引alter table class1 add unique(id);# 删除索引create table class222(id int unique, classname varchar(255));alter table class1 drop index id;# 创建student1create table student1(id int primary key auto_increment,name varchar(255),age int,classid int,foreign key(classid) references class1(id));# 添加数据insert into class1 values(1,"Python32");insert into class1 values(2,"python33");insert into class1 values(3,"python34");insert into student1 values(null,"wangtongpei",58,1);insert into student1 values(null,"liuyifeng",85,1);insert into student1 values(null,"wangwen",18,2);# 没有关联的数据可以直接删除delete from class1 where id = 1;# 有关联的数据不能直接删除,要先把关联的数据删掉之后再删除delete from student1 where id = 3;delete from class1 where id = 2;# 联级更新 , 联级删除 ( 谨慎使用 )"""联级删除 on delete cascade联级更新 on update cascade"""# 创建class2create table class2(id int primary key auto_increment, classname varchar(255));# 创建student2create table student2(id int primary key auto_increment,name varchar(255),age int,classid int,foreign key(classid) references class2(id) on delete cascade on update cascade #区别);# 添加数据insert into class2 values(1,"python32");insert into class2 values(2,"python33");insert into class2 values(3,"python34");insert into student2 values(null,"wangtongpei",58,1);insert into student2 values(null,"liuyifeng",85,1);insert into student2 values(null,"wangwen",18,2);# 联级删除 (把所有关联数据全部删除,谨慎;)delete from class2 where id = 1;# 联级更新 (把所有关联数据全部更新,谨慎;)update class2 set id = 100 where classname="python33# ### part3"""主键索引 : PRI    [primary key]唯一索引 : UNI    [unique]普通索引 : MUL    [index]"""# 1.联合唯一索引"""unique(字段1,字段2,字段3 ..... )  合在一起,该数据不能重复"""# unique + not nullcreate table t1_server(id int , server_name varchar(10)  not null , ip varchar(15) not null , port int not null , unique(ip,port) );insert into t1_server values(1,"阿里","192.168.11.251",3306);insert into t1_server values(1,"阿里","192.168.11.251",80);insert into t1_server values(1,"阿里","192.168.11.252",80);insert into t1_server values(1,"阿里","192.168.11.252",80); error# unique : 有可能出现多个空值的情况要注意;create table t2_server(id int , server_name varchar(10)  not null , ip varchar(15) , port int , unique(ip,port) );insert into t2_server values(1,"腾讯","192.168.11.251",3306);insert into t2_server values(1,"腾讯","192.168.11.251",3306); errorinsert into t2_server values(1,"腾讯",null,null); # 注意点: 允许插入多个空值;+------+-------------+----------------+------+| id   | server_name | ip             | port |+------+-------------+----------------+------+|    1 | 腾讯        | 192.168.11.251 | 3306 ||    1 | 腾讯        | NULL           | NULL ||    1 | 腾讯        | NULL           | NULL ||    1 | 腾讯        | NULL           | NULL ||    1 | 腾讯        | NULL           | NULL |+------+-------------+----------------+------+# 2.联合唯一主键create table t3_server(id int ,server_name varchar(10)  not null , ip varchar(15) , port int  , primary key(ip,port) );insert into t3_server values(1,"华为","192.168.11.251",3306);insert into t3_server values(1,"华为","192.168.11.251",3307);"""总结:primary key(字段1,字段2 ... )   联合唯一主键 , 单个字段情况,可以设置一个主键,如果是多个字段只能设置成联合主键,合在一起表达一个主键概念;unique(字段1,字段2 ... )    联合唯一索引index(字段1,字段2 ... )    联合普通索引"""# 3.foreign key:    外键,把多张表通过一个关联字段联合在一起 (该字段可以设置成外键,作用是可以联级更新或者联级删除)"""  语法:foreign key(classid) references class1(id)  条件:被关联的字段,必须具备唯一属性;"""student1:id  name          age    classid      1  wangtongpei   58     12   liuyifeng     85     13   wangwen       18     2class1:id classname 1  python322  python33# 创建class1create table class1(id int , classname varchar(255));# 添加唯一索引alter table class1 add unique(id);# 删除索引create table class222(id int unique, classname varchar(255));alter table class1 drop index id;# 创建student1create table student1(id int primary key auto_increment,name varchar(255),age int,classid int,foreign key(classid) references class1(id));# 添加数据insert into class1 values(1,"python32");insert into class1 values(2,"python33");insert into class1 values(3,"python34");insert into student1 values(null,"wangtongpei",58,1);insert into student1 values(null,"liuyifeng",85,1);insert into student1 values(null,"wangwen",18,2);# 没有关联的数据可以直接删除delete from class1 where id = 1;# 有关联的数据不能直接删除,要先把关联的数据删掉之后再删除delete from student1 where id = 3;delete from class1 where id = 2;# 联级更新 , 联级删除 ( 谨慎使用 )"""联级删除 on delete cascade联级更新 on update cascade"""# 创建class2create table class2(id int primary key auto_increment, classname varchar(255));# 创建student2create table student2(id int primary key auto_increment,name varchar(255),age int,classid int,foreign key(classid) references class2(id) on delete cascade on update cascade #区别);# 添加数据insert into class2 values(1,"python32");insert into class2 values(2,"python33");insert into class2 values(3,"python34");insert into student2 values(null,"wangtongpei",58,1);insert into student2 values(null,"liuyifeng",85,1);insert into student2 values(null,"wangwen",18,2);# 联级删除 (把所有关联数据全部删除,谨慎;)delete from class2 where id = 1;# 联级更新 (把所有关联数据全部更新,谨慎;)update class2 set id = 100 where classname="python33";

3. 存储引擎_表关系

# ### part4 表与表之间的关系(1) 一对一 : id name age sex address guanlian    id userid mother father ....  (2) 一对多(多对一) : 班级和学生之间的关系 一个班级可以对应多个学生,反过来,多个学生对应一个班级;(3) 多对多 : 一个学生可以同时学习多个学科,一个学科同时可以被多个学生学习 一本书可以被多个作者共同编写,一个作者可以写多本书xueke (表1)id  name1   math2   english3   wuli student (表2)id  name1   wangwen2   wangwei3   wangtongpeirelation (关系表3)"""把 xid 和 sid 这两个关联字段设置成外键,关联xueke表里的id(对应的xid) , 关联student表里的id(对应的sid)"""xid sid1   11   21   32   12   22   3# ### part5 存储引擎 : 存储数据的一种结构方式# 概念:表级 :  只要有一个线程执行修改表中的相关操作,就会上锁,其他线程默认等待;行级锁 :  针对于当前表中的这条记录,这一行进行上锁,其他数据仍然可以被其他线程修改,实现高并发,高可用;事务处理: 执行sql语句时,必须所有的操作全部成功,才最终提交数据,有一条失败,直接回滚,恢复到先前状态begin     : 开启事务commit    : 提交数据rollback  : 回滚数据MyISAM: 表级锁      (5.5版本之前的默认存储引擎)InnoDB: 事务处理,行级锁,外键 (5.5版本之后的默认存储引擎)MEMORY: 把数据放在内存中,临时缓存;BLACKHOLE: anything you write to it disappears   一般用于同步主从数据库;(放在主数据库和从数据库之间的一台服务器;产生binlog日志进行分发,减轻master的压力)"""主数据库: 增删改从数据库: 查询配置: 一主一从 , 一主多从 , 多主多从""""""show engins;  # 查看存储引擎show create table memary1; # 查看创建数据库的结构desc + 表名;  # 查看表结构"""create table myisam1( id int ) engine=MyISAM;.frm 表结构.MYD 表数据.MYI 表索引create table innodb1( id int ) engine=InnoDB;.frm 表结构.ibd 表数据+表索引create table memory1( id int ) engine=MEMORY;.frm 只有表结构 , 数据存放在内存中create table blackhole( id int ) engine=BLACKHOLE;.frm 只有表结构 , 所有的数据都不会存储;# ### 额外补充# 关于约束的添加和删除# 1 添加/删除 约束 not null#alter table 表名 modify 字段名 类型alter table t1 modify id int not nullalter table t1 modify id int# 2 添加/删除 unique 唯一索引# alter table 表名 add unique(id)alter table t1 add unique(id)alter table t1 drop index id# 3 添加/删除 primary key# alter table 表名 add primary key(id);alter table t1 add primary key(id);alter table t1 drop primary key;# 4 添加/删除 foreign key 外键 (先通过desc 表 找到外键名字,然后再删)alter table student1 drop foreign key student1_ibfk_1; #删除alter table student1 add foreign key(classid) references class1(id) #添加

如何学习MySQL约束及存储引擎

如何学习MySQL约束及存储引擎

上述就是小编为大家分享的如何学习mysql约束及存储引擎了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网数据库频道。

您可能感兴趣的文档:

--结束END--

本文标题: 如何学习MySQL约束及存储引擎

本文链接: https://lsjlt.com/news/321342.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何学习MySQL约束及存储引擎
    这期内容当中小编将会给大家带来有关如何学习MySQL约束及存储引擎,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1. mysql约束# ### char varchar&nb...
    99+
    2023-06-28
  • MySQL之存储引擎、基本数据类型及约束条件
    一、存储引擎 数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以获得特定的功能。现在许多不同的数...
    99+
    2017-05-24
    MySQL之存储引擎 基本数据类型及约束条件
  • MySQL学习笔记(7):存储引擎
    本文更新于2019-06-23,使用MySQL 5.7,操作系统为Deepin 15.4。 目录InnoDBMyISAMMERGEMEMORYNDB常用存储引擎对比 和大多数数据库不同,插件式存储引擎是MySQL最重要的特性之一。...
    99+
    2020-04-30
    MySQL学习笔记(7):存储引擎
  • MySQL学习笔记(二):MyISAM 存储引擎
    MyISAM 存储引擎MyISAM 基于旧的 (不再可用) ISAM 存储引擎, 但有许多有用的扩展。每个 MyISAM 表都存储在三个文件中的磁盘上。这些文件具有以表名开头的名称, 并具有用于指示文件类型...
    99+
    2024-04-02
  • 数据库学习之九:mysql 存储引擎
    九、mysql 存储引擎 1、课程大纲 存储引擎的介绍 mysql中的存储引擎分类 mysql存储引擎设置 mysql,innodb引擎存储结构 mysql中的事物 mysql中的锁 2、mysql存储引擎介绍 mys...
    99+
    2014-05-09
    数据库学习之九:mysql 存储引擎
  • 解析MySQL的体系架构及学习Mysql存储引擎MyISAM和InnoDB
    mysql体系结构: 由:连接池组件、管理服务和工具组件、sql接口组件、查询分析器组件、优化器组件、 缓冲组件、插件式存储引擎、物理文件组成。mysql是独有的插件式体系结构,各个存储引擎...
    99+
    2024-04-02
  • MySQL学习(七):Innodb存储引擎索引的实现原理
    概述 在数据库当中,索引就跟树的目录一样用来加快数据的查找速度,对于一个SQL查询操作,根据索引快速过滤掉不符合要求的数据并定位到符合要求的数据,从而不需要扫描整个表来获取所需的数据。在innodb存储引擎...
    99+
    2024-04-02
  • mysql如何指定存储引擎
    这篇文章主要介绍了mysql如何指定存储引擎,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。mysql中指定引擎的方法:1、创建表时,可以通过EN...
    99+
    2024-04-02
  • mysql如何查询存储引擎
    这篇“mysql如何查询存储引擎”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“mysql如...
    99+
    2024-04-02
  • 如何将MySQL中的MyISAM存储引擎转换为InnoDB存储引擎?
    要将MyISAM引擎转换为InnoDB,我们可以使用ALTER命令。现在让我们借助引擎MyISAM 创建一个表。 mysql> create table MyISAMToInnoDBDemo -> ( -> id ...
    99+
    2023-10-22
  • MySQL常用存储引擎及特点
    下文主要给大家带来MySQL常用存储引擎及特点,希望这些内容能够带给大家实际用处,这也是我编辑MySQL常用存储引擎及特点这篇文章的主要目的。好了,废话不多说,大家直接看下文吧。    ...
    99+
    2024-04-02
  • mysql学习6:第三章MYSQL 体系结构与存储引擎
    1.   第三章MYSQL 体系结构与存储引擎 1.1.   mysql体系结构 体系结构分为两大层: l   mysql server层:...
    99+
    2024-04-02
  • 什么是存储引擎以及如何查看MySQL安装支持的存储引擎列表?
    它可以被定义为数据库管理系统(DBMS)用来处理不同的SQL操作(如创建、读取、更新和删除数据库中的数据)的软件组件。换句话说,它被DBMS用来管理数据库中的信息。最常用的存储引擎是InnoDB,它也是MySQL5.5及更高版本的默认存储引...
    99+
    2023-10-22
  • 如何查询mysql的存储引擎
    这篇文章主要讲解了“如何查询mysql的存储引擎”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何查询mysql的存储引擎”吧! ...
    99+
    2024-04-02
  • MySQL存储引擎的介绍及使用
    本篇内容介绍了“MySQL存储引擎的介绍及使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、MyISAM存储引擎缺点:不支持事务最小粒度...
    99+
    2023-06-20
  • MySQL之存储引擎使用及说明
    目录一、mysql存储引擎概述1.1 存储引擎1.2 mysql支持的存储引擎二、各种存储引擎的特性三、各种搜索引擎介绍四、存储引擎相关sql语句五、mysql的工作流程总结一、my...
    99+
    2023-02-10
    MySQL存储引擎 存储引擎 MySQL存储
  • Mysql中如何使用MERGE存储引擎
    本篇文章为大家展示了Mysql中如何使用MERGE存储引擎,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。MERGE 存储引擎把一组 MyISAM 数据表当做一个逻辑...
    99+
    2024-04-02
  • mysql如何修改存储引擎为innodb
    这篇文章主要介绍“mysql如何修改存储引擎为innodb”,在日常操作中,相信很多人在mysql如何修改存储引擎为innodb问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”...
    99+
    2024-04-02
  • mysql如何查看表的存储引擎
    可以使用以下语句来查看MySQL表的存储引擎:```sqlSHOW TABLE STATUS LIKE 'table_name';`...
    99+
    2023-08-31
    mysql
  • 如何更改MySQL表的存储引擎?
    MySQL ALTER TABLE 语句可以更改表的存储引擎,如下 -mysql> ALTER TABLE Student ENGINE = 'InnoDB'; Query OK, 0 rows affected (0...
    99+
    2023-10-22
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作