mysql续
2018-06-17 23:59:03来源:未知 阅读 ()
接上篇博客,写完以后看了看,还是觉的写的太简单,就算是自己复习都不够,所以再补充一些
1.创建多表关联
需求:图书管理系统,创建几张表,包含书籍,出版社,作者,作者详细信息等内容
分析:
(1)图书只有一个出版社,出版社可以出版很多书,多对一关系
(2)图书可以有多个作者,一个作者也可以写多本书,多对多关系
(3)作者的详细信息表,与作者一对一关系
(4)多对一关系,用外键;一对一关系,在外键上加唯一约束;多对多关系,用第三张表存储关系
(5)需要建立五张表,书籍,出版社,作者,作者详细信息,图书与作者关系表
代码贴到这,用pycharm书写,推荐mysql命令大写
1 create database book_manage_system character set utf8; 2 3 4 5 --创建出版社表,字段有id,name,city 6 create table publish(id int primary key auto_increment, 7 name varchar(20), 8 city varchar(20)); 9 10 11 --创建书籍表,书籍表是出版社表的子表,字段有id,name,price,publish_id 12 create table book (id int primary key auto_increment, 13 name varchar(20), 14 price double(6,2), 15 publish_id int, 16 foreign key (publish_id) references publish(id) 17 --增加外键,与出版社表和作者表建立关系 18 ); 19 20 21 --创建作者详细信息表,字段有ID,name,age,city,phone_num,email 22 create table auth_detail (id int primary key auto_increment, 23 name varchar(20), 24 age int, 25 city varchar(20), 26 phone_num varchar(11), 27 email varchar(30)); 28 29 --创建作者表,为作者详细信息表的子表,字段有ID,name,auth_detail_id 30 create table author(id int primary key auto_increment, 31 name varchar(20), 32 auth_detail_id int unique, 33 foreign key (auth_detail_id) references auth_detail(id) 34 --增加外键,与作者详细信息表建立联系,一对一关系,唯一性约束 35 ); 36 37 38 39 --创建作者与书籍的关系表,字段有auth_id,book_id 40 create table book_to_auth(id int primary key auto_increment, 41 auth_id int, 42 foreign key (auth_id) references author(id), 43 book_id int, 44 foreign key (book_id) references book(id)); 45 --创建外键,作者信息与书籍信息联系
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,下次写数据库的时候一块说
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:JDBC事务
- MySQL replace函数怎么替换字符串语句 2020-03-09
- PHP访问MySQL查询超时怎么办 2020-03-09
- mysql登录时闪退 2020-02-27
- MySQL出现1067错误号 2020-02-27
- mysql7.x如何单独安装mysql 2020-02-27
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash