精华内容
下载资源
问答
  • MySQL修改表的主键字段

    千次阅读 2018-12-13 14:16:30
    MySQL修改表的主键字段 1. 命令 ALTER TABLE sleep_device_day_temp DROP PRIMARY KEY ,ADD PRIMARY KEY ( id );

    MySQL修改表的主键字段

    1. 命令

    ALTER TABLE sleep_device_day_temp DROP PRIMARY KEY ,ADD PRIMARY KEY ( id );
    
    展开全文
  •   geoserver通过mysql数据源发布图层的时候,默认是不会暴露mysql表的主键或联合主键字段的属性的。   比如我们用leaflet加载geoserver的wms服务的时候,使用idenfity查询图层中指定图元的在数据库中对应记录的...

      geoserver通过mysql数据源发布图层的时候,默认是不会暴露mysql表的主键或联合主键字段的属性的。
      比如我们用leaflet加载geoserver的wms服务的时候,使用idenfity查询图层中指定图元的在数据库中对应记录的属性,发现主键或者联合主键的字段是没有返回的;主键字段一般是id之类的字段,而我们常用的操作就是通过identify获取图层中指定图元的id,然后通过这个唯一id去数据库中查询更多的属性信息进行展示,如果这个id没有返回的话,后面的操作都无法继续进行
      那我们如何设置将主键字段的信息暴露出来呢,只要进行如下操作即可:
    1,进入数据存储配置页面,选择需要设置的mysql数据源
    在这里插入图片描述
    2,勾选“Expose primary keys”,然后保存即可
    在这里插入图片描述
    勾选后,进入用该数据源发布的的图层设置页面,发现要素类型中已经有主键字段了:
    在这里插入图片描述

    展开全文
  • MYSQL的分区字段,必须包含在主键字段内   MYSQL的分区字段,必须包含在主键字段内 在对表进行分区时,如果分区字段没有包含在主键字段内,如表A的主键为ID,分区字段为createtime ,按时间范围分区,代码如下: ...
    MYSQL的分区字段,必须包含在主键字段内
     
    MYSQL的分区字段,必须包含在主键字段内
    在对表进行分区时,如果分区字段没有包含在主键字段内,如表A的主键为ID,分区字段为createtime ,按时间范围分区,代码如下:
    CREATE TABLE T1 (
         id int(8) NOT NULL AUTO_INCREMENT,
         createtime datetime NOT NULL,
          PRIMARY KEY (id)
    ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
    PARTITION BY RANGE(TO_DAYS (createtime))
    (
    PARTITION p0 VALUES LESS THAN (TO_DAYS('2010-04-15')),
    PARTITION p1 VALUES LESS THAN (TO_DAYS('2010-05-01')),
    PARTITION p2 VALUES LESS THAN (TO_DAYS('2010-05-15')),
    PARTITION p3 VALUES LESS THAN (TO_DAYS('2010-05-31')),
    PARTITION p4 VALUES LESS THAN (TO_DAYS('2010-06-15')),
    PARTITION p19 VALUES LESS ThAN  MAXVALUE);
    错误提示:#1503
     A PRIMARY KEY MUST INCLUDE ALL COLUMNS IN THE TABLE'S PARTITIONING FUNCTION
    MySQL主键的限制,每一个分区表中的公式中的列,必须在主键/unique key 中包括
     
    在MYSQL的官方文档里是这么说明的
    18.5.1. Partitioning Keys, Primary Keys, and Unique Keys
    This section discusses the relationship of partitioning keys with primary keys and unique keys. The rule governing this relationship can be expressed as follows: All columns used in the partitioning expression for a partitioned table must be part of every unique key that the table may have. 
     
    In other words,every unique key on the table must use every columnin the table's partitioning expression. (This also includes the table's primary key, since it is by definition a unique key. This particular case is discussed later in this section.) For example, each of the following table creation statements is invalid: 
    分区字段必须包含在主键字段内,至于为什么MYSQL会这样考虑,CSDN的斑竹是这么解释的:
    为了确保主键的效率。否则同一主键区的东西一个在A分区,一个在B分区,显然会比较麻烦。
     
    下面讨论解决办法,毕竟在一张表里,日期做主键的还是不常见。 
    方法1: 
    顺应MYSQL的要求,就把分区字段加入到主键中,组成复合主键
    CREATE TABLE T1 (
         id int(8) NOT NULL AUTO_INCREMENT,
         createtime datetime NOT NULL,
          PRIMARY KEY (id,createtime)
    ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
    PARTITION BY RANGE(TO_DAYS (createtime))
    (
    PARTITION p0 VALUES LESS THAN (TO_DAYS('2010-04-15')),
    PARTITION p1 VALUES LESS THAN (TO_DAYS('2010-05-01')),
    PARTITION p2 VALUES LESS THAN (TO_DAYS('2010-05-15')),
    PARTITION p3 VALUES LESS THAN (TO_DAYS('2010-05-31')),
    PARTITION p4 VALUES LESS THAN (TO_DAYS('2010-06-15')),
    PARTITION p19 VALUES LESS ThAN  MAXVALUE);
     测试通过,分区成功。
     
    方法2: 
    既然MYSQL要把分区字段包含在主键内才能创建分区,那么在创建表的时候,先不指定主键字段,是否可以呢?? 
    测试如下:
    CREATE TABLE T1 (
         id int(8) NOT NULL ,
         createtime datetime NOT NULL
          ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
    PARTITION BY RANGE(TO_DAYS (createtime))
    (
    PARTITION p0 VALUES LESS THAN (TO_DAYS('2010-04-15')),
    PARTITION p1 VALUES LESS THAN (TO_DAYS('2010-05-01')),
    PARTITION p2 VALUES LESS THAN (TO_DAYS('2010-05-15')),
    PARTITION p3 VALUES LESS THAN (TO_DAYS('2010-05-31')),
    PARTITION p4 VALUES LESS THAN (TO_DAYS('2010-06-15')),
    PARTITION p19 VALUES LESS ThAN  MAXVALUE);
    测试通过,分区成功。OK
    继续添加上主键
    alter table t1 add PRIMARY KEY(ID)
    错误1503,和前面一样的错误。
    alter table t1 add PRIMARY KEY(ID,createtime)
    创建主键成功,但还是复合主键,看来是没办法了,必须听指挥了。
    主键创建成功,把ID加上自增字段设置
    alter table t1 change id id int not null auto_increment;
    alter table t1 auto_increment=1;
     
    最后结论,MYSQL的分区字段,必须包含在主键字段内。 
     
    展开全文
  • Mysql主键自增字段

    千次阅读 2020-07-06 10:21:34
    此字段仅用于排序,非主键字段。 错误的方式 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for t_menu -- ---------------------------- DROP TABLE IF ...

    需求

    菜单表涉及到人为干预排序,设计表结构时,需要单独的字段(seq)用于排序。此字段仅用于排序,非主键字段。

    错误的方式

    SET NAMES utf8mb4;
    SET FOREIGN_KEY_CHECKS = 0;
    
    -- ----------------------------
    -- Table structure for t_menu
    -- ----------------------------
    DROP TABLE IF EXISTS `t_menu`;
    CREATE TABLE `t_menu` (
      `id` bigint NOT NULL COMMENT '主键',
      `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '菜单名称',
      `seq` int auto_increment COMMENT '序号(用于排序)',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='菜单表';
    
    SET FOREIGN_KEY_CHECKS = 1;
    

    在这里插入图片描述

    出现错误 there can be only one auto column and it must be defined as a key, Time: 0.000000s

    正确的方式

    SET NAMES utf8mb4;
    SET FOREIGN_KEY_CHECKS = 0;
    -- ----------------------------
    -- Table structure for t_menu
    -- ----------------------------
    DROP TABLE IF EXISTS `t_menu`;
    CREATE TABLE `t_menu` (
      `id` bigint NOT NULL COMMENT '主键',
      `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '菜单名称',
      `seq` int auto_increment COMMENT '序号(用于排序)',
      key(seq),
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='菜单表';
    
    SET FOREIGN_KEY_CHECKS = 1;
    

    在这里插入图片描述

    测试插入数据

    insert INTO  t_menu(`id`,`name`) VALUES ('2',"2");
    insert INTO  t_menu(`id`,`name`) VALUES ('21',"23");
    

    结果
    在这里插入图片描述

    原因分析

    there can be only one auto column and it must be defined as a key, Time: 0.000000s

    这里的key 不是primary key

    参考
    mysql中key 、primary key 、unique key 与index区别

    展开全文
  • 顺序执行以下sql语句 1.删除表主键约束 ...2.添加新主键字段id ALTER TABLE mobilems_m_weex ADD id BIGINT(20) NOT NULL COMMENT ‘主键’ FIRST; 3.id赋值 #显示行号的sql SELECT @r := @r + 1 ...
  • mysql 主键字段长度设置小于实际长度查询不到数据。需要设置的长度大于实际长度才可以
  • MYSQL的分区字段,必须包含在主键字段内: 在对表进行分区时,如果分区字段没有包含在主键字段内,如表A的主键为ID,分区字段为createtime ,按时间范围分区,代码如下: CREATE TABLE T1 (  id int(8) NOT ...
  • 在插入记录时,主键的自增长序号不连续是什么原因?有人说是什么事物回滚?
  • MySQL自增主键详解

    万次阅读 多人点赞 2019-06-02 10:02:16
    2.InnoDB引擎的自增值,在MySQL5.7及之前的版本,自增值保存在内存里,并没有持久化。每次重启后,第一次打开表的时候,都会去找自增值的最大值max(id),然后将max(id)+步长作为这个表当前的自增值 select max(ai_...
  • Mysql】复合主键,每个主键字段都能使用索引吗?可重复插入吗? 文章目录【Mysql】复合主键,每个主键字段都能使用索引吗?可重复插入吗?一、主键1.1 创建主键1.2 删除主键二、复合主键2.1 Question2.2 实验环境...
  • mysql设置非主键字段自增

    千次阅读 2018-04-04 15:19:53
    思路:首先把字段设置为key,然后更改为自增;例如:alter table asynch_task ADD KEY comp_index (code);alter table asynch_task modify code BIGINT(20) auto_increment; 
  • mysql 修改主键

    万次阅读 2018-09-19 09:34:18
    重设主键字段 有时数据库操作时需要将一个主键修改为联合主键或者把主键改为其他列,这时候单纯的add primary key是没有用的,必须先删除主键约束再重新添加。 MYSQL: 1、alter table TABNAME drop primary key; ...
  • There were at least two SO question I asked where people yelled at me that I was doing my (mysql) databases wrong with only one person saying I did it fine. So... this leaves me some doubt Does this ...
  • 补充:表中已经有主键字段“id”,所以不能将“serial_num”设置为auto_increment。 所以请问各位有什么简便的思路吗? ============================================== 补充:(使用触发器后,我尝试一下...
  • Mysql增加主键或者修改主键的sql语句

    万次阅读 2018-07-31 10:43:37
    Mysql增加主键或者更改表的列为主键的sql语句 添加表字段 alter table table1 add transactor varchar(10) not Null; alter table table1 add id int unsigned not Null auto_increment primary key 修改某个表...
  • 问题:Mysql使用联合主键时,每个主键字段都能使用索引吗? 对于这个问题,很多mysql的初学者都是搞不清楚的,今天作者做了一个实验,来验证这个问题,防止在应用环境中不当的使用索引,导致mysql性能下降。 实验...
  • 参考代码: 1 /** 2 * 获取主键字段 3 * @param $table 4 * @param $database 5 * @return mixed 6 */ 7 public function get_primary_key($table,$database){ 8 $sql ...
  • 查询表结构: SELECT column_name FROM information_schema.columns WHERE ...查询主键字段名 SELECT column_name FROM INFORMATION_SCHEMA.`KEY_COLUMN_USAGE` WHERE table_name='表名' AND constraint_name='...
  • php+mysql创建字段并设置主键示例
  • 主键问题: Innodb的索引文件本身就是数据文件,即B+Tree的数据域存储的就是实际的数据,这种索引就是聚集索引。这个索引的key就是数据表的主键,因此InnoDB表数据文件本身就是主索引。 InnoDB的辅助索引数据...
  • mysql主键设置自增字段

    千次阅读 2017-11-14 11:27:56
    在数据库建表的时候,设置列自增字段,一般提示该列必须为主键,才能设置自增字段,但是,并非主键才可以设置的。 create table a( id int (11) auto_increment not null, name varchar(20), key(id) ) ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 194,122
精华内容 77,648
关键字:

mysql修改主键字段

mysql 订阅