# ### part1. 数据类型 - 时间
date YYYY-MM-DD 年月日 (纪念日)
time HH:MM:SS 时分秒 (体育竞赛)
year YYYY 年份值 (酒的年份,82年拉菲)
datetime YYYY-MM-DD HH:MM:SS 年月日 时分秒 (登录时间,下单时间)

create table t5(d date,t time , y year , dt datetime);
insert into t5 values("2019-11-21","09:30:30","2019","2019-11-21 09:30:30")
insert into t5 values(now(),now(),now(),now())

timestamp YYYYMMDDHHMMSS 自动更新时间(不需要手动写入,修改数据时候,自动更新,记录最后一次修改时间)
create table t6(dt datetime , ts timestamp);
insert into t6 values(null,null)
insert into t6 values(20191121093728,20380101050505)
insert into t6 values(20191121093728,20390101050505) error # 时间戳最多到2038年的某一天

# mysql 内置函数
now 获取当前时间
concat 拼接各个参数
user() 获取当前登录的用户

# ### part2 约束

# 关于约束的添加和删除
# 1 添加/删除 约束 not null
#alter table 表名 modify 字段名 类型
alter table t1 modify id int not null
alter 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 外键
alter table student1 drop foreign key student1_ibfk_1; #删除
alter table student1 add foreign key(classid) references class1(id) #添加

# 约束 : 对插入的数据进行限制,不满足约束的条件就直接报错
unsigned 无符号
not null 不为空
default 设置默认值
unique 唯一约束,数据唯一不能重复
primary key 主键,唯一不为空的值,表达这条数据的唯一性
auto_increment 自增加一,(一般针对于主键 或者 unique 进行自增)
zerofill 零填充 , int(6) , 位数不够6为,拿0来填充
foreign key 外键,把多张表通过一个字段联合在一起

# unsigned 无符号
create table t7(id int unsigned)
insert into t7 values(5)
insert into t7 values(-1000) error

# not null 不为空
create table t8(id int not null , name varchar(255));
insert into t8 values(1,"tianqi")
insert into t8 values(null,"tianqi") error

# default 设置默认值
create table t9(id int not null , name varchar(255) default "常远" );
insert into t9 values(1,null)
insert into t9(id) values(2)

# unique 唯一约束,数据唯一不能重复 [默认创建索引,通过索引可以加快查询速度,相当于字典的目录]
"""默认允许插入多个null空值 UNI """
create table t10(id int unique , name char(10) default "张龙");
insert into t10 values(1,null)
insert into t10(id) values(1) error
insert into t10(id) values(2)
insert into t10(id) values(null)
insert into t10(id) values(null)

# primary key 主键,唯一不为空的值,表达这条数据的唯一性
"""在一个表中,只能有一个字段标记成主键,一般标记id"""
# 原型 PRI
create table t11(id int not null unique ,name char(15) default "周永玲")
insert into t11 values(1,"你好")
insert into t11 values(null,"你好")

# primary key 创建主键
create table t12(id int primary key , name char(15) default "周永玲")
insert into t12 values(1,"你好")

# 两者同时存在 , 优先显示primary key 作为主键,
create table t12_2(id int primary key , name char(15) not null unique);

# 一个表只能让一个字段变成主键
create table t12_3(id int primary key , name char(15) primary key); error

# auto_increment 自增加一,(一般针对于主键 或者 unique 进行自增)
create table t13(id int primary key auto_increment , name char(15) default "尹家平");
insert into t13 values(null,"李四")
insert into t13 values(100,"张三")
insert into t13(id) values(null)
insert into t13(name) values("王二麻子")
# 使用默认值进行插入;
insert into t13 values();

# zerofill 零填充 , int(6) , 位数不够6为,拿0来填充
create table ceshi111(id int(6) zerofill );
insert into ceshi111 values(2)
insert into ceshi111 values(222222222)

