mycql 数据库之约束

内容概要:

 --  1 .回顾
     聚合函数:
        最大 max()
        最小 min()
        平均 avg()
        求和 sum()
        总个数 count()
     分组函数 : group by   having
     排序 order BY ASC  desc
     去重复 :distinct
     分页: limit 参数1:从第几条开始,起始位置为0,参数2:显示的条数
     多表联合查询 (笛卡尔乘积)
     左连接查询 :A left join B on 条件 left join C on 条件
     右连接查询 : right join
     内连接查询 : inner join

      删除重复数据:
        delete 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

约束的存在是为了确保表的唯一性.它的存在是一种限制,通过对表的行或者列的数据做出限制,
常用约束有主键,非空,唯一性,外键,默认值

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,全文索引---根据分词来检索内容

  

时间: 2024-08-24 20:02:09

mycql 数据库之约束的相关文章

数据库的约束

数据库的约束用于保证数据的完整性,即保证数据的正确性和唯一性. 总的来说有五种:唯一性和主键约束.外键约束.检查约束.空值约束.默认值约束, 有五大关键词,UNIQUE和Primary Key, Foreign Key, CHECK, NOT NULL, DEFAULT 1.--主键约束(Primay Key Coustraint) 唯一性,非空性主关键字约束指定表的一列或几列的组合的值在表中具有惟一性,即能惟一地指定一行记录.每个表中只能有一列被指定为主关键字,且IMAGE 和TEXT 类型的

改写了禁用或启用oracle数据库的约束的存储过程

改写了网上某位大侠(最开始的源头是哪位没记住)写的禁用或启用oracle数据库所有约束的存储过程,增加了异常控制,以使发生异常时也可以执行下去. –调用过程: 执行前先 set serveroutput on;    ----以便打印出输出禁用约束检查 exec MANAGE_USER_CONSTRAINTS('disable',true,true,true); 启用约束 exec MANAGE_USER_CONSTRAINTS('enable',true,true,true); CREATE

达梦数据库的约束操作

达梦数据库的约束操作 达梦数据库的约束常用的有主键约束.外键约束.唯一约束,还有些不常用的检查约束.非空约束等等,接下来我们使用test1用户分别来创建操作下. 1.创建主键约束我们先来用test1用户创建一个tab1表来测试,同时创建idcreate table tab1 (id int primary key, name char); 插入一条数据正常insert into tab1 values(2, 'a');再次插入就会提示插入失败,提示违反表[TAB1]唯一性约束.insert in

数据库之约束

维护数据的完整性数据的完整性用于确保数据库数据遵从一定的商业和逻辑规则,在oracle中,数据完整性可以使用约束.触发器.应用程序(过程.函数)三种方法来实现,在这三种方法中,因为约束易于维护,并且具有最好的性能,所以作为维护数据完整性的首选. 二.约束约束用于确保数据库数据满足特定的商业规则.在oracle中,约束包括:not null. unique, primary key, foreign key和check 五种.1).not null(非空)如果在列上定义了not null,那么当插

SQL创建表、数据库、约束、文件夹语法

use mastergo ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------创建数据库存放位置(文件夹)----------------------------

数据库类型约束自增长

一.数据类型: 整数:int,bigint,smallint 小数:float,real,decimal(长度,精度),numeric(长度,精度) 字符:char(n),varchar(n) 8000英文字符,4000汉字 text--大文本. 逻辑:bit 0,1/true/false 二进制类型:binary 8000,image 日期:datetime(1753-1-1~9999,12,31),smalldatetime(1900.1.1--2079.6.6) 数据类型的作用:建表,SQ

数据库五大约束

数据库中的五种约束及其添加方法 五大约束 1.--主键约束(Primay Key Coustraint) 唯一性,非空性 2.--唯一约束 (Unique Counstraint)唯一性,可以空,但只能有一个 3.--检查约束 (Check Counstraint) 对该列数据的范围.格式的限制(如:年龄.性别等) 4.--默认约束 (Default Counstraint) 该数据的默认值 5.--外键约束 (Foreign Key Counstraint) 需要建立两表间的关系并引用主表的列

Sql Server——运用代码创建数据库及约束

在没有学习运用代码创建数据库.表和约束之前,我们只能用鼠标点击操作,这样看起来就不那么直观(高大上)了. 在写代码前要知道在哪里写和怎么运行: 点击新建查询,然后中间的白色空白地方就是写代码的地方了. 另外就是,在这里我们最好是写好一句就执行一句,而且执行方法和C语言那些有所不同,在这里我们需要选中需要执行的代码段点击偏左上角的执行. 上图就是一句创建数据库的代码,首先选中它,再点击执行. 代码创建数据库: 在创建表和约束之前是一定要有数据库的,所以就先说怎么运用代码创建数据库吧! 创建:cre

ORCAL 数据库的约束和基本数据类型

oracle数据库约束:    定义要输入的这个值是一个什么样的值, 或者是哪个范围内的值 作用: 确保完整性, 确保精确性 1, 非空约束(not null)     记录一条信息的时候如果用户名和密码没有被记录, 那么这条记录是没有实际意义的, 创建表的时候默认是可以为空的: 2, 主键约束(Primary key)      确保表中每一行的数据的唯一性      非空, 唯一      一个表中只能有一个主键, 但是这个主键可以由多个字段(联合主键, 复合主键)来构成      可以在建