精华内容
下载资源
问答
  • mysql联合主键
    2022-08-30 11:04:10

    DROP DATABASE ks;
    CREATE DATABASE db1;
    USE db1;
    /***
     主键:primary key
     在一张表中唯一确定一组数据,因此一张表只有一个主键
     主键约束的字段默认具有unique约束,not unll;
     构成主键的可以是一个字段也可以是多个字段
    ***/

    CREATE TABLE kecbiao (
     
     kcname VARCHAR(20) NOT NULL,
     keteach VARCHAR(20) ,
     kcstart DATE NOT NULL,
     kcend DATE NOT NULL COMMENT'结课时间',
     kctype ENUM ('必修','选修') NOT NULL,
     kcks TINYINT UNSIGNED NOT NULL COMMENT'总课时',
     kcxf TINYINT UNSIGNED NOT NULL COMMENT'学分'
    )

    /*
     1.添加主键
     直接字段后加约束primar key
     
    */

    ALTER TABLE kecbiao ADD kc INT PRIMARY KEY;
    /*
     给已有的表添加主键
    */
    ALTER TABLE kecbiao DROP PRIMARY KEY;
    ALTER TABLE kecbiao MODIFY kc INT PRIMARY KEY;
    ALTER TABLE kecbiao ADD PRIMARY KEY('kcid');
    ALTER TABLE kecbiao DROP

    DROP TABLE kecbiao;

    CREATE TABLE xubiao(
     xu_name VARCHAR(10),
     xu_xh ENUM('男','女'),
     xu_xh VARCHAR(10) PRIMARY KEY,
     xu_bj VARCHAR(10),
     xu_zy VARCHAR(15),
     xu_lx TINYINT UNSIGNED
    );
    USE DATABASE db1;
    -- 联合主键: 复合主键。由两个的字段共同构成主键
    CREATE TABLE xkb(
     kc_id INT UNSIGNED NOT NULL,
     stuid INT UNSIGNED NOT NULL,
     score DOUBLE UNSIGNED,
     PRIMARY KEY(kc_id,stuid)
    );

    更多相关内容
  • mysql联合主键的坑

    千次阅读 2022-01-07 18:54:33
    如果联合主键报类似下面错误: MySQLIntegrityConstraintViolationException: Duplicate entry '186699-1-malu8070 ' for key 'PRIMARY' 可能是有两条大小写不一致的数据。 坑二 字符串前后空格问题 注意186699-1-...

    坑一 字符类型区分大小问题

    问题: 如果联合主键报类似下面错误:

    MySQLIntegrityConstraintViolationException: Duplicate entry '186699-1-malu8070' for key 'PRIMARY'
    

    分析: 可能是有两条大小写不一致的数据,插入时联合主键忽略大小写,认为这两条数据ID重复,所以会报Duplicate entry
    例如:186699-1-malu8070 是由三个字段组成的联合主键,该条数据各字段分别对应的值为:186699 1 malu8070 ,前两个字段为int类型,不予考虑,第三个字段为varchar类型,如果没有为该varchar字段设置排序规则,则默认会忽略大小写。所以如下两条数据186699-1-malu8070186699-1-Malu8070 在插入时认为是一个主键,所以报Duplicate entry
    ``

    解决:
    1、 设置该varchar字段字符集为:*_bin 或者 *_cs

    • 例如:
    contact_num` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT '联系方式号码'
    
    • 说明:
      – utf8_bin将字符串中的每一个字符用二进制数据存储,区分大小写。
      – utf8_genera_ci不区分大小写,ci为case insensitive的缩写,即大小写不敏感。
      – utf8_general_cs区分大小写,cs为case sensitive的缩写,即大小写敏感。

    2、 创建字段指定binary。

    • 例如:
    contact_num` varchar(20)  binary  NOT NULL DEFAULT '' COMMENT '联系方式号码'
    

    坑二 字符串前后空格问题

    问题: 186699-1-malu8070186699-1-malu8070(后面有个空格),在插入时mysql认为是一条数据,也会报Duplicate entry '186699-1-malu8070 ' for key 'PRIMARY' 这种错误
    分析: mysql默认对字符串前后空格忽略,即联合主键186699-1-malu8070186699-1-malu8070(后面有个空格)认为是一个主键,所以会报Duplicate entry
    解决: 在插入前进行trim()处理去除前后空格,然后判断是否相等,相等不执行重复插入操作。

    注意:

    • 查询和插入一样存在上述两种问题
    展开全文
  • 联合主键自增问题今天上午闲来无事翻看了下数据库分类表的设计,看到这样一幕:当时我好奇的是怎么cateId自增会存在重复值的问题,然后翻看了下主键是由siteId和cateId组成。所以进行了查阅资料:当多列组成联合...

    前言

    一. 联合主键自增问题

    今天上午闲来无事翻看了下数据库分类表的设计,看到这样一幕:

    3330a07b5f0e4fdcc51b27008142647b.png

    4920e5588d0fb9941d6e7a854fbbb937.png

    当时我好奇的是怎么cateId自增会存在重复值的问题,然后翻看了下主键是由siteId和cateId组成。所以进行了查阅资料:

    当多列组成联合主键时、auto_increment属性的列并不是自顾自得一味的增长,而是配合其他主键的列 从而得到唯一约束;如上图2所示  当siteId值不同时cateId会重归1开始自增

    but这里有几个坑需要注意下,为了显眼我特地设置为红色:

    1:存储引擎必须为MyISAM

    2:自增主键必须为第二列

    下面再总结一个小知识点

    英文字母和中文汉字在不同的字符集编码下所占的字节数

    英文字母:

    字节数 : 1;编码:GB2312

    字节数 : 1;编码:GBK

    字节数 : 1;编码:GB18030

    字节数 : 1;编码:ISO-8859-1

    字节数 : 1;编码:UTF-8

    字节数 : 4;编码:UTF-16

    字节数 : 2;编码:UTF-16BE

    字节数 : 2;编码:UTF-16LE

    中文汉字:

    字节数 : 2;编码:GB2312

    字节数 : 2;编码:GBK

    字节数 : 2;编码:GB18030

    字节数 : 1;编码:ISO-8859-1

    字节数 : 3;编码:UTF-8

    字节数 : 4;编码:UTF-16

    字节数 : 2;编码:UTF-16BE

    字节数 : 2;编码:UTF-16LE

    1个字节byte=8bit(比特/位)  1bit=0.125B字节

    1个汉字两个字节 16bit,2B.

    字符:汉字,数字,字母等

    Byte,bit是存储单位

    Bit——比特

    B ——字节 byte

    KB——千字节

    MB——兆字节

    GB——吉字节

    TB——太字节

    1B=8 Bit

    1KB=1024B

    1MB=1024KB

    1GB=1024MB

    1TB=1024GB

    mysql数据库表的自增主键号不规律,重新排列

    mysql数据库表的自增主键ID乱了,需要重新排序. 原理:删除原有的自增ID,重新建立新的自增ID. 1.删除原有主键: ALTER TABLE `table_name` DROP `id`; 2. ...

    Mysql数据库表的自增主键ID号乱了,需要重新排列。

    Mysql数据库表的自增主键ID号乱了,需要重新排列. 原理:删除原有的自增ID,重新建立新的自增ID. 1,删除原有主键:ALTER TABLE `table_name` DROP `id`; 2, ...

    mysql数据库插入数据获取自增主键的三种方式(jdbc PreparedStatement方式、mybatis useGeneratedKeys方式、mybatis selectKey方式)

    通常来说对于mysql数据库插入数据获取主键的方法是采用selectKey的方式,特别是当你持久层使用mybatis框架的时候. 本文除此之外介绍其它两种获取主键的方式. 为了方便描述我们先建一张my ...

    Mybatis+Mysql插入数据库返回自增主键id值的三种方法

    一.场景: 插入数据库的值需要立即得到返回的主键id进行下一步程序操作 二.解决方法: 第一种:使用通用mapper的插入方法 Mapper.insertSelective(record): 此方法: ...

    mybatis获取插入的语句主键(自增主键)

    Mysql对自增主键ID进行重新排序

    Mysql数据库表的自增主键ID号经过一段时间的添加与删除之后乱了,需要重新排列. 原理:删除原有的自增ID,重新建立新的自增ID. 1,删除原有主键: ALTER TABLE `table_name ...

    Mysql自增主键ID重新排序方法详解

    Mysql数据库表的自增主键ID号乱了,需要重新排列. 原理:删除原有的自增ID,重新建立新的自增ID. 1,删除原有主键: ALTER TABLE `table_name` DROP `id`; 2 ...

    Mysql 修改字段长度、修改列名、新增列、修改自增主键起始值

    alter table 表名 modify column 字段名 类型; 例如 数据库中user表 name字段是varchar(30) 可以用 ) ; --修改字段长度 )--修改表列名 ); -- ...

    MySQL导入csv文件内容到Table及数据库的自增主键设置

    写在前面 目的是测试将csv文件内容导入到表中, 同时记录一下自增主键的设置. 测试采用MySQL8.0. 新建表customer_info如下, 未设置主键. 修改上表, 添加主键id, 并设置为自 ...

    Oracle设置主键自增

    oracle没有mysql那样可以有自增主键,需要自己通过创建序列才能实现自增 /*创建自增序列*/ CREATE SEQUENCE CMB_CHINA_CITYS_ID MINVALUE --最小值 ...

    随机推荐

    UIImageView变灰

    1.UIImageView圆角 CALayer *l = [cell.imgAvatarImage layer]; [l setMasksToBounds:YES]; [l setCornerRadi ...

    制作nginx和php的rpm包

    rpm包的制作真几把烦,制作php的rpm花了我3天时间,因为是根据线上环境来做的,依赖的第三方库太多,本来想把所有的第三方库做进php包,后来发现在rpmbuild -bb的时候非常耗时,而且乱七八 ...

    爬虫-html

    Uri myUri =new Uri(@sURL); WebRequest wrq = WebRequest.Create(myUri); WebResponse wrs = wrq.GetRespo ...

    编写isNull isArray isFunction的方法

    1.isNull 判断null,需要排除掉undefined和0.''(空串). function isNull(arr){ return !arr&&typeof arr!=='un ...

    【C语言天天练(二四)】内存分配

    引言: 对于C语言程序,了解它执行时在内存中是怎样分配的对于我们理解它的执行机制是很实用的.以下就总结一下C语言程序的一些内存分配知识. 一 一段C程序.编译连接后形成的可运行文件一般有代码段.数据段 ...

    【RabbitMQ+Python入门经典】兔子和兔子窝 笔记

    RabbitMQ工业级的消息队列服务器. 兔子和兔子窝 动机来源:从生产环境的电子邮件处理流程当中分支出一个特定的离线分析流程. 解决方案1: 开始使用MySQL处理,将要处理的东西放在表里面,另一个 ...

    debian9 开启rc.local服务

    由于某些软件并没有增加开启启动的服务,很多时候需要手工添加,一般我们都是推荐添加命令到 /etc/rc.local 文件,但是 Debian 9 默认不带 /etc/rc.local 文件,而 rc. ...

    向指定URL发送GET、POST方法的请求

    /** * 向指定URL发送GET方法的请求 * * @param url * 发送请求的URL * @param param * 请求参数,请求参数应该是 name1=value1&name ...

    python之Bottle框架

    一.简单的Bottle框架 1)bottle框架简介 安装 pip install bottle Bottle是一个快速.简洁.轻量级的基于WSIG的微型Web框架. 此框架只由一个 .py 文件,除 ...

    java学习第04天(语句、函数、数组)

    (3)循环结构 格式: for(初始化表达式,循环条件表达式,循环后的操作变大时){ 执行语句,循环体: } 注: a. for循环里面的连个表达式运行的顺序,初始化表达式只读一次,判断循环条件,为真 ...

    展开全文
  • 近期由于联合主键的问题,造成了慢SQL影响了线上环境,记录一下,以免忘记testuser1主键为 id,nameCREATE TABLE `testuser1` (`id` int(11) NOT NULL,`name` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NOT ...

    近期由于联合主键的问题,造成了慢SQL影响了线上环境,记录一下,以免忘记

    testuser1主键为 id,name

    CREATE TABLE `testuser1` (

    `id` int(11) NOT NULL,

    `name` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,

    `age` int(11) DEFAULT NULL,

    `gender` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,

    PRIMARY KEY (`id`,`name`)

    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

    testuser2主键为 name,id

    CREATE TABLE `testuser2` (

    `id` int(11) NOT NULL,

    `name` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,

    `age` int(11) DEFAULT NULL,

    `gender` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,

    PRIMARY KEY (`name`,`id`)

    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

    分别使用两个表的两个字段做为过滤条件,执行计划如下

    desc select * FROM testuser1 where id = 1;

    715ffd1b6b7266e7f66fe3cc53ad4adf.png

    desc select * FROM testuser1 where name = '张三';

    36aea04ac1b787945807327303746765.png

    可以很直接的看到,使用第一主键,查询索引是有用到的,而使用第二索引索引是没有用到的 。

    同理再看看另外一张表的两个字段情况:

    desc select * FROM testuser2 where name = '张三';

    desc select * FROM testuser2 where id = 1

    执行计划 分别为

    f3487bfb49799c565f710ba1d99f5f38.png

    8cc2686703f4eb05caf794053dcd9ca7.png 同样的只有第一主键用到 索引。

    可见,在联合主键的单独使用中,只有第一主键会用到主键索引,而第二主键无法使用索引,如果想用第二主键的索引,必须单独建立索引字段。 给testuser1第二 主键单独建立索引以后,使用这个索引才能生效,单独给第二主键建立索引以后再看执行计划:

    669928bfef3624298b53f3b21d037693.png 索引已经用到

    那这种联合主键索引在哪种情况下会用到呢

    explain select * FROM testuser1 where id = 2 and name='胡老板';

    总的来说mysql 联合 主键如果想用到联合主键自动建立的索引,查询时的过滤条件需要遵循规则:“带头大哥不能死,中间兄弟不能断”

    展开全文
  • 网上查看资料的时候,偶然看到一篇文章谈到mysql联合主键自增长的问题,该文章提到:当多列被设为联合主键时,auto_increment属性得列并不是自顾自得一味的增长。而是配合其他主键的列。例如:id和vid为联合主键,...
  • 展开全部什么32313133353236313431303231363533e4b893e5b19e31333365653765是复合主键?所谓的复合主键就是指你表的主键含有一个以上的字段组成比如createtabletest(namevarchar(19),idnumber,valuevarchar(10),...
  • 【MYSQL】【基础知识】【mysql联合主键如何 in查询】 SELECT * FROM `b_uu` where user_key="1628740725993" and (code,type) in(select code,sys_type from b_uu) 2.for update的使用及其注意点.
  • MySQL联合主键解释

    千次阅读 2020-07-10 21:42:42
    最近学习一点数据库的基本知识,被一个问题困惑了许久:主键是唯一的索引,那么为何一个表可以创建多个主键呢? 其实“主键是唯一的索引”这话有点歧义的。举个例子,我们在表中创建了一个ID字段,自动增长,并设为...
  • mysql联合主键

    2021-03-04 05:31:47
    -- 联合主键就是多个表的主键联合起来作为一个表的主键----这个是摘抄的别人的CREATE TABLE `products_description` (`products_id` int(11) NOT NULL,`language_id` int(11) NOT NULL default '1',`products_name` ...
  • mysql 联合主键的作用

    千次阅读 2018-05-03 17:01:14
    联合主键就是用2个或2个以上的字段组成主键。用这个主键包含的字段作为主键,这个组合在数据表中是唯一,且加了主键索引。 可以这么理解,比如,你的订单表里有很多字段,一般情况只要有个订单号bill_no做主键就可以...
  • mysql联合主键和单一主键

    千次阅读 2017-03-04 21:42:00
    一般来说,在WHERE和JOIN中出现的列需要建立索引,但也不完全如此,因为MySQL只对<,,=,>,>=,BETWEEN,IN,以及某些时候的LIKE才会使用索引。例如: SELECT t.Name FROM mytable t LEFT JOIN mytable m ON t....
  • Mysql联合主键

    万次阅读 2021-01-18 18:27:01
    阅读原文请点击摘要: mysql联合主键:用2个字段(或者多个字段,后面具体都是用2个字段组合)来确定一条记录,说明,这2个字段都不是唯一的,2个字段可以分别重复,这么设置的好处,可以很直观的看到某个重复字段的...
  • 请问一下account list表中的acc_id和acc_bankNum设置为联合主键,怎么将该表acc_bankNum和user list中的acc_bankNum设置为外键 ![用户表](https://img-ask.csdn.net/upload/201903/06/1551872995_866154.png) !...
  • Mysql 创建联合主键

    千次阅读 2021-01-18 18:27:01
    Mysql 创建联合主键2008年01月11日 星期五 下午 5:21使用primary key (fieldlist)比如:...aa,bb为联合主键不知道是不是因为mysql(6.0)的版本问题,还是各版本都是这种情况,mysql中创建联合主键联合主键列名之外...
  • 自增 null
  • 百度到的内容都是关于单个主键的大小写问题,由于自己的数据库出问题的表的主键是由id和name字段组成的联合主键,所以解决方法稍微有些不一样。在此记录一下这个问题及解决方法。 通过百度知道解决的基本方法是在...
  • mysql添加联合主键

    千次阅读 2022-04-23 14:12:16
    联合主键,指的是把两个列看成是一个整体,这个整体是不为空,唯一,不重复 1.创建表的同时创建联合主键 格式: create table 表名( 列名1 数据类型, 列名2 数据类型, constraint 主键约束的名字 primary key...
  • mysql创建联合主键

    千次阅读 2022-01-17 11:21:53
    mysql中,每张表中有且只能一个主键,但是联合主键可以有很多! mysql创建联合主键 create table mytable ( -> a int, -> b char(10), -> c date, -> primary key (a,b); 因此,在mytable中,a,b两个...
  • 1.主键、联合主键、外键 1.什么是主键 主键是在多条记录中用于确定一条记录时使用的标识符。主键具备一下特征,以和其它列进行区分。 没有重复的值 不允许输入空值 2.创建主键、联合主键 主键的两种创建方式 ...
  • 这个问题要是问外国开发者,TA...至于这玩意儿你翻译成“联合主键”、“组合主键”、“混合主键”还是“复合主键”,都特么是一回事儿。结果到了中文编程界,不知道是哪位神仙起的头儿,非得编个“联合主键”和“复...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 63,013
精华内容 25,205
关键字:

mysql联合主键

mysql 订阅