from ren where p_name 
in (
            select * 
from (select p_name 
from ren  GROUP BY p_name HAVING count(1)>1
) as h
        )
      删除重复数据并保留ID最大的是数据
        delete from ren where p_name 
in (
            select * 
from (select p_name 
from ren  GROUP BY p_name HAVING count(1)>1
) as h
        )
        and p_id NOT IN(
            select * 
from(select max(p_id) 
from ren GROUP BY p_name HAVING count(1)>1
)  T
        )
    
    
    今日内容:
        mysql 约束:
            1
.非空约束:
                not null
                
            2
.主键约束
                create table t2 (
                    id int not null PRIMARY key,
                    name VARCHAR(200) 
not null,
                    age int not null,
                
            )
            注意: 不能为空,不能重复,一个表中只能有一个主键
            3
. 唯一约束
                create table t4(
                    id int(10) 
not null,
                    name varchar(255
) ,
                    age int ,
                    unique name_age(name,age)
                );
                注意:被约束的字段不能重复
    
    
            *4
.外键 foreign key
            
                --
 部门表
                create table dept(
                    dept_id int(30) 
not null auto_increment primary key,
                    dept_name varchar(255) 
not null
                );
                --
 员工表
                create table emp(
                    id int(10) 
not null auto_increment primary key,
                    name varchar(50) 
not null,
                    dept_id int(10) 
not null,
                    constraint f_key foreign key (dept_id) references db2.dept(dept_id) on delete cascade
                );
    
    
            5
. 默认值 default 
                create table t5 (
                    id int not null auto_increment PRIMARY key,
                    name VARCHAR(255) 
not null DEFAULT 
‘wusir‘
                )
        
        2
.数据库设计
            1
.概念
                1
.有效存储数据
                2
.满足用户的多种需求
                
            2
.关系
                1-1
 :最少需要1张表
                1-
n :最少需要2张表
                n-
n :最少需要3张表
        
            3
.数据库三范式
                1
.保证每列的原子性
                2
.保证每列都与主键相关
                3
.保证每列都和主键直接相关,而不能是间接相关
                三范式的详解:http://www.cnblogs.com/wangfengming/p/7929118
.html
    
    
        3
. 索引:
            1
.概念:相当于书的目录,快速找到数据
            
                好处:可以帮助你提高查询效率,数据量越大越明显
                缺点: 新增和删除数据时,效率较低
            
            
             2
.索引方法:
                1.hash  是以key-
value 的形式进行索引存储
                2
.BTree 是以二叉树方式进行索引存储。(默认存储索引类型)
    
            
             3
.索引分类
                1
. 普通索引 create INDEX name_index on person(name);
                2
. 唯一索引 create unique INDEX name_age on person(name,age);
                3
. 主键索引 alter table person MODIFY id int PRIMARY key;
                4
. 组合索引 create unique INDEX name_age on person(name,age);
                5
. 全文索引 full text :原理是分词查找
                
                
                
            练习:http://www.cnblogs.com/wangfengming/p/7978183
.html    
                
                
                
                
                
                
                
                
                
                
                
                
    
View Code
 
 
约束的存在是为了确保表的唯一性.它的存在是一种限制,通过对表的行或者列的数据做出限制,
常用约束有主键,非空,唯一性,外键,默认值
1,非空约束,就是改列在插入数据的时候不能为空,
2,主键约束,是用于约束表中的一行,作为这一行的标识符,在一张表中通过主键就能准确定位到一行,后期遇到查询检索内容的时候,通过主键去查询速度和效率会比其他的字段快很多.
注意: 主键这一行的数据不能重复且不能为空。另外还有一种符合主键,不常用,但是要了解,主键可以是很多列,不仅仅局限于一列,当是多列的时候,例如A与B都是主键的时候,在插入数据值时,只要不满足A与B的值都相同的情况即可,可以A的值相同,也可以B的值相同,但是不能两者同时相同.
3,唯一约束,规定一张表中指定的一列的值必须不能有重复的 ,就是在填入值的时候,这一列里面每次添加的值都不能够重复,例如你第一次用insert的时候在该列里面插入了一个0,那么下次的时候在用insert插入数据的时候,就不可以再写入0,否则会报错,这里就是唯一约束的效果.应用场景,比如在个人信息表中,身份证和电话号码还有学号都是唯一的 ,不可以有重复的,那么为了不设置那么多的主键,我们就设置一个唯一约束,也能达到同样的效果.
4,外键既能确保数据的完整性,也能表现表之间的关联关系.(注意:一个表可以有多个外键,被外键约束的列,取值必须在它参考的列中有对应值).也就是说我们的两个表是互相有关联的,比如A表里面的姓名是B表里面的用户注册名,这样两个表就是有关联的,这个姓名就是要被设为A或者B的其中一个表的外键,[这里有一个联级删除的概念,了解即可,也就是说两个表有互相关联的内容,如果关联的内容在一个表里被删除了,那么另一个就会被删除,如果关联的内容被一个使用了,另一个默认不会对其进行修改删除的操作]
5,默认值约束当有default约束的列,插入的改列数据为空时,则显示默认设置的初始值,此概念类似于函数里面的默认参数,当不传参的时候就使用默认的参数,传参则使用所传的参数.
=================================================================================================================================
 
数据库的设计,
设计数据库需要满足连个条件,---------有效存储数据,同时还要满足用户一切需求,
规则,三范式;
  1,确保每列的原子性,----即每一列的内容都不可以再拆分,(因为已经拆分到足够详细了,例如,地址信息,拆分成国家,省份,市区,街道,楼号,几层,) 小到不能再小了
  2,确保表中的每列都和主键相关
  3,确保每列都和主键直接相关,不能是间接相关
数据库与表的关系;
  1,一对一关系,A表中的某一行只能与B表中的某一行相关,反过来亦是如此,B表中的某一行可以与A表中的某一行相关联[至少一张表]
  2,一对多关系,A表中的某一行可以与B表中的一行或者多行相关联,反之则不然,B表中的某一行只能与A表中的某一行相关联[至少2张表]
  3,多对多关系,A表中的某一行可以与B表中的一行或者多行相关联,反 之亦然,B表中的某一行可以与A表中的某一行或者多行相关联[至少3张表]
=============================================================================================================================
 
索引:
  方法hash,
hash  是以key-value 的形式进行索引存储
  btree
BTree 是以二叉树方式进行索引存储。(默认存储索引类型)
  分类,类型:
    1,普通索引---根据设置的索引来检索内容
    2,唯一索引---根据设置的唯一值来检索内容
    3,主键索引---根据主键来检索内容
    4,组合索引---根据所设置的组合元素来检索内容
    5,全文索引---根据分词来检索内容
 
 
 
 
  
 
mycql 数据库之约束
标签:查询   group by   isp   聚合函数   tab   play   快速   内容   none