zoukankan      html  css  js  c++  java
  • 12、浅谈MySQL主键

    以下内容摘引转自[1]

    主键没有着明确的概念定义,其是索引的一种,并且是唯一性索引的一种,且必须定义为“PRIMARY KEY”,主键不能重复,一个表只能有一个主键。

    1、声明主键的方法:

    您可以在创建表的时候就为表加上主键,如:

    CREATE TABLE tbl_name ([字段描述省略...], PRIMARY KEY(index_col_name));

    也可以更新表结构时为表加上主键,如:

    ALTER TABLE tbl_name ADD PRIMARY KEY (index_col_name,…);

    /*

    创建一个qq表,将qq_id设为主键,且没有对其进行NOT NULl约束

    */

    create table qq(

    qq_id int(10),

    nick_name varchar(255) not null,

    primary key (qq_id))

    /*

    插入一条数据,将qq号设为10000(咱也幻想一下),昵称设为"simaopig"

    */

    INSERT INTO qq( qq_id, nick_name )

    VALUES (

    '10000', 'simaopig');

    2、示例

    主键被认为是NOT NULLUNIQUE约束最好的结合。如果这些列没有被明确地定义为NOT NULLMySQL会隐含地定义这些列。

    3、主键也是索引:

    刚才已经说了,主键其实也是索引,甚至在MySQL的术语里面“键”就等于“索引”,所以“外键”一定要先设为“索引”。所以主键也应该和索引一样,既可以作用于单独的字段,又可以作用于多个字段。

    举个简的例子吧,我住3单元,501室,我叫小小子,那么只有3单元501室才能在本小区表里面唯一确定我家。因为2单元,501室住着的可能也是个小小子,所以只有两个字段才能唯一确定我,也就是说可以二者组合作为主键。组合的主键,每个列都会隐含定义NOT NULL约束,且其二者加在一起被定义了UNIQUE 惟一约束。

    /*

    创建防火墙表,将host port组合设为主键,注意我没有将portNOT NULL约束

    */

    create table firewall(

    host varchar(11) not null,

    port smallint(4),

    access enum('deny', 'allow') not null,

    primary key (host,port))

    /*

    插入一条新的记录,没有啥问题

    1 row(s) inserted.

    */

    INSERT INTO firewall (

    host ,

    port ,

    access)

    VALUES (

    '202.65.3.87', '21', 'deny');

    原文:

    [1] 浅谈MySQL主键 http://zhumeng8337797.blog.163.com/blog/static/100768914201110245101552/

  • 相关阅读:
    QT 小总结
    Qt Creator 中,如何更改h,cpp,ui的文件并不让ui失效
    设计模式全方面练习(1)
    设计模式 笔记 模版方法模式 Template Method
    设计模式 笔记 策略模式 Strategy
    设计模式 笔记 状态模式 State
    设计模式 笔记 观察者模式 Observer
    effective c++ 笔记 (49-52)
    设计模式 笔记 备忘录模式 Memento
    设计模式 笔记 中介者模式 Mediator
  • 原文地址:https://www.cnblogs.com/mydomain/p/2657182.html
Copyright © 2011-2022 走看看