zoukankan      html  css  js  c++  java
  • mysql

    一:规范化

      1NF:若关系模式R的每一个分量是不可再分的数据项,则关系模式R属于第一范式.

      2NF:若关系模式R包含于1NF(符合第一范式),且每一个非主属性完全依赖于码,则关系模式R包含于2NF

      3NF:若关系模式R(U,F)中若不存在这样的码X,属性组Y及非主属性Z(Z不是Y的真子集)使得X-->Y(Y-/->X),Y-->Z成立,则关系模式R包含于3NF(即当2NF消除了非主属性对码的传递依赖函数,则称为3NF).

        U为属性集,F是U上的一组函数依赖.

      

    #mysql添加索引命令
    #创建脚本
    #1.PRIMARY KEY(主键索引)
    #mysql>ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )
    #2.UNIQUE(唯一索引)
    #mysql>ALTER TABLE `table_name` ADD UNIQUE (`column` )
    #3.INDEX(普通索引)
    #mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column` )
    #4.FULLTEXT(全文索引)
    #mysql>ALTER TABLE `table_name` ADD FULLTEXT ( `column` )
    #5.多列索引
    #mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )
    /*
    描述:
    PRIMARY, INDEX, UNIQUE 这3种是一类
    PRIMARY 主键。 就是 唯一 且 不能为空。
    INDEX 索引,普通的
    UNIQUE 唯一索引。 不允许有重复。
    FULLTEXT 是全文索引,用于在一篇文章中,检索文本信息的。
    */
    测试外键约束,和级联更新,级联删除
    CREATE TABLE `user`
    (
    `id` INT(10) unsigned PRIMARY KEY NOT NULL COMMENT '用户编号' AUTO_INCREMENT,
    `user_name` VARCHAR(25) COMMENT '用户名称',
    `description` VARCHAR(25) COMMENT '描述'
    )ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

    INSERT user VALUES (1 ,'泥瓦匠','他有一个小网站 bysocket.com');
    INSERT user VALUES (2 ,'泥瓦匠','他有一个小网站 bysocket.com');
    /* 外键约束*/
    DROP TABLE `t_address`;
    CREATE TABLE `t_address`(#反引号一般在Esc键的下方,和~在一起。它是为了区分MySQL的保留字与普通字符而引入的符号。 '字符串' like _一个字符 %多个字符
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `province` varchar(32) DEFAULT NULL,
    `city` varchar(32) DEFAULT NULL,
    `detialAddress` varchar(200) DEFAULT NULL,
    `user_id` int(10) unsigned DEFAULT NULL ,
    PRIMARY KEY (`id`),
    KEY `user_id` (`user_id`),
    CONSTRAINT `t_address_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`)
    ON DELETE CASCADE ON UPDATE CASCADE
    ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
    INSERT INTO t_address(province, city, detialAddress, user_id) VALUES ('河南','安阳','文峰区','1');
    INSERT INTO t_address(province, city, detialAddress, user_id) VALUES ('河南','安阳','文峰区','2');
    SELECT * FROM user;
    SELECT * FROM t_address;
    UPDATE user SET id = 3 WHERE id=2;
    DELETE FROM user WHERE id = 3;
    建表之后添加约束: ALTER TABLE t_address ADD CONSTRAINT `user_address_fk1` FOREIGN KEY (`user_id`) REFERENCES user(`id`);# ON UPDATE CASCADE ON DELETE CASCADE ;
    建立外键约束时报错:ERROR 1005
    已知的原因: 

    1, 两个字段的类型或者大小不严格匹配,例如,如果一个是INT(10), 那么外键也必须设置成INT(10), 而不是 INT(11) 也不能是 TINYINT. 你得使用 SHOW 命令来查看字段的大小,因为一些查询浏览器有时候把 int(10) 和int(11) 都显示为integer。另外,你还必须确定两个字段是否一个为 SIGNED,而另一个又是UNSIGNED(有符号数,无符号数), 这两字段必须严格地一致匹配. 

    2, 你试图引用的其中一个外键没有建立起索引,或者不是一个primary key , 如果其中一个不是primary key 的放,你必须为它创建一个索引。 (我遇上到错误)

    3, 外键的名字是一个已经存在的一个键值了,这个时候,你应该检查你的数据库以确保外健名字是唯一的,或者你在键名后面加上几个随机的字符以测试是否是这个原因。 

    4, 其中一个或者两个表是MyISAM引擎的表,若想要使用外键约束,必须是InnoDB引擎,(实际上,如果两个表都是MyISAM 引擎的,这个错误根本不会发生,但也不会产生外键),你可以通过查询浏览器来设置表的引擎类型 

    5, 你可能设置了ON DELETE SET NULL, 但是相关的键的字段又设置成了NOTS NULL 值。你可能通过修改cascade 的属性值或者把字段属性设置成 allow null 来搞定这个bug. 

    6, 请确定你的Charset 和 Collate 选项在表级和字段级上的一致 

    7, 你可能设置为外键设置了一个默认值,如 default=0 

    8, 在这个关系里面,其中的一个字段是一个混合键值中的一个,它没有自己独立的索引,这时,你必须为它创建一个独立的索引。 

    9, ALTER 声明中有语法错误 

    10. 要连接的两个表的编码格式不同



  • 相关阅读:
    Linux 设备驱动 Edition 3(中文版)
    内核和用户空间共享内存的实现例程proc和mmap
    mmap的详细使用(用户空间)
    使用 I/O 内存from LDD3
    关于strcpy、memset、memcpy的使用详解
    get_free_page 和其友
    Linux调试技术介绍
    关于信息时代的学习
    [恢]hdu 1196
    [恢]hdu 1157
  • 原文地址:https://www.cnblogs.com/lovenannan/p/9574251.html
Copyright © 2011-2022 走看看