您的位置:首页 > 博客中心 > 数据库 >

漫谈MySQL primaryKey

时间:2022-03-13 22:40

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‘
    );
    插入一条数据,qq号仍为10000,因为数据库内已经存在其10000这样的数据,
    而且最最主要的是其QQ号为主键,所以报错,信息如下
    #1062 - Duplicate entry ‘10000‘ for key ‘PRIMARY‘
    */
    INSERT INTO qq( qq_id, nick_name )
    VALUES (
    ‘10000‘, ‘chongpig‘
    )
    虽然没有将qq号字段设NOT NULL约束,可是因为其是主键,所以其不能为NULL
    #1048 - Column ‘qq_id‘ cannot be null
    */
    INSERT INTO qq( qq_id, nick_name )
    VALUES (
    NULL , ‘chongpig‘
    )

    创建防火墙表,将host 和port组合设为主键,注意我没有将port设NOT 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‘
    );
    插入失败,因为host 加port的主键值202.65.3.87-21已经存在了
    #1062 - Duplicate entry ‘202.65.3.87-21‘ for key ‘PRIMARY‘
    */
    INSERT INTO firewall (
    host ,
    port ,
    access
    )
    VALUES (
    ‘202.65.3.87‘, ‘21‘, ‘allow‘
    );
    没声明NOT NULl port也不能为NULL
    #1048 - Column ‘port‘ cannot be null
    */
    INSERT INTO firewall( host, port, access )
    VALUES (
    ‘192.168.0.1‘, NULL , ‘deny‘
    )

    在这个示例中,host和port都可以重复,但是不能同时重复,因为其是组合主键。且二者都不能被插入NULL,因为其是主键。

    我们可以看一下phpmyadmin,看一下port字段的默认值为0,这和昨天我们讲的索引规则是一样的,NOT NULL并且给设了DEFAULT,因其是整型所以为0,如果其为字符串的话,默认值就是”

    漫谈MySQL primaryKey,布布扣,bubuko.com

    相关推荐

    电脑软件

    热门排行

    今日推荐

    热门手游