mysql续
接上篇博客,写完以后看了看,还是觉的写的太简单,就算是自己复习都不够,所以再补充一些
1.创建多表关联
需求:图书管理系统,创建几张表,包含书籍,出版社,作者,作者详细信息等内容
分析:
(1)图书只有一个出版社,出版社可以出版很多书,多对一关系
(2)图书可以有多个作者,一个作者也可以写多本书,多对多关系
(3)作者的详细信息表,与作者一对一关系
(4)多对一关系,用外键;一对一关系,在外键上加唯一约束;多对多关系,用第三张表存储关系
(5)需要建立五张表,书籍,出版社,作者,作者详细信息,图书与作者关系表
代码贴到这,用pycharm书写,推荐mysql命令大写
create database book_manage_system character set utf8; --创建出版社表,字段有id,name,city
create table publish(id int primary key auto_increment,
name varchar(20),
city varchar(20)); --创建书籍表,书籍表是出版社表的子表,字段有id,name,price,publish_id
create table book (id int primary key auto_increment,
name varchar(20),
price double(6,2),
publish_id int,
foreign key (publish_id) references publish(id)
--增加外键,与出版社表和作者表建立关系
); --创建作者详细信息表,字段有ID,name,age,city,phone_num,email
create table auth_detail (id int primary key auto_increment,
name varchar(20),
age int,
city varchar(20),
phone_num varchar(11),
email varchar(30)); --创建作者表,为作者详细信息表的子表,字段有ID,name,auth_detail_id
create table author(id int primary key auto_increment,
name varchar(20),
auth_detail_id int unique,
foreign key (auth_detail_id) references auth_detail(id)
--增加外键,与作者详细信息表建立联系,一对一关系,唯一性约束
); --创建作者与书籍的关系表,字段有auth_id,book_id
create table book_to_auth(id int primary key auto_increment,
auth_id int,
foreign key (auth_id) references author(id),
book_id int,
foreign key (book_id) references book(id));
--创建外键,作者信息与书籍信息联系
2.用pycharm来编写mysql语句
虽然mysql的命令我们都应该熟记于心,但是当我们已经记住后,从开发效率方面考虑,我们就可以使用一些文本编辑器来帮助我们写这些语句了,下面说一下配置pycharm的流程
(1)
新建一个sql文件,打开pycharm右边的database
(2)
(3)
(4)
ok,这就可以了,妈妈再也不用担心我忘记大写了,效率也是提升了不知多少倍
但是需要注意,这只能操作一个数据库,想切换数据库的话,要重新走一遍刚才的流程,把想要操作的数据库添加进来就行了
3.联合主键
上一篇博客写了设置主键可以用primary key,也可以用not null unique
这里要详细说一下,
- 如果表中只有一个非空且唯一约束,自动就会识别为主键
- 非空且唯一约束并非只能设置一次,但是第一个设置这个约束的被识别为主键
- 每张表只能有一个主键,但是主键并不一定在一个字段上,即联合主键
CREATE TABLE union_primary_key (id int,
name VARCHAR(20),
age int,
PRIMARY KEY (id,name))
看一下表结构,

