# ### 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. SAP 固定资产添加新类别

    需求:添加资产新类别(LEASE) 步骤: 1.添加 Account determination ①SPRO->Financial Accounting(New)->Asset Accou ...

  2. 中文版 Apple 官方 Swift 教程《The Swift Programming Language》

    简介 欢迎使用 Swift 关于 Swift 版本兼容性 Swift 初见 Swift 版本历史记录 Swift 教程 基础部分 基本运算符 字符串和字符 集合类型 控制流 函数 闭包 枚举 类和结构 ...

  3. Android项目模块化/组件化开发(非原创)

    文章大纲 一.项目模块化初步介绍二.项目模块化的两种模式与比较三.大型项目模块化的演进四.项目模块化总结五.参考文章   一.项目模块化初步介绍 1. 前言 在Android开发中,随着项目的不断扩展 ...

  4. Mysql存储过程--大于十分钟执行

    --存储过程 DELIMITER | DROP PROCEDURE IF EXISTS update_tatus | CREATE PROCEDURE update_status() BEGIN mi ...

  5. Druid-代码段-5-1

    所属文章:池化技术(一)Druid是如何管理数据库连接的? 本代码段对应主流程5,连接的回收: //DruidPooledConnection类的close方法 @Override public vo ...

  6. TensorFlow从1到2(十三)图片风格迁移

    风格迁移 <从锅炉工到AI专家(8)>中我们介绍了一个"图片风格迁移"的例子.因为所引用的作品中使用了TensorFlow 1.x的代码,算法也相对复杂,所以文中没有仔 ...

  7. go语言设计模式之factory

    factory.go package factory import ( "errors" "fmt" ) const ( Cash = 1 DebitCard ...

  8. MongoDB学习笔记(二、MongoDB查询)

    目录: MongoDB数据类型 MongoDB新增语法 MongoDB查询语法 MongoDB查询选择器 MongoDB关联查询 MongoDB数据类型: MongoDB新增语法: 语法:db.col ...

  9. 发送post请求的接口

    一.简介 所有系统或者软件.网站都是从登录开始,所以首先介绍的第一个post请求是登录. 二.help函数 学习一个新的模块捷径,直接用help()函数查看相关注释和案例内容 for example: ...

  10. AtCoder Grand Contest 039

    Preface 我发现我现在打AT真的是只会D-Before-- E,F都是抄曲明姐姐的,然后D还是几何画板猜结论做的(证明都是陈指导想的) 看来再这样下去就真的要退役了啊233 A - Connec ...