精华内容
下载资源
问答
  • 添加语法如下:“ALTER TABLE ...”【示例1】假设订房信息表(Orderinfo),没有创建主键,现在需要将Orderinfo表中的customerID和OrderID两列设置成主键。创建的语法如下:“ALTER TABLE ORDERINFOADD CONSTRAINT ...

    添加语法如下:

    “ALTER TABLE table_name

    ADD CONSTRAINT pk_table_name PRIMARY KEY(列名1,列名2);”

    【示例1】假设订房信息表(Orderinfo),没有创建主键,现在需要将Orderinfo表中的customerID和OrderID两列设置成主键。创建的语法如下:

    “ALTER TABLE ORDERINFO

    ADD CONSTRAINT pk_orderinfo PRIMARY KEY(customerID,OrderID);”

    *通常情况下,当在修改表时要设置表中某个列的主键约束时,要确保设置成主键约束的列中值不能够有重复的,并且要保证是非空的。否则,是无非设置主键约束的。

    删除主键约束

    删除主键约束的方法语句如下:

    “ALTER TABLE table_name

    DROP PRIMARY KEY”

    【示例2】删除客户信息表(customerinfo)中主键约束。代码如下:

    “ALTER TABLE CUSTOMERINFO

    DROP PRIMARY KEY”

    *由于主键约束在一个表中只能有一个,因此不需要指定主键名就可以删除一个表中的主键约束。

    展开全文
  • 联合主键的意义:用2个字段(或者多个字段,后面具体都是用2个...效果图如下: (可以很清楚的知道某个小区的记录个数)接下来说道设置联合主键的细节:1.mysql的数据引擎必须是MyISAM修改表引擎的语句:alter table use...

    联合主键的意义:用2个字段(或者多个字段,后面具体都是用2个字段组合)来确定一条记录,说明,这2个字段都不是唯一的,2个字段可以分别重复,这么设置的好处,可以很直观的看到某个重复字段的记录条数。

    一般设置联合主键时,其中一个自增。效果图如下:

    a9e9da2021a032ebd5d3388b150e6c8b.png

    (可以很清楚的知道某个小区的记录个数)

    接下来说道设置联合主键的细节:

    1.mysql的数据引擎必须是MyISAM

    修改表引擎的语句:

    alter table user engine=myisam

    2.设置自增的主键不能放在最左边

    测试:

    数据库结构:

    CREATE TABLE `user` (

    `id` int(11) NOT NULL AUTO_INCREMENT,

    `username` varchar(255) NOT NULL,

    `nack` varchar(255) DEFAULT NULL,

    PRIMARY KEY (`username`,`id`)

    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

    model实体:

    package com.lgy.model;

    import javax.persistence.GeneratedValue;

    import javax.persistence.GenerationType;

    import javax.persistence.Id;

    import javax.persistence.Table;

    @Table(name="user")

    public class User {

    @Id

    private int id;

    /**

    * @GeneratedValue JPA主键生成策略,自增长

    */

    @Id

    @GeneratedValue(strategy = GenerationType.IDENTITY)

    private String username;

    private String nack;

    public int getId() {

    return id;

    }

    public void setId(int id) {

    this.id = id;

    }

    public String getUsername() {

    return username;

    }

    public void setUsername(String username) {

    this.username = username;

    }

    public String getNack() {

    return nack;

    }

    public void setNack(String nack) {

    this.nack = nack;

    }

    }

    持久层:

    package com.lgy.mapper;

    import com.lgy.model.User;

    public interface UserDao {

    int insert(User user);

    }

    Mapper文件:

    id, username, nack

    insert into user

    null,

    #{username},

    #{nack}

    测试结果:

    符合预期想象.

    展开全文
  • 一、复合主键所谓的复合主键 就是指你表的主键含有一个以上的字段组成,不使用无业务含义的自增id作为主键。比如create table test(name varchar(19),id number,value varchar(10),primary key (name,id))上面的name...

    一、复合主键

    所谓的复合主键 就是指你表的主键含有一个以上的字段组成,不使用无业务含义的自增id作为主键。

    比如

    create table test

    (

    name varchar(19),

    id number,

    value varchar(10),

    primary key (name,id)

    )

    上面的name和id字段组合起来就是你test表的复合主键 ,它的出现是因为你的name字段可能会出现重名,所以要加上ID字段这样就可以保证你记录的唯一性 ,一般情况下,主键的字段长度和字段数目要越少越好 。

    这里就会有一个疑惑?  主键是唯一的索引,那么为何一个表可以创建多个主键呢?

    其实“主键是唯一的索引”这话有点歧义的。举个例子,我们在表中创建了一个ID字段,自动增长,并设为主键,这个是没有问题的,因为“主键是唯一的索引”,ID自动增长保证了唯一性,所以可以。

    此时,我们再创建一个字段name,类型为varchar,也设置为主键,你会发现,在表的多行中你是可以填写相同的name值的,这岂不是有违“主键是唯一的索引”这句话么?

    所以我才说“主键是唯一的索引”是有歧义的。应该是“当表中只有一个主键时,它是唯一的索引;当表中有多个主键时,称为复合主键,复合主键联合保证唯一索引”。

    为什么自增长ID已经可以作为唯一标识的主键,为啥还需要复合主键呢。因为,并不是所有的表都要有ID这个字段,比如,我们建一个学生表,没有唯一能标识学生的ID,怎么办呢,学生的名字、年龄、班级都可能重复,无法使用单个字段来唯一标识,这时,我们可以将多个字段设置为主键,形成复合主键,这多个字段联合标识唯一性,其中,某几个主键字段值出现重复是没有问题的,只要不是有多条记录的所有主键值完全一样,就不算重复。

    二、联合主键

    联合主键顾名思义就是多个主键联合形成一个主键组合(主键原则上是唯一的,别被唯一值所困扰。)

    联合主键的意义:用2个字段(或者多个字段,后面具体都是用2个字段组合)来确定一条记录,说明,这2个字段都不是唯一的,2个字段可以分别重复,这么设置的好处,可以很直观的看到某个重复字段的记录条数。

    一个简单的例子

    主键A跟主键B组成联合主键

    主键A跟主键B的数据可以完全相同,联合就在于主键A跟主键B形成的联合主键是唯一的。

    下例主键A数据是1,主键B数据也是1,联合主键其实是11,这个11是唯一值,绝对不充许再出现11这个唯一值。(这就是多对多关系)

    主键A数据 主键B数据

    1      1

    2      2

    3      3

    主键A与主键B的联合主键值最多也就是

    11

    12

    13

    21

    22

    23

    31

    32

    33

    总结:以我来看复合主键就是含有一个以上的字段组成,如ID+name,ID+phone等,而联合主键要同时是两个表的主题组合起来的。这是和复合主键最大的区别!

    以上就是本文关于初探SQL语句复合主键与联合主键的全部内容,希望对大家有所帮助。感兴趣的朋友可以参阅:几个比较重要的MySQL变量、MySQL prepare原理详解、MySQL删除有外键约束的表数据方法介绍等,有什么问题可以随时留言,大家一起讨论,共同进步。

    展开全文
  • alter table table1 add id int unsigned not null auto_increment primary key修改某个表的字段类型及指定为空或非空alter table 表名称 change 字段名称 字段名称 字段类型 [是否允许非空];a...

    添加表字段

    alter table table1 add transactor varchar(10) not null;

    alter table table1 add id int unsigned not null auto_increment primary key

    修改某个表的字段类型及指定为空或非空

    alter table 表名称 change 字段名称 字段名称 字段类型 [是否允许非空];

    alter table 表名称 modify 字段名称 字段类型 [是否允许非空];

    alter table 表名称 modify 字段名称 字段类型 [是否允许非空];

    修改某个表的字段名称及指定为空或非空

    alter table 表名称 change 字段原名称 字段新名称 字段类型 [是否允许非空

    删除某一字段

    alter table mytable drop 字段 名;

    添加唯一键

    alter table `test2` add unique ( `userid`)

    修改主键

    alter table `test2` drop primary key ,add primary key ( `id` )

    增加索引

    alter table `test2` add index ( `id` )

    alter table `category ` modify column `id` int(11) not null auto_increment first ,add primary key (`id`);

    修改主键的sql语句块如下

    mailbox 表新增字段

    drop procedure if exists mailbox_column_update;

    create procedure mailbox_column_update() begin

    -- 新增删除标志列

    if not exists(select 1 from information_schema.columns where table_schema='cbs' and table_name='mailbox' and column_name='delete_flag') then

    alter table mailbox add delete_flag int default 2 not null;

    end if;

    -- 新增删除日期列

    if not exists(select 1 from information_schema.columns where table_schema='cbs' and table_name='mailbox' and column_name='delete_date') then

    alter table mailbox add delete_date int default 0 not null;

    end if;

    -- 如果存在字段account_mail,则修改字段长度

    if exists(select 1 from information_schema.columns where table_schema='cbs' and table_name='mailbox' and column_name='email_account')

    then

    alter table mailbox modify column email_account varchar(320);

    end if;

    -- 如果不存在主键列,则设置双主键

    if ((select count(*) from information_schema.key_column_usage where table_schema ='cbs' and table_name='mailbox' and constraint_name ='primary' and (column_name ='email_account' or column_name = 'company_id'))=0)then

    alter table mailbox add primary key (company_id,email_account);

    -- 如果只存在一个主键列

    elseif ((select count(*) from information_schema.key_column_usage where table_schema ='cbs' and table_name='mailbox' and constraint_name ='primary' and (column_name ='email_account' or column_name = 'company_id'))<2)then

    alter table mailbox drop primary key,add primary key (company_id,email_account);

    end if;

    end;

    call mailbox_column_update();

    drop procedure if exists mailbox_column_update;

    补充:mysql 修改主键自增,新增联合主键

    alter table `onduty_history`

    modify column `id` int(11) not null auto_increment first ,

    modify column `name` varchar(50) character set utf8 collate utf8_general_ci not null after `id`,

    modify column `onduty_date` datetime not null after `name`,

    add unique key (`id`),

    add primary key (`name`, `onduty_date`);

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持萬仟网。如有错误或未考虑完全的地方,望不吝赐教。

    如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

    展开全文
  • 今天闲来无事,所以想测试一下WHERE条件中一个字段或者多个字段(排序),之间的多个主键索引联合索引的比较。一切以你自己的环境和数据量为参考。以下情况仅为dodo的个人电脑环境下面的测试。欢迎拍砖和指引。另外此处...
  • 添加语法如下:“ALTER TABLE ...”【示例1】假设订房信息表(Orderinfo),没有创建主键,现在需要将Orderinfo表中的customerID和OrderID两列设置成主键。创建的语法如下:“ALTER TABLE ORDERINFOADD CONSTRAINT ...
  • 所谓的复合主键 就是指你表的主键含有一个以上的字段组成,不使用无业务含义的自增id作为主键。比如create table test(name varchar(19),id number,value varchar(10),primary key (name,id))上面的name和id字段组合...
  • mysql 修改主键

    2021-03-15 03:13:23
    mysql 修改主键2018-09-19 09:34阅读数 12ALTER TABLE `test2` DROP PRIMARY KEY ,ADD PRIMARY KEY ( `id` )重设主键字段有时数据库操作时需要将一个主键修改联合主键或者把主键改为其他列,这时候单纯的add ...
  • mysql 插入数据唯一键冲突前提: 修改数据三种可用的方法解决主键冲突的问题1. insert into ... on duplicate key update set ...2. update ... set = case key when ... then ... when ... then ... else end where ...
  • mysql怎么添加复合主键

    千次阅读 2021-01-19 17:14:54
    主键约束即在表中定义一个主键来唯一确定表中每一行数据的标识符。主键可以是表中的某一列或者多列的组合,其中由多...可以在创建表时添加复合主键,此时主键由多个字段联合组成,语法规则如下:PRIMARY KEY [字段1...
  • MySQL [xxx_mall]> alter table shop_base_info AUTO_INCREMENT=11000;Query OK, 0 rows affected (0.01 sec)Records: 0 Duplicates: 0 Warnings: 0MySQL [xxx_mall]> SELECT-> auto_increment-> FRO...
  • [Author]: kwusqoop导入关系库更新联合主键的问题,把数据从hive中导入关系库,如果关系库表有联合主键的情况,且需要把新导入的数据更新原来的数据。1、创建关系库表CREATE TABLEtest123(id INT NOT NULL,name ...
  • 联合主键自增问题今天上午闲来无事翻看了下数据库分类表的设计,看到这样一幕:当时我好奇的是怎么cateId自增会存在重复值的问题,然后翻看了下主键是由siteId和cateId组成。所以进行了查阅资料:当多列组成联合...
  • 建表是创建复合主键CREATE TABLE borrow_info(book_id int not null auto_increment comment '图书编号',user_id int not null comment '读者编号',borrow_out_date date comment '借阅日期',borrow_retur...
  • @Adrian Cornish的回答是正确的。... 在某些版本的mysql中,错误消息格式错误(从5.5.17开始,此错误消息仍然存在alter table parent drop column id;ERROR 1025 (HY000): Error on rename of'./test/#sql-a04...
  • 后来因为查询方式变更,要求将UID和Time两个字段做联合主键,此时表结构如下: 1 2 3 4 5 6 7 +-------+----------+------+-----+---------------------+-------+ | Field | Type |Null |Key |Default | ...
  • alter table table1 add id int unsigned not Null auto_increment primary key修改某个表的字段类型及指定为空或非空alter table 表名称 change 字段名称 字段名称 字段类型 [是否允许非空];a...
  • 修改表时给表添加联合主键约束添加语法如下:“ALTER TABLE table_nameADD CONSTRAINT pk_namePRIMARY KEY(列名1,列名2);”【示例1】假设订房信息表(Orderinfo),没有创建主键,现在需要将Orderinfo表中的...
  • 增、删、改、查加“”表示为普通字符mysql> insert into t9 values("NULL",21,"game,flim");+++++++++++++++++++++++++++++++添加新字段mysql> alter table t4 add age int(2) default 19; //默认在最后面...
  • MySQL的高级部分

    2021-03-03 20:35:55
    (1)存储引擎的介绍介绍:当客户端发送一条SQL语句给服务器...MySQL的存储引擎:- MySQL的核心就是存储引擎,MySQL可以设置多种不同的存储引擎,不同的存储引擎在索引、存储、以及锁的策略上是不同的。- Mysql5.5之前...
  • mysql在创建数据库的时候,字符集设置的不是utf8而是utf9mb4,在导入sql脚本的时候,发现提示如下错误:​从上图中,我们可以看出,使用的是innodb及字符集。错误提示是长度太长了:Specified key was too long; ...
  • mysql修改列名为主键的方法:使用“ALTER TABLE 数据表名 ADD PRIMARY KEY(字段名/列名);”语句设置即可;设置成主键约束的字段/列要确保值不能有重复,并且是非空的。主键(PRIMARY KEY)的完整称呼是“主键约束”,...
  • mysql如何添加主键

    千次阅读 2021-01-18 18:15:25
    MySQL 主键约束是一个列或者列的组合,其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键,通过它可以强制表的实体完整性。那么在MySQL中如何添加主键约束?下面本篇文章就给大家介绍一下。主键约束即在...
  • MySQL主键顺序排序

    2021-01-20 00:50:05
    MySQL通常按插入顺序将数据拉出,这可能是主键,但除此之外,如果你拉出主键列名并按顺序将其放入,那么技术上可以做同样的事情。SELECT whatever FROM tableORDER BY( SELECT `COLUMN_NAME`FROM `information_...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 34,563
精华内容 13,825
关键字:

mysql修改联合主键

mysql 订阅