zoukankan      html  css  js  c++  java
  • 建表关系

    1. 图书与出版社 一对多关系 图书是多 出版社是一

    			一个出版社能否对应多本图书 可以
    			一本图书能否对应多个出版社 不可以 版权问题
    			规律1:
    				有一个可以就是一对多
    				有两个可以就是多对多
    				两个都不可以,要么没关系,要么就是一对一
    			规律2:
    				一对多的情况下 外键字段建在多的一方
    				多对多的情况下 无需考虑 因为单独建一张表 里面放两个外键字段 分别关联两张表
    				一对一的情况下 建在任何一方都可以 推荐建在查询频率比较高的那张表中
    				
    		建立表与表之间的硬性关系,在mysql中建立表关系统一用foreign key关键字
    			1. 必须先建被关联表
    			2. 插入数据的时候 应该先插被关联表的数据 这样才合理 
    			3. 级联更新 级联删除
    			
    		auto_increment只能修饰被设置成key的字段
    			key:
    				unique  递增肯定不唯一 所以可以用在unique
    				primary key 同上
    				外键不考虑
    		# 图书与出版社 
    			# 多是图书为关联表 一是出版社为被关联表
    			# 建表的时候先建被关联表 再建关联表
    			# 插入数据的时候先插被关联表 才合理
    			# 外键字段建在多的一方(外键关联的必须是另一张表的主键或唯一键)
    			# 思考每张表有什么字段名
    		create table publish(
    			id int not null unique auto_increment,
    			name varchar(32),
    			addr varchar(32)
    		);
    		create table book(
    			id int primary key auto_increment,
    			title char(32),
    			price char(32),
    			# 创建外键字段  外键字段通常是和另一张表id字段关联 起名字尽量
    			publish_id int unique,
    			# 关联的必须是主键或唯一键  references后写publish_id是错误的
    			foreign key(publish_id) references publish(id)  
    			on update cascade  # 同步更新
    			on delete cascade  # 同步删除
    		);
    		# 插入表数据 
    		insert into publish(name,addr) values
    		('电子工业出版社','天津'),
    		('北京出版社','北京'),
    		('上海出版社','上海'),
    		('航天出版社','酒泉')
    		;
    		
    		# 再插关联表
    		insert into book(title,price) values
    		('MySQL必知必会',67),
    		('python从入门到放弃','56'),
    		('带你玩转Linux','89')
    		;
    					mysql> select * from book;
    		+----+--------------------------+-------+------------+
    		| id | title                    | price | publish_id |
    		+----+--------------------------+-------+------------+
    		|  1 | MySQL必知必会            | 67    |       NULL |
    		|  2 | python从入门到放弃       | 56    |       NULL |
    		|  3 | 带你玩转Linux            | 89    |       NULL |
    		+----+--------------------------+-------+------------+
    					mysql> select * from publish;
    		+----+-----------------------+--------+
    		| id | name                  | addr   |
    		+----+-----------------------+--------+
    		|  1 | 电子工业出版社        | 天津   |
    		|  2 | 北京出版社            | 北京   |
    		|  3 | 上海出版社            | 上海   |
    		|  4 | 航天出版社            | 酒泉   |
    		+----+-----------------------+--------+			
    								
    								
    	#2.	图书与作者 多对多关系
    			一个作者能否对应多本图书 可以
    			一本图书能否对应多个作者 可以
    		create table book(
    			id int not null unique auto_increment,
    			title varchar(32),
    			price varchar(32)  # 千万不要加英文逗号
    		);	
    		create table author(
    			id int primary key auto_increment,
    			name char(32),
    			age int            # 千万不要加都英文逗号
    		);
    		# 外键字段建在第三张表
    		create table book2author(
    			id int primary key auto_increment,
    			book_id int,
    			foreign key(book_id) references book(id)
    			on update cascade
    			on delete cascade,  # 千万不要少英文逗号
    			author_id int,
    			foreign key(author_id) references author(id)
    			on update cascade
    			on delete cascade
    		);
    		insert into book(title,price) values('傲慢与偏见',89),('围城',56);  # 1,2
    		insert into author(name,age) values('简奥斯丁',28),('钱钟书',44),('歪果仁',38);  # 1,2,3
    		insert into book2author(book_id,author_id) values(1,1),(1,2),(1,3),(2,1),(2,2),(2,3); # 错误
    		 
    	    #book表
    		+----+-----------------+-------+    # 级联更新 级联删除的理解
    		| id | title           | price |    # 删除book表不会对作者表产生影响,但会对第三张表有影响
    		+----+-----------------+-------+    # 删作者表第三张表会动(因为作者表和第三张表是关联的)  book表不会动
    		|  1 | 傲慢与偏见      | 89    |
    		|  2 | 围城            | 56    |
    		+----+-----------------+-------+
    		#作者表		
    		+----+--------------+------+
    		| id | name         | age  |
    		+----+--------------+------+
    		|  1 | 简奥斯丁     |   28 |
    		|  2 | 钱钟书       |   44 |
    		|  3 | 歪果仁       |   38 |
    		+----+--------------+------+	
    		#第三张表
    		+----+---------+-----------+
    		| id | book_id | author_id |
    		+----+---------+-----------+
    		|  1 |       1 |         1 |
    		|  2 |       1 |         3 |
    		|  3 |       2 |         2 |
    		+----+---------+-----------+
    					
    	#3.	一对一
    		1. 将用户表拆分成 用户表与用户详情表
    		2. 客户与学生
    		
    		id		name	age		phone	addr	hobby	is_dog
    		1		Jason	18		110		安徽	read	 1
    		2		tank	38		120		湛江	生蚝	 1
    		3		egon	85		130		山东	bb		 1
    		4		Jerry	28		140		云南	baby	 0
    		-------------------------------------------------------
    		id		name	age	 ┃	phone	addr	hobby	is_dog
    		1		Jason	18	 ┃	110		安徽	read	 1
    		2		tank	38	 ┃	120		湛江	生蚝	 1
    		3		egon	85	 ┃	130		山东	bb		 1
    		4		Jerry	28	 ┃	140		云南	baby	 0
    		-------------------------------------------------------
    		
    		
    		复制表
    			create table xxx from select * from  tmp;  
    			会创建出一张xxx表 并且表中的数据跟tmp是一模一样的
    			但是没有键关系,只拷贝数据和表结构
    		
    		表操作
    			first
    			after
    			change
  • 相关阅读:
    yii2.0安装redis
    composer
    Windows下安装redis
    Windows下启动redis闪退
    svn的使用及安装
    mysql主从
    linux下远程链接mysql报错1045
    git命令行克隆报错fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.
    git克隆报错128
    yii phpexcel <转>
  • 原文地址:https://www.cnblogs.com/yuelinyan/p/12008552.html
Copyright © 2011-2022 走看看