# 删除:
# (1) delete from 表 where 条件 (删除数据,保留id)
delete from t13 where id = 1
delete from t13 ;
insert into t13(id,name) values(null,"王文")

# (2) truncate table 表名 (删除数据,重置id ,重置表)
truncate table t13
insert into t13(id,name) values(null,"王文")

# ### part3
# 1.联合唯一约束 : unique(字段1,字段2,..... ) 把多个字段拼在一起表达一个唯一的数据
# (1) 联合唯一索引 (在非空的情况,显示为主键 PRI)
create table t1_server(id int , server_name char(10) not null,ip char(15) not null , port int not null , unique(ip,port));
insert into t1_server values(1,"aa","192.168.111.15",3306);
insert into t1_server values(1,"aa","192.168.111.15",3307);
insert into t1_server values(1,"aa","192.168.111.16",3306);
insert into t1_server values(1,"aa",null,null); error

# (2) 联合唯一索引 (在为空的情况,显示索引 MUL 代表普通索引)
create table t2_server(id int , server_name char(10) not null,ip char(15) , port int , unique(ip,port));
insert into t2_server values(1,"aa","192.168.111.15",3306);
insert into t2_server values(1,"aa","192.168.111.15",3306); error
insert into t2_server values(1,"aa","192.168.111.17",3306);
insert into t2_server values(1,"aa",null,null); # 允许插入多个控制,推荐使用第一种

| id | server_name | ip | port |
+------+-------------+----------------+------+
| 1 | aa | 192.168.111.15 | 3306 |
| 1 | aa | 192.168.111.17 | 3306 |
| 1 | aa | NULL | NULL |
| 1 | aa | NULL | NULL |

# (3) 联合唯一索引 和 主键 是否可以同时存在呢?可以同时存在 primary key 是真正的主键,联合唯一索引恢复成MUL索引状态
# 方法一
create table t3_server(id int , server_name char(10) not null,ip char(15) not null , port int not null , unique(ip,port))
alter table t3_server add primary key(id);

# 方法二
create table t4_server(id int primary key , server_name char(10) not null,ip char(15) not null , port int not null , unique(ip,port))

# (了解) unique(ip,port) 联合唯一索引 , primary key(ip,port) 联合唯一主键 用法一样,区别在于后者不能在继续添加主键了

# foreign key 外键,把多张表通过一个字段联合在一起
"""外键的要求: 主动关联的这张表设置外键,要求被关联的表字段必须具有唯一属性 (unique 或者 primary key)"""
student:
id name age classname .... address
1 changyuan 81 python8 世外桃源 ...
2 zhouyongling 7 python8 世外桃源 ...
3 wangwen 18 python9 富丽华冠冕堂皇大酒店 ...

# 为了避免出现过多的字段,可以采取分表的形式,来减少冗余数据,提升查询的效率;
student1:
id name age classid
1 changyuan 81 1
2 zhouyongling 7 1
3 wangwen 18 2

class1:
id classname
1 python8
2 python9

# 创建class1表
create table class1(id int , classname varchar(255));

# 设置classid 为主键或者唯一索引
alter table class1 add unique(id);

# 创建student1表
create table student1(
id int primary key auto_increment,
name varchar(255) not null,
age int not null,
classid int,
foreign key(classid) references class1(id)
);

# 插入数据
insert into class1 values(1,"python8")
insert into class1 values(2,"python9")
insert into student1 values(null,"changyuan",81,2);
insert into student1 values(null,"zhouyongling",7,1);
insert into student1 values(null,"wangwen",7,2);

# 删除class1 如果这条数据在多张表中被使用,直接删除会报错,因为有外键关联
delete from class1 where id = 1
# 把关联的数据删掉之后,才可以
delete from student1 where id = 2;
delete from class1 where id = 1;

# 联级删除 联级更新 (谨慎操作)
"""
联级删除 on delete cascade
联级更新 on update cascade
"""

