精华内容
下载资源
问答
  • 一、用户模型设计 电商羡慕中用户模型的设计涉及以下几个部分: 以电商平台京东的登录、注册页面... ...由个人后台信息截图可知,用户的实体信息其实很多,不仅仅是当前页面所看到的,如下图: ...二、用户实体属...

    个人博客网:https://wushaopei.github.io/    (你想要这里多有)

    一、用户模型设计

    电商羡慕中用户模型的设计涉及以下几个部分:

                    

    以电商平台京东的登录、注册页面作为例:

        

    用户的基本模块涉及用户的账户名、密码、以及手机号码、所在地等信息。

                 

    由个人后台信息截图可知,用户的实体信息其实很多,不仅仅是当前页面所看到的,如下图:

                    

    二、用户实体属性的CRUD操作的问题分析

    1、当我们确定了需要保存用户的属性后,就需要考虑怎么将属性存到表中了?同时还要考虑保存数据时的一些问题以及优劣性分析!

                 

    在将数据进行保存操作时会出现如下几个问题:

    1、数据插入异常

        PK : 用户登录名

        用户表 :{登录名 ... ... 会员级别,级别积分上限,级别积分下线}

        insert into 用户表(会员级别)values(`青铜`);

    2、数据更新异常

            要修改某一行的值时,不得不修改多行数据

          例:  用户等级: 青铜级 —> 注册会员

                   update 用户表 set 等级= `注册会员` where 等级= `青铜级`

    3、数据删除异常

            删除某一数据时不得不同时删除另一数据

        例:    如何删除用户等级名为青铜的等级

                   delete from 用户表 where 用户等级=`青铜`;

    4、数据存在冗余

    5、数据表过宽,会影响修改表结构的效率

    三、用户实体属性的操作问题的解决方式

    遵守数据库的设计方式:

    •       设计方式是数据库设计的规范
    •       有多种设计范式,如数据库设计第一范式,第二范式和第三范式
    •       数据库设计最低要满足第三范式的要求

    1、第三范式(3NF)的定义

      一个表中的列和其他列之间既不包括部分函数依赖关系,也不包括传递函数依赖关系,那么这个表的设计就符合第三范式。

    2、根据第三范式(3NF)优化拆分用户表

    这里根据范式将第一张表中的会员级别、级别积分上限、级别积分下线进行拆分成一个小表,因为用户的个人信息修改的频率不高,而用户的级别可能随着时间、经验值等的提升而经常变动,单独拆分出来可以避免对冷数据的重复检索、节约IO资源。

                  

    3、根据第三范式设计好的表如下:

    用户登录表(customer_login)

    DROP TABLE IF EXISTS `customer_login`;
    CREATE TABLE `customer_login` (
      `customer_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户ID',
      `login_name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用户登录名',
      `password` char(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'md5加密的密码',
      `user_stats` tinyint(4) NOT NULL DEFAULT '1' COMMENT '用户状态',
      `modified_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',
      PRIMARY KEY (`customer_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=gbk COMMENT='用户登录表';

    用户信息表(customer_inf)

    create table customer.customer_inf(
    	customer_inf_id int unsigned auto_increment not NULL comment '自增主键ID',
      customer_id int unsigned not null comment 'customer_login表的自增ID',
      customer_name varchar(20) not null COMMENT '用户真实姓名',
      identity_card_type TINYINT not null default 1 COMMENT '证件类型:1身份证,2军官证,3护照',
      identity_card_no varchar(20) comment '证件号码',
      mobile_phone int unsigned comment '手机号',
      customer_email varchar(50) COMMENT '邮件',
      gender char(1) comment '性别',
      user_point int not null DEFAULT 0 COMMENT '用户积分',
      register_time TIMESTAMP not null COMMENT '注册事件',
      birthday datetime COMMENT '会员生日',
      customer_level tinyint not null DEFAULT 1 COMMENT '会员级别:1普通会员,2青铜会员,3白银会员,4黄金会员,5钻石会员',
      user_money decimal(8,2) not null default 0.00 COMMENT '用户余额',
      modified_time TIMESTAMP not null DEFAULT CURRENT_TIMESTAMP 
      on update CURRENT_TIMESTAMP COMMENT '最后修改时间',
      primary key pk_customerinfid (customer_inf_id)
    ) engine=innodb comment '用户信息表'
    ;

    用户级别表(customer_level_inf)

    create table customer_level_inf(
    	customer_level TINYINT not null auto_increment COMMENT '会员级别ID',
      level_name varchar(10) not null comment '会员级别名称',
      min_point int unsigned not null default 0 comment '该级别最低积分', 
      max_point int unsigned not null DEFAULT 0 COMMENT '该级别最高积分',
      modified_time TIMESTAMP not null DEFAULT CURRENT_TIMESTAMP  
      on update CURRENT_TIMESTAMP comment '最后修改时间',
      PRIMARY key pk_levelid (customer_level)
    ) engine=innodb comment '用户级别信息表'
    ;

    用户地址表 (customer_addr)

    create table customer_addr (
     customer_addr_id int UNSIGNED auto_increment 
     not null comment '自增主键ID',
     customer_id int UNSIGNED not null COMMENT 'customer_login表的自增ID',
     zip smallint not null comment '邮编',
     province smallint not null comment '地区表中省份的id',
     city  smallint not null comment '地区表中城市的id',
     district smallint not null comment '地区表中的区id',
     address varchar(200) not null comment '具体的地址门牌号',
     is_default TINYINT not null comment '是否默认',
     modified_time TIMESTAMP not null default CURRENT_TIMESTAMP 
     on update CURRENT_TIMESTAMP comment '最后修改时间',
     PRIMARY key pk_customeraddid(customer_addr_id)
    ) engine=innodb comment '用户地址表'
    ;

    用户积分日志表(customer_point_log)

    create table customer_point_log(
     point_id int UNSIGNED not null auto_increment comment '积分日志ID',
     customer_id int UNSIGNED not null comment '用户ID',
     source tinyint unsigned not null comment '积分来源:0订单,1登录,2活动',
     refer_number int unsigned not null default 0 comment '积分来源相关编号',   
     change_point SMALLINT not null default 0 comment '变更积分数',
     create_time TIMESTAMP not null comment '积分日志生成时间', 
     PRIMARY key pk_pointid(point_id)
    ) engine=innodb comment '用户积分日志表'
    ;

    用户余额变动表(customer_balance_log)

    create table customer_balance_log(
     balance_id int UNSIGNED not null auto_increment comment '余额日志id',
     customer_id int UNSIGNED not null comment '用户ID',
     source TINYINT UNSIGNED not null DEFAULT 1 COMMENT '记录来源:1订单,2退货单',
     source_sn int UNSIGNED not null COMMENT '相关单据ID',
     create_time TIMESTAMP not null DEFAULT CURRENT_TIMESTAMP COMMENT '记录生成时间',
     amount decimal(8,2) not null DEFAULT 0.00 comment '变动金额',
     PRIMARY key pk_balanceid(balance_id)
    ) ENGINE=INNODB COMMENT '用户余额变动表'
    ;

    用户登录日志表(customer_login_log)

    create table customer_login_log(
     login_id int UNSIGNED not null auto_increment comment '登录日志ID',
     customer_id int UNSIGNED not null COMMENT '登录用户ID',
     login_time TIMESTAMP not null COMMENT '用户登录时间', 
     login_ip int unsigned not null COMMENT '登录IP', 
     login_type TINYINT not null COMMENT '登录类型:0未成功 1成功',
     PRIMARY key pk_loginid (login_id)
    ) ENGINE=INNODB COMMENT '用户登录日志表'
    ;

     

    展开全文
  • 规定的一行(即每一条记录)在中是唯一的实体实体完整性通过的主键来实现   主键的特点:不能为null,必须有值,且不能重复。 主键分类: 逻辑主键:不代表实际意义,只是区分不同记录用的。比如

    九、数据完整性

    1、数据完整性是为了保证插入到数据中的数据是正确的,它防止了用户可能的输入错误

    2、分为三类

    l  实体完整性

    l  域完整性

    l  参照完整性

    9.1实体完整性

    规定表的一行(即每一条记录)在表中是唯一的实体。实体完整性通过表的主键来实现

     

    主键的特点:不能为null,必须有值,且不能重复。

    主键分类:

    逻辑主键:不代表实际意义,只是区分不同记录用的。比如id

    业务主键:代表者具体的实际意义。比如身份证号  用户名

    CREATE TABLE t2(

               idint PRIMARY KEY,#PRIMARY KEY 声明id是主键

               namevarchar(100)

    );

     

    CREATE TABLE t4(

               idint,

               namevarchar(100),

    PRIMARY KEY(id)

    );

     

     

    CREATE TABLE t3(

               idint PRIMARY KEY auto_increment,#auto_increment 数据库自动增长

               namevarchar(100)

    );

     

    9.2域完整性

    指数据库表的列(即字段)必须符合某种特定的数据类型或约束。

     

    非空约束:not null

    唯一约束:unique

     

    CREATE TABLE t6(

               idint PRIMARY KEY auto_increment,

               usernamevarchar(100) not null unique, 非空和唯一约束

               gendervarchar(10) not null  非空约束

    );

    9.3参照完整性(多表)

    表间的关系:

    一对多(用的最多)

    多对多(用的很多)

    一对一(几乎不用)

     

    9.3.1一对多:部门和员工的关系

    CREATE TABLE department(

               idint primary key,

               namevarchar(100)

    );

     

    CREATE TABLE employee(

               idint primary key,

               namevarchar(100),

               salaryfloat(8,2),

               department_idint,

               CONSTRAINTdepartment_id_fk FOREIGN KEY(department_id) REFERENCES department(id)

    );

     

    9.3.2多对多:老师和学员

    CREATE TABLE teacher(

               idint primary key,

               namevarchar(100),

               salaryfloat(8,2)

    );

    CREATE TABLE student(

               idint primary key,

               namevarchar(100),

               gradevarchar(10)

    );

    CREATE TABLE teacher_student(

               t_idint,

               s_idint,

               CONSTRAINTt_id_fk FOREIGN KEY(t_id) REFERENCES teacher(id),

               CONSTRAINTs_id_fk FOREIGN KEY(s_id) REFERENCES student(id),

               PRIMARYKEY(t_id,s_id)

    );

     

    9.3.3一对一(了解)

    l  按照外键关联:

    CREATE TABLE person(

               idint primary key,

               namevarchar(100)

    );

    CREATE TABLE idcard(

               idint primary key,

               numbervarchar(20),

               person_idint unique,

               CONSTRAINTperson_id_fk FOREIGN KEY(person_id) REFERENCES person(id)

    );

     

    l  按照主键关联:

    CREATE TABLE person(

               idint primary key,

               namevarchar(100)

    );

    CREATE TABLE idcard(

               idint primary key,

               numbervarchar(20),

               CONSTRAINTperson_id_fk FOREIGN KEY(id) REFERENCES person(id)

    );

    展开全文
  • 代码:其中有有:名称、索引,字段有:名称、类型(int,varchar, text),唯一, 长度,是否为空,注释,默认值 @ApiModel(value = "用户信息") @Entity // Indexes是声明表里的索引,columnList是索引的列,同时...

    代码:其中有表有:名称、索引,字段有:名称、类型(int,varchar, text),唯一, 长度,是否为空,注释,默认值

    索引说明:如果字段有别名也就是有name属性,则columnList 中填写字段name中的值,若无name,则填写字段名即可,异常时会发现不会自动创建与更新数据库,而此时也不会有任何异常提示

    @ApiModel(value = "用户信息")
    @Entity
    // Indexes是声明表里的索引,columnList是索引的列,同时可声明此索引列是否唯一,
    @Table(name = "fls_user", indexes = {@Index(name = "userMobile", columnList = "userMobile", unique = true)})
    public class User implements Serializable {
    
    	private static final long serialVersionUID = 1092120369362179355L;
    
    	@ApiModelProperty(value = "ID", hidden = true)
    	@Id
    	@GeneratedValue(strategy = GenerationType.IDENTITY)
    	private Integer id;
    
    	@ApiModelProperty(value = "排序")
    	@Column(name = "user_sort", columnDefinition = "int(11) comment '排序'")
    	private Integer userSort;
    
    	@ApiModelProperty(value = "用户电话")
    	@Column(name = "user_mobile", unique = true, columnDefinition = "int(11) comment '手机'")
    	private String userMobile;
    
    	@ApiModelProperty(value = "用户密码")
    	@JsonIgnore
    	@Column(name = "user_password", columnDefinition = "varchar(50) comment '密码'")
    	private String userPassword;
    
    	@ApiModelProperty(value = "用户图片")
    	@Column(name = "user_photo", columnDefinition = "varchar(255) comment '头像'")
    	private String userPhoto;
    
    	@ApiModelProperty(value = "真实姓名")
    	@Column(name = "user_realname", nullable = false, columnDefinition = "varchar(50) comment '姓名'")
    	private String userRealName;
    
    	@ApiModelProperty(value = "启用状态")
    	@Column(name = "user_on", nullable = false, columnDefinition = "int(1) default 0 comment '启用状态:0:启用,1:禁用,2,:已删除'")
    	// 默认启用
    	private Integer userOn = EnumUtils.UserEnum.NORMAL.getValue();
    
    	@ApiModelProperty(value = "当前单位")
    	@Column(name = "user_company", columnDefinition = "int(11) comment '当前单位'")
    	private Integer userCompany;
    
    	@ApiModelProperty(value = "当前角色")
    	@Column(name = "user_role", columnDefinition = "int(11) comment '当前角色'")
    	private Integer userRole;
    
    	@ApiModelProperty(value = "扩展角色")
    	@Lob
    	@Basic(fetch = FetchType.LAZY)
    	@Column(name = "user_extend_role", columnDefinition = "text comment '扩展角色'")
    	private String userExtendRole;

    生成表截图如下

    说明:有时候会出现以下异常,出现后当创建完成自己的索引后,删除掉自动创建的索引即可

    当索引unique为true时,第二次启动时会创建名称为user_mobile的索引,此时删掉自动创建的索引即可

    当索引unique为false时,若不需要则手动删除自动创建的索引

     

    展开全文
  • MySQL联查

    2020-08-13 09:27:57
    MySQL联查 一、数据的完整性 作用:保证用户输入的数据保存到数据库中是正确的 实质:创建的时候给中的字段添加约束 1.实体完整性 实体中的一行或者一条记录代表一个实体 实体完整性的作用:标识每一...

    MySQL多表联查

    一、数据的完整性

    作用:保证用户输入的数据保存到数据库中是正确的

    实质:创建表的时候给表中的字段添加约束

    1.实体完整性

    实体:表中的一行或者一条记录代表一个实体

    实体完整性的作用:标识每一行数据不重复

    约束类型:

    ​ 主键约束【primary key】

    ​ 唯一约束【unique】
    ​ 自动增长列【auto_increment】

    1.1主键约束【primary key】

    特点:数据唯一,且不能为null

    主关键字可以是表中的一个字段或者多个字段,它的值用来唯一标识表中的某一条记录

    场景:在多个表的关联关系中

    演示:

    mysql> create table stu1(
     	-> 		id int primary key,
     	-> 		name varchar(50) 
     	-> );
    
    mysql> create table stu2(
    	-> 		id int ,
     	-> 		name varchar(50),
     	-> 		primary key(id,name)
     	-> );
    
    # 生成表格后添加主键约束
    mysql> create table stu3(
    	-> 		id int,
    	-> 		name varchar(50),
     	-> );
    mysql> alter table stu3 add constraint stu3_id primary key(id);
    
    
    1.2唯一约束

    作用:在非主键列中不能输入重复的值

    演示:

    mysql> create table stu4(
     -> 		id int primary key,
     -> 		name varchar(50) unique
     -> );
    
    
    #primary key和unique之间的区别
    a.二者都强调的是唯一性
    b.在同一个表中,一般只出现一个primary key,可以出现多个unique
    c.primary key不允许为null,但是unique是允许的
    
    1.3自动增长列

    给主键添加添加自动增长性,列只能是整数类型

    场景:一般添加给主键

    演示:

    mysql> create table stu5(
     -> id int primary key auto_increment,
     -> name varchar(50) unique
     -> );
    
    

    2.域完整性

    作用:限制单元格数据的正确性,

    ​ 域代表当前单元格

    约束类型:

    ​ 数据类型

    ​ 非空约束【not null】

    ​ 默认值约束【default】

    2.1数据类型

    数字类型:int float double

    日期类型:date datetime

    字符串类型:varchar(20)

    2.2非空约束【not null】

    演示:

    mysql> create table stu6( 
     	id int primary key auto_increment, 
     	name varchar(50) unique not null,
     );
    
    #注意:name被约束为not null,插入数据的时候,name坚决不能为null,如果为null,数据库立马报错
    
    2.3默认值约束

    演示:

    mysql> create table stu7(
     -> id int primary key auto_increment,
     -> name varchar(50) unique not null,
     -> address varchar(50) default "beijing"
     -> );
    
    mysql> insert into stu7 (id,name,address) values(1,'aaa','fff');
    mysql> insert into stu7 (id,name,address) values(2,'bbb',default);
    
    mysql> select * from stu7;
    +----+------+---------+
    | id | name | address |
    +----+------+---------+
    |  1 | aaa  | fff     |
    |  2 | bbb  | beijing |
    +----+------+---------+
    
    

    3.外键约束

    添加外键约束:foreign key

    注意:添加外键必须先有主键,主键和外键的类型必须保持一致

    举例:学生表,成绩表

    作用:将两个甚至多个表产生联系

    演示:

    
    #方式一
    mysql> create table score1( score int, courseid int,stuid varchar(10), constraint stu_sco_id foreign key(stuid) references student(stuid) );
    #注意:stu_sco_id是给约束起的名字,可以自定义
    
    #方式二
    mysql> create table score2(
    	-> 		score int,
    	-> 		courseid int,
    	-> 		stuid varchar(10)
    	-> );
    
    mysql> alter table score2 add constraint stu_sco_id2 foreign key(stuid) references student(stuid);
    
    这样主键和外键相关联,外键的值必须是主键里面存在有的,否则会报错,外键值可以有重复。
    #注意:主键和外键的类型必须保持一致
    

    二、多表查询

    1.表与表之间的关系

    一对一

    ​ 通过嵌套的方式

    一对多【多对一】

    ​ 添加外键

    多对多

    ​ 单独创建一张新的表

    2.合并结果集

    作用:将两个select语句的查询结果合并到一起

    两种方式:

    ​ union:去除重复记录【并集】

    ​ union all;获取所有的结果

    演示:

    #创建表
    mysql> create table A(
     	 	 name varchar(10),
    	 	 score int
       	);
    
    mysql> create table B( 
    		name varchar(10), 
    		score int 
    	  );
    
    #批量插入数据
    mysql> insert into A values('a',10),('b',20),('c',30);
    mysql> insert into B values('a',10),('d',40),('c',30);
    
    #查询结果
    mysql> select * from A;
    +------+-------+
    | name | score |
    +------+-------+
    | a    |    10 |
    | b    |    20 |
    | c    |    30 |
    +------+-------+
    
    mysql> select * from B;
    +------+-------+
    | name | score |
    +------+-------+
    | a    |    10 |
    | d    |    40 |
    | c    |    30 |
    +------+-------+
    
    #合并结果集
    mysql> select * from A
    -> union
    -> select * from B;
    +------+-------+
    | name | score |
    +------+-------+
    | a    |    10 |
    | b    |    20 |
    | c    |    30 |
    | d    |    40 |
    +------+-------+
    
    mysql> select * from A
    -> union all
    -> select * from B;
    +------+-------+
    | name | score |
    +------+-------+
    | a    |    10 |
    | b    |    20 |
    | c    |    30 |
    | a    |    10 |
    | d    |    40 |
    | c    |    30 |
    +------+-------+
    
    

    注意:被合并的两个结果,列数、列类型必须相同

    如果遇到列数不相同的情况,如下的解决办法:
    选择可以通过select出相同的列数和类型

    3.连接查询

    作用:求出多个表的乘积,例如t1和t2,如果采用了连接查询,得到的结果是t1*t2

    演示:

    mysql> select * from student,score;
    
    #问题:进行连接查询,会产生笛卡尔积
    #笛卡尔积:两个集合相乘的结果
    #解释:假设集合A={a,b},集合B={0,1,2},则笛卡尔积的结果{(a,0),(a,1),(a,2),(b,0),(b,1),(b,2)}
    
    #解决办法:在实际应用中,需要去除重复记录,则需要通过条件进行过滤
    mysql> select s.stuid,s.stuname,c.score,c.courseid from student s,score c where s.stuid=c.stuid;
    
    3.1内连接-inner join on

    内连接的特点:查询结果必须满足条件

    演示:

    #内连接
    mysql> select s.stuid,s.stuname,c.score,c.courseid  from student s join score c on s.stuid=c.stuid;
    +-------+----------+-------+----------+
    | stuid | stuname  | score | courseid |
    +-------+----------+-------+----------+
    | 1001  | zhangsan |    98 |        1 |
    | 1002  | lisi     |    80 |        2 |
    | 1003  | jack     |    70 |        1 |
    | 1004  | tom      |    60 |        2 |
    | 1002  | lisi     |    75 |        3 |
    +-------+----------+-------+----------+
    
    #等价写法
    mysql> select  s.stuid,s.stuname,c.score,c.courseid from student s,score c where s.stuid=c.stuid;
    +-------+----------+-------+----------+
    | stuid | stuname  | score | courseid |
    +-------+----------+-------+----------+
    | 1001  | zhangsan |    98 |        1 |
    | 1002  | lisi     |    80 |        2 |
    | 1003  | jack     |    70 |        1 |
    | 1004  | tom      |    60 |        2 |
    | 1002  | lisi     |    75 |        3 |
    +-------+----------+-------+----------+
    
    #练习:查询成绩大于80的学生记录
    #方式一
    mysql> select  s.stuid,s.stuname,c.score,c.courseid from student s,score c where s.stuid=c.stuid and c.score>80;
    +-------+----------+-------+----------+
    | stuid | stuname  | score | courseid |
    +-------+----------+-------+----------+
    | 1001  | zhangsan |    98 |        1 |
    | 1002  | lisi     |    80 |        2 |
    | 1002  | lisi     |    75 |        3 |
    +-------+----------+-------+----------+
    
    #方式二
    #也是内连接,只不过相当于是方言,join on相当于是普通话
    mysql> select s.stuid,s.stuname,c.score,c.courseid  from student s join score c on s.stuid=c.stuid and score>70;
    +-------+----------+-------+----------+
    | stuid | stuname  | score | courseid |
    +-------+----------+-------+----------+
    | 1001  | zhangsan |    98 |        1 |
    | 1002  | lisi     |    80 |        2 |
    | 1002  | lisi     |    75 |        3 |
    +-------+----------+-------+----------+
    
    #方式三
    mysql> select s.stuid,s.stuname,c.score,c.courseid  from student s join score c on s.stuid=c.stuid where score>70;
    +-------+----------+-------+----------+
    | stuid | stuname  | score | courseid |
    +-------+----------+-------+----------+
    | 1001  | zhangsan |    98 |        1 |
    | 1002  | lisi     |    80 |        2 |
    | 1002  | lisi     |    75 |        3 |
    +-------+----------+-------+----------+
    
    
    3.2外连接-outer join on

    特点:以其中一个表作为参照连接另外一个表

    分类:

    ​ 左外连接:left join on

    ​ 右外连接:right join on

    演示:

    #左外连接
    mysql> select s.stuid,s.stuname,c.score,c.courseid  from student s left join score c on s.stuid=c.stuid;
    +-------+----------+-------+----------+
    | stuid | stuname  | score | courseid |
    +-------+----------+-------+----------+
    | 1001  | zhangsan |    98 |        1 |
    | 1002  | lisi     |    80 |        2 |
    | 1003  | jack     |    70 |        1 |
    | 1004  | tom      |    60 |        2 |
    | 1002  | lisi     |    75 |        3 |
    +-------+----------+-------+----------+
    
    #内连接
    mysql> select s.stuid,s.stuname,c.score,c.courseid  from student s join score c on s.stuid=c.stuid;
    +-------+----------+-------+----------+
    | stuid | stuname  | score | courseid |
    +-------+----------+-------+----------+
    | 1001  | zhangsan |    98 |        1 |
    | 1002  | lisi     |    80 |        2 |
    | 1003  | jack     |    70 |        1 |
    | 1004  | tom      |    60 |        2 |
    | 1002  | lisi     |    75 |        3 |
    +-------+----------+-------+----------+
    
    #右外连接
    #参照为c
    mysql> select s.stuid,s.stuname,c.score,c.courseid  from student s right join score c on s.stuid=c.stuid;
    +-------+----------+-------+----------+
    | stuid | stuname  | score | courseid |
    +-------+----------+-------+----------+
    | 1001  | zhangsan |    98 |        1 |
    | 1002  | lisi     |    80 |        2 |
    | 1002  | lisi     |    75 |        3 |
    | 1003  | jack     |    70 |        1 |
    | 1004  | tom      |    60 |        2 |
    +-------+----------+-------+----------+
    
    

    4.子查询

    在一个select语句中包含另外一个完整的select语句【select语句的嵌套】

    注意:

    ​ a.子查询出现的位置:

    ​ from后

    ​ where子句的后面,作为条件的一部分被查询

    ​ b。当子查询出现在where后面作为条件时,可以使用关键字:any、all

    ​ c.子查询结果集的形式

    ​ 单行单列

    ​ 单行多列

    ​ 多行多列

    ​ 多行单列

    演示:

    #1.查询和scott在同一个部门的员工
    #思路:先查询scott所在的部门,然后根据部门查找所有的信息
    mysql> select deptno from emp where enname='scott';
    +--------+
    | deptno |
    +--------+
    |     20 |
    +--------+
    
    mysql> select * from emp where deptno=(select deptno from emp where enname='scott');
    +-------+--------+---------+------+------------+---------+------+--------+
    | empno | enname | job     | mgr  | hiredate   | sal     | comm | deptno |
    +-------+--------+---------+------+------------+---------+------+--------+
    |  7369 | smith  | clark   | 7902 | 1980-12-17 |  800.00 | NULL |     20 |
    |  7788 | scott  | analyst | 7566 | 1987-02-20 | 3000.00 | NULL |     20 |
    +-------+--------+---------+------+------------+---------+------+--------+
    
    #2.查询工资高于joens的员工信息
    #思路:先查询jones的工资,然后根据jones查询其他的员工信息
    mysql> select * from emp where sal>(select sal from emp where enname='jones');
    +-------+--------+-----------+------+------------+---------+------+--------+
    | empno | enname | job       | mgr  | hiredate   | sal     | comm | deptno |
    +-------+--------+-----------+------+------------+---------+------+--------+
    |  7788 | scott  | analyst   | 7566 | 1987-02-20 | 3000.00 | NULL |     20 |
    |  7839 | king   | president | NULL | 1987-02-20 | 5000.00 | NULL |     10 |
    +-------+--------+-----------+------+------------+---------+------+--------+
    
    #3.查询工资高于30号部门所有人的员工信息
    #思路:先查询30号部门中的最高工资,根据最高工资查询其他的员工信息
    mysql> select * from emp where deptno=30;
    +-------+--------+----------+------+------------+---------+---------+--------+
    | empno | enname | job      | mgr  | hiredate   | sal     | comm    | deptno |
    +-------+--------+----------+------+------------+---------+---------+--------+
    |  7499 | allen  | salesman | 7698 | 1981-02-20 | 1600.00 |  300.00 |     30 |
    |  7566 | jones  | managen  | 7839 | 1981-04-02 | 2975.00 |    NULL |     30 |
    |  7654 | martin | salesman | 7698 | 1981-09-28 | 1250.00 | 1400.00 |     30 |
    |  7698 | blake  | manager  | 7839 | 1981-05-01 | 2850.00 |    NULL |     30 |
    +-------+--------+----------+------+------------+---------+---------+--------+
    
    mysql> select max(sal) from emp where deptno=30;
    +----------+
    | max(sal) |
    +----------+
    |  2975.00 |
    +----------+
    
    mysql> select * from emp where sal>(select max(sal) from emp where deptno=30);
    +-------+--------+-----------+------+------------+---------+------+--------+
    | empno | enname | job       | mgr  | hiredate   | sal     | comm | deptno |
    +-------+--------+-----------+------+------------+---------+------+--------+
    |  7788 | scott  | analyst   | 7566 | 1987-02-20 | 3000.00 | NULL |     20 |
    |  7839 | king   | president | NULL | 1987-02-20 | 5000.00 | NULL |     10 |
    +-------+--------+-----------+------+------------+---------+------+--------+
    
    #4.查询工作类型和工资与martin完全相同的员工信息
    #思路:先查询martin的工作类型和工资,然后再查询其他的员工信息
    mysql> select * from emp where (job,sal) in(select job,sal from emp where enname='martin');
    +-------+--------+----------+------+------------+---------+---------+--------+
    | empno | enname | job      | mgr  | hiredate   | sal     | comm    | deptno |
    +-------+--------+----------+------+------------+---------+---------+--------+
    |  7654 | martin | salesman | 7698 | 1981-09-28 | 1250.00 | 1400.00 |     30 |
    +-------+--------+----------+------+------------+---------+---------+--------+
    
    

    三、数据库的备份和恢复

    1.备份

    生成SQL脚本,导出数据

    命令:mysqldump -u root -p 数据库名>生成sql脚本的路径

    注意:可以不需要登录数据库

    演示:

    C:\Users\username> mysqldump -u root -p mydb1 > C:/Users/ijeff/Desktop/mydb1.sql
    Enter password: 
    
    windows: 使用管理员权限打开CMD
    

    2.恢复

    执行sql脚本,恢复数据

    前提:必须先创建数据库【空的】

    注意:需要先登录数据库,然后进入指定的数据库,执行sql脚本

    演示:

    C:\Users\username> mysql -u root -p
    Enter password: 
    
    mysql> create database test;
    
    mysql> use test;
    mysql> show tables;
    
    mysql> source C:/Users/username/Desktop/mydb1.sql;
    
    展开全文
  • 第一步:在MySQL中创建用户和相应的数据 这里示例用到的用户名为:mybatis,数据有:student、teacher等。第二步:下载相关文件 需要的配置文件有(去我的资源里面下载): features文件夹下的org.mybatis...
  • mysql表关系

    2019-03-06 19:55:55
    现实生活中,实体实体之间肯定是有关系的,比如:老公和老婆,部门和员工,老师和学生等。那么我们在设计的时候,就应该体现出之间的这种关系!分成三种: 一对一 一对多 多对多 一对多 例如:班级和...
  • MyBatis Generator的...当使用mysql驱动8.0新版本时,如果jdbcConnection的userId属性指定的用户下有多个数据库,并且每个数据库里都有tbl_user,那么生成实体时默认会把这几个库里的tbl_user都生成实体。如下...
  • 1.前要 本渣只有一台电脑,因为学习数据库光靠一台电脑不够用,故装了...mysql新建一个用户并授权,对应mysql.user系统中新增一条数据,注意host字段上的值设为’%’,代表允许该用户在任意电脑上远程登录本机m...
  • springboot+mybatis+mysql联合查询

    万次阅读 2018-07-02 20:10:31
    springboot+mybatis+mysql查询 这里有两张 用户表用户信息user、info 两个实体类展示他们一对一的关系 通过springboot**注解的方式**实现多联合查询 通过userId查询User及其对应的Info信息 /** ...
  • Mysql约束和多查询

    千次阅读 2020-02-07 16:25:16
    数据完整性 ...实体:即中的一行(一条记录)代表一个实体(entity) 实体完整性的作用:标识每一行数据不重复 约束类型: 主键约束(primary key) 唯一约束(unique) 自动增长列(auto_increment)...
  • MySQL膨胀优化之MyCat分库分表

    千次阅读 2019-01-14 13:37:42
    MySQL的单表达到多少量级时...Q2:两个实体用户和订单,数据量都过亿 要求: 1.从用户角度快速查询订单 2.从订单角度快速查用户 怎么设计? 【1】常见数据库中间件 分布式数据库中间件有TDDL、Sharding-JDBC...
  • MySql的curd-01

    2019-09-24 16:23:35
    案例2-创建多,可以描述出之间的关系需求: 把网上商城里面用的实体创建成表,并且将他们之间建立关系.技术分析: sql /////////////////////////////////网上商城的实体: 用户 订单 商品 分类常见关系: 一对多...
  • I'm using MySQL and innoDB tables. <p><strong>Requirements</strong></p> <li>Coach and student login. <li>Coach can deliver a digital lesson specifically for a single student. <p>I'm unsure what...
  • 在项目开发中,有时候迫不得已需要为用户开放建表功能(一般情况下是用来方便用户创建模型),所以项目中需要有创建的功能,这种建表又和hibernate的自动建表不一样,他是通过定义的实体类创建的,我们需要通过用户定义的...
  • 在关系数据库管理系统中,建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在一个中。当检索数据时,通过连接操作查询出存放在多个中的不同实体的信息。连接操作给用户带来很大的灵活性,他们...
  • mysql关于设计的主键策略

    千次阅读 2016-12-23 15:02:35
    这样的一列或多列称为的主键,通过它可强制实体完整性。2.主键设计原则总原则:根据数据库的具体使用范围来决定采用不同的主键定义。2.1 确保主键的无意义性在开发过程中,有意义的字段例如“用户登录信息...
  • 常见电商项目的数据库设计(MySQL版)

    万次阅读 多人点赞 2019-03-14 11:17:06
    常见电商项目的数据库设计(MySQL版) 简介: 目的: 电商常用功能模块的数据库设计 常见问题的数据库解决方案 ...用户表涉及的实体 改进1:第三范式:将依赖传递的列分离出来。比如:登录...
  • 实体:即中的一行(一条记录)代表一个实体(entity) 实体完整性的作用:标识每一行数据不重复。 约束类型: 主键约束(primary key) 唯一约束(unique) 自动增长列(auto_increment) 1.1.1 主键约束(prima
  • 这里写目录标题1 问题定义1.1 用户表1.2 货物1.3 购买记录2 问题2.1 查询每个人购买的总数量2.2 查询每个人花费总金额2.3 查询比张三消费金额高的人3 总结 1 问题定义 一般把生活中的具体要实现数据库的问题,抽象...
  • MySQL约束、多查询和事物的四个特性 第一节 数据完整性 数据完整性是指数据的精确性(Accuracy) 和可靠性(Reliability)。 确保数据的完整性 = 在创建时给中添加约束,保证用户输入的数据保存到数据库中是准确...
  • 1.前言 最近重新整理了一下以前的MySQL笔记,本系列笔记分为上下两部分。其中,前8节是对MySQL基础的巩固(继续完善),从本节开始梳理一下MySQL的多...demo中的实体用户、订单、商品、分类 常见关系: 一对...
  • 系统设计中,实体之间的关系(数据库)有三种:一对一,一对多,多对多. 实例:把网上商城里面用的实体创建成表,并且将他们之间建立关系. 一对多 举例:用户和订单 一个用户可以有多个订单 --用户表 CREATE TABLE `...
  • 用户表涉及的实体 改进1:第三范式:将依赖传递的列分离出来。比如:登录名<-用户级别<-级别积分上限,级别积分下限 改进2:尽量做到冷热数据的分离,减小的宽度 用户登录(customer_login)
  • 1、 服务器的概念 1.1 1.3.1.1 什么是服务器 服务器要从硬件和软件两个方面来说: 硬件角度:指的就是一台计算机。 ...软件角度:需要在这台电脑上安装数据库服务器 ...2、 MySQL数据库存储的方式 ...三个实例(用户...
  • 这是因为java后端映射实体指定的表名与数据库中的表名存在大小写不一致的问题,而mysql在windows下安装好之后默认是对表名大小写不敏感,但在linux下需要手动设置。 解决方法: 1、切换 root用户,打开并修改/...
  • 文章目录用户实体用户逻辑设计用户结构设计 用户实体 用户实体中包含的属性如下: 有些属性是通过用户录入进行输入的,而有些属性则是通过后台计算得到的。 保存上述一个用户实体,最简单的方法当然是简单...
  • MySQL连接查询Left Join,Right Join MySQL中的连接查询 通过连接运算符可以实现多个查询。连接是关系数据库模型的主要特点,也是它区别于其它类型 数据库管理系统的一个标志。 在关系数据库管理系统中,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 470
精华内容 188
关键字:

mysql用户实体表

mysql 订阅