看到没,两个主键了,这就叫联合主键。
应用的话,可以参照我们最开始设计的那个图书管理系统,在我们创建图书和作者关系的表的时候,图书id和作者id理论上都应该是必须同时有值且不能重复,就可以把他俩设置成联合主键
4.存储引擎
不知你有没有注意过,当我们用create命令查看表的创建信息时,会得到类似这样一些数据
| book | CREATE TABLE `book` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) DEFAULT NULL,
`price` double(6,2) DEFAULT NULL,
`publish_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `publish_id` (`publish_id`),
CONSTRAINT `book_ibfk_1` FOREIGN KEY (`publish_id`) REFERENCES `publish` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
最下边有一个 ENGINE=InnoDB
这就是存储引擎,存储引擎的作用是存储数据,为数据建立索引,查询数据
在MySQL中提供了多种存储引擎,有innodb,memory,blackhole等
innodb是我们最常用的,memory是基于内存的存储机制,不会长久保存,而blackhole叫黑洞引擎,所有丢到里面的数据都会消失,我至今也没理解是干什么用的,据说是为了测试。而我们最关心 的应该是innodb。外键这个东西就是innodb独有的。
我们可以通过命令SHOW ENGINES查看引擎(tips:在命令提示行中是显示不全的,可以在命令后面加一个\G,就可以正常显示了)
以innodb 创建一个表之后,就会有分别以opt,frm,ibd为后缀的三个文件创建,不同的引擎,创建的文件也不一样
5.索引(index或key)
索引在mysql中也叫做“键”,是存储引擎用于快速找到记录的一种数据结构。当表中的数据量很大时,索引能轻易的将查询性能提高好几个数量级。虽然在创建索引时很费时间,但是一旦创建好,就能大大提高查询速度。
创建索引的方式:
(1)创建普通索引
CREATE TABLE student(
id INT,
name VARCHAR(20),
INDEX index_name(name)
);
(2)创建唯一索引
CREATE TABLE student(
id INT,
name VARCHAR(20),
UNIQUE INDEX index_name(name)
);
(3)创建全文索引
CREATE TABLE student(
id INT,
name VARCHAR(20),
FULLTEXT INDEX index_name(name)
);
(4)创建多列索引
CREATE TABLE student(
id INT,
name VARCHAR(20),
INDEX index_name(name,id)
);
(5)在已存在的表上创建索引
# 1.create方法
CREATE INDEX 索引名
ON 表名 (字段名 ) # 2.alter方法
ALTER TABLE 表名 ADD INDEX
索引名 (字段名)
删除索引:
DROP INDEX 索引名 on 表名
6.还有pymsql和orm,下次写数据库的时候一块说
mysql续的更多相关文章
- 数据库(MSSQLServer,Oracle,DB2,MySql)常见语句以及问题(续1之拼接字符串)
上一篇文章http://www.cnblogs.com/valiant1882331/p/4056403.html写的太长了,所以就换了一篇,链接上一节继续 字符串的拼接 MySql中可以使用&quo ...
- 在Node.js使用Promise的方式操作Mysql(续)
在之后的开发中,为了做一些事务开发,我把mysql的连接代码从之前的query函数中分离出来了,直接使用原生的方法进行操作,但发现还是有点问题 原因是原生的node-mysql采用了回调函数的方式,同 ...
- MySql的基本架构续
[数据拆分后引入的问题] 数据水平拆分引入的问题主要是只能通过sharding key来读写操作,例如以userid为sharding key的切分例子,读userid的详细信息时,一定需要先知道us ...
- mysql索引优化续
(1)索引类型: Btree索引:抽象的可以理解为“排好序的”快速查找结构myisam,innodb中默认使用Btree索引 hash索引:hash索引计算速度非常的快,但数据是随机放置的,无法对范围 ...
- mysql学习笔记1---mysql ERROR 1045 (28000): 错误解决办法(续:深入分析)
在命令行输入mysql -u root –p,输入密码,或通过工具连接数据库时,经常出现下面的错误信息,详细该错误信息很多人在使用MySQL时都遇到过. ERROR 1045 (28000): Acc ...
- MySQL高可用之MGR安装测试(续)
Preface I've implemented the Group Replication with three servers yesterday,What a shame it ...
- MySQL高可用之PXC安装部署(续)
Preface Yesterday I implemented a three-nodes PXC,but there were some errors when proceeding ...
- mysql操作篇续
# ### part1. 数据类型 - 时间date YYYY-MM-DD 年月日 (纪念日)time HH:MM:SS 时分秒 (体育竞赛)year YYYY 年份值 (酒的年份,82年拉菲)dat ...
- MySQL运维中的Tips--持续更新
1.into outfile 生成sql:一般都是生成文本或者其他形式的文件,现在需要生成sql形式的文件.配置文件加secure_file_priv=''select concat('insert ...
随机推荐
- ping 不通。无法访问目标主机
台式机 使用无线网卡 又登录了VPN 有时候访问不了局域网内的主机 解决方案 添加路由即可 window+R 打开运行 输入cmd 然后输入 route add 10.16.1.89 10.13 ...
- 苹果电脑macbook怎样强制关闭软件
尝试快捷键Command+Q 选择当前处于界面最前端的应用,同时按住Command+Q退出程序,并不代表强制退出应用,主要用于一些假死的应用. 2 通过快捷键Command+option+Shift+ ...
- kubernetes概念
kubernetes blog cluster cluster是计算.存储.和网络资源的集合,kubernetes利用这些资源运行各种基于容器的应用. master master是cluster的大脑 ...
- ios retain copy assign相关
assign: 简单赋值,不更改索引计数copy: 建立一个索引计数为1的对象,然后释放旧对象retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1 Copy其实是建立了一 ...
- x220 OS X 10.10.4安装
变色龙安装过程: 1.使用磁盘助手将按照盘写入独立的磁盘分区(AF格式,就是Apple的HPS格式): 2.安装启动时,用-v -f -x参数,分别为显示信息.重新build系统驱动.安全模式: 3. ...
- 【Office_Word】Word排版
文档排版的步骤: step1.先设置正文的样式 step2.再设置各级标题的样式 step3.最后在"多级列表"里设置各级标题编号 [注]最好按照这三步的顺序来排版,否则将会导致正 ...
- Linux-实现双主模型的nginx的高可用
实现双主模型的ngnix高可用(一) 准备:主机7台 client: 172.18.x.x 调度器:keepalived+nginx 带172.18.x.x/16 网卡 192.168.234.27 ...
- Python的第3堂课
20181119笔记 一.内存管理相关 ①Cpython解释器的垃圾回收机制 什么是垃圾:当一个值没有被绑定任何变量名(即该值的引用计数为零时),该值就是垃圾. 垃圾回收是收回值占用的内存空间. 引用 ...
- (转)git clone: error: RPC failed; result=18, HTTP code = 200 解决办法
git clone: error: RPC failed; result=18, HTTP code = 200 解决办法 分类: git2013-09-01 17:03 10753人阅读 评论(2) ...
- 00032_ArrayList集合的遍历
1.通过集合遍历,得到集合中每个元素,这是集合中最常见的操作 2.集合的遍历与数组的遍历很像,都是通过索引的方式 public class ArrayListDemo02 { public stati ...