# 创建class2
create table class2(id int unique , classname varchar(255));
# 创建student2
create table student2(
id int primary key auto_increment,
name varchar(255) not null,
age int not null,
classid int,
foreign key(classid) references class2(id) on delete cascade on update cascade
);

# 插入数据
insert into class2 values(1,"python8");
insert into class2 values(2,"python9");
insert into student2 values(null,"changyuan",81,2);
insert into student2 values(null,"zhouyongling",7,1);
insert into student2 values(null,"wangwen",18,2);

# 联级删除class2数据
delete from class2 where id = 2
# 联级更新
update class2 set id = 100 where classname = "python8"

# 表和表之间的关系
(1) 一对一 表1:id m1 m2 m3 m4(表2的id数据) 表2: id m5 m6 m7
(2) 一对多 或多对一 : 1个班级 可以对应多个学生 把学生作为主动关联的表,其中设置一个外键,去关联那个唯一的数据
(3) 多对多 : 一个学生可以对应多个学科,一个学科可以多个学生学习,
一本书可以对应多个作者,一个作者可以写多本书

xueke (表1)
id name
1 math
2 english
3 huaxue

student (表2)
id name
1 wangwen
2 changyuan
3 zhouyongling

relation (表3) 把 xid 和 sid 设置成外键 关联xueke 的 id 和 student 的 id

xid sid
1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2
3 3

# 存储引擎 : 存储数据的方法
"""
show engines
"""
# 概念理解:
表级锁: 如果有人修改这张表,就直接上锁,其他人无法修改,速度慢,不能并发 (MyISAM)
行级锁: 如果有人修改这个表中的一个记录,当前这条记录会上锁,其他数据可以进行修改,允许更大的并发和更快的速度 (InnoDB)
事务处理 : 如果执行sql语句,在全部执行成功之后,在选择提交,如果操作时,有一条失败,直接回滚,恢复成初始状态
begin : 开启事务
commit: 提交数据
rollback:回滚数据

# 存储引擎:
MyISAM : 是5.6版本之前,默认的存储引擎,支持表级锁
InnoDB : 是5.6版本之后,默认的存储引擎,支持行级锁,能够抗住更大的并发
BLACKHOLE : 黑洞,用来同步数据的,场景发生在服务器集群,用在:主从数据库 [主:查询 ,从:增删改]
MEMORY : 把数据存储在内存当中,也可以作为缓存

create table myisam1(id int , name char(10)) engine = myisam;
myisam1.frm 表结构
myisam1.MYD 表数据
myisam1.MYI 表索引

create table innodb1(id int , name char(10)) engine = innodb;
innodb1.frm 表结构
innodb1.ibd 表数据 表索引

create table memory1(id int , name char(10)) engine = memory;
memory1.frm 只有一个表结构,数据在内存中

create table blackhole1(id int , name char(10)) engine = blackhole;
blackhole1.frm

mysql操作篇续的更多相关文章

  1. Mysql优化(出自官方文档) - 第十二篇(优化锁操作篇)

    Mysql优化(出自官方文档) - 第十二篇(优化锁操作篇) 目录 Mysql优化(出自官方文档) - 第十二篇(优化锁操作篇) 1 Internal Locking Methods Row-Leve ...

  2. 第一篇:Mysql操作初级

    Mysql操作初级   Mysql操作初级 本节内容 数据库概述 数据库安装 数据库操作 数据表操作 表内容操作 1.数据库概述 数据库管理系统叫做DBMS 1.什么是数据库 ? 答:数据的仓库,如: ...

  3. Python 第九篇:队列Queue、生产者消费者模型、(IO/异步IP/Select/Poll/Epool)、Mysql操作

    Mysql操作: grant select,insert,update,delete on *.* to root@"%" Identified by "123456&q ...

  4. 部署Django到云服务器(centos+nginx+mysql+uwsgi+python3)【操作篇(2)】

    接上篇操作篇(1):https://blog.csdn.net/jacky_zhuyuanlu/article/details/82880612 (七)创建Django项目 (1)建立文件夹,存放网站 ...

  5. 转摘 MySQL扫盲篇

    一下文章摘自:http://www.jellythink.com/archives/636 MySQL扫盲篇 2014-09-15 分类:MySQL / 数据库 阅读(1412) 评论(1)  为什么 ...

  6. Linux配置mysql (centos配置java环境 mysql配置篇 总结四)

    ♣安装的几种方法和比较 ♣配置yum源 ♣安装mysql ♣启动mysql ♣修改密码 ♣导入.sql文件 ♣缓存设置 ♣允许远程登录(navicat) ♣配置编码为utf8  1.关于Linux系统 ...

  7. 第二章 MySQL入门篇

    第一章 MySQL入门篇 一.MySql简介 简言: 和SQL Server数据库相同,MySQl也是一个关系型数据库管理系统.由瑞典的MySQL AB公司开发,2008年被SUN公司收购,2009年 ...

  8. mysql 架构篇系列 3 复制运行状态监控与选项参数说明

    一. 概述 在上一篇中,搭建了一主一从的复制架构,这篇通过一些诊断方法来了解复制的运行状态和一些选项参数说明.上次mysql主从服务关机,今天在打开mysql服务,出现了错误信息. 1.首先 启动主从 ...

  9. 【目录】mysql 架构篇系列

    随笔分类 - mysql 架构篇系列 mysql 架构篇系列 4 复制架构一主一从搭建(半同步复制) 摘要: 一.概述 在mysql 5.5之前,mysql 的复制是异步操作,主库和从库的数据之间存在 ...

随机推荐

  1. Prism_Commanding(2)

    Commanding 除了提供对要在视图中显示或编辑的数据的访问之外,ViewModel还可能定义可由用户执行的一个或多个动作或操作.用户可以通过UI执行的动作或操作通常被定义为命令.命令提供了一种方 ...

  2. flutter 侧滑删除+侧滑显示删除按钮

    1.侧滑删除 1.1.Dismissible组件 2.侧滑显示删除按钮 2.1.手势监听水平滑动 ------------------------------------分割线------------ ...

  3. 解决Xcode10 Library not loaded: /usr/lib/libstdc++.6造成的crash及报错

    关键字1:dyld: Library not loaded: /usr/lib/libstdc++.6.dylib   Referenced from: 关键字2:Reason: no suitabl ...

  4. oracle12.2RAC之OGG安装配置(二)

    本机到本机的配置: 源端       10.1.83.144:1521/SIBP_GSDY    HNSIB_GSDY目标端   10.1.83.144:1521/SIBP_GS         HN ...

  5. [Go] go等待读取最后一行的数据内容

    这段代码是参照慕课网的视频教程,主要是f.Seek(0, os.SEEK_END)移动到末尾,但是里面有个小问题,当打开的文件被重新清空内容的清空下,就再也不能到读取数据了,比如在开启读取后 echo ...

  6. LeetCode 1255 得分最高的单词集合 Maximum Score Words Formed by Letters

    地址 https://leetcode-cn.com/problems/maximum-score-words-formed-by-letters/ 题目描述你将会得到一份单词表 words,一个字母 ...

  7. servlet重点知识总结

    Servlet Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层. ...

  8. 【转】关于web项目中的图片上传、并在前端显示问题(tomcat中配置文件上传虚拟路径)

    一.数据库存储 直接把图片的二进制码存到数据库,可参考blog:http://blog.csdn.net/hope2jiang/article/details/590733 直接存图片在mysql上面 ...

  9. python request获取ip、获取登录设备

    from flask import request 获取ip request.remote_addr 获取登录设备 request.user_agent.string

  10. 【Nginx】Nginx反向代理转发Host设置

    #事故现场: 服务器A(Nginx服务器):192.168.2.126 服务器B(Web服务器):192.168.2.221 服务器A反向代理服务器B,A配置了upstream为: http { up ...