精华内容
下载资源
问答
  • mysql表的组合主键

    2021-02-03 04:58:29
    mysql表的组合索引是由表的多列字段值的拼接成的主键,来形成唯一性。和以往单个列的普通主键如id(自增长)的区别是一个字段主键和多个字段的区别。组合索引就是复合索引。如果一个表有id,name,sex,nunber三个字段,...

    mysql表的组合索引是由表的多列字段值的拼接成的主键,来形成唯一性。和以往单个列的普通主键如id(自增长)的区别是一个字段主键和多个字段的区别。

    组合索引就是复合索引。

    如果一个表有id,name,sex,nunber三个字段,那普通主键表的主键为id值区分唯一性。联合主键为name+number值来区别唯一性,或name+sex+number拼接的值来区分唯一性。

    组合索引

    1.新建表的设置create table test(

    id int(10) not null auto_increment,

    name varchar(20) not null,

    sex int(1) not null,

    primary key (id,name,sex)

    );

    ba514ebdee4fde24d4a81ed520245350.png

    2.已有表修改为组合索引alter table 表名 add index index_name (name,sex,number);

    *如果执行上面操作提示表不能有多个主键错误时,需要先清理主键约束,再执行添加。alter table 表名 DROP PRIMARY KEY add primary key (字段1,字段2,字段3);

    3.适用场景举例

    文章管理中的章节、小节、页码字段形成组合索引,索引先会找到章节再找到对应的小节,这样就提高了查询的效率。

    展开全文
  • mysql如何给表设置组合主键

    千次阅读 2021-01-28 12:52:21
    软件安装:装机软件必备包SQL是Structured Query Language(结构化查询语言)的缩写。SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言。...mysql 中有时候会遇到多个字段来表示数据的唯一性...

    软件安装:装机软件必备包

    SQL是Structured Query Language(结构化查询语言)的缩写。SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言。在使用它时,只需要发出“做什么”的命令,“怎么做”是不用使用者考虑的。SQL功能强大、简单易学、使用方便,已经成为了数据库操作的基础,并且现在几乎所有的数据库均支持SQL。mysql 中有时候会遇到多个字段来表示数据的唯一性,那么这里就会用到组合主键了。

    1.编写创建表sql代码;

    e687b6e9b02a70dc840ee943d06a7740.png

    2.设置联合主键;

    da7e7dbc2650b952fb130b35ed4ba1b6.png

    3.执行代码,发现出现错误;

    0ee48d6241afbd63ebadc14f47f919e3.png

    4.解决方案:给id自增列加UNIQUE唯一索引;

    展开全文
  • 1.创建主键语法 ALTER TABLE table_name ADD CONSTRAINT pk_name ...使用组合主键 如果一列不能唯一区分一个表里的记录时,可以考虑多个列组合起来达到区分表记录的唯一性,形式 ①创建时:create table sc ( student
  • Mysql 创建联合主键

    千次阅读 2021-01-18 18:24:01
    Mysql 创建联合主键2008年01月11日 星期五 下午 5:21使用primary key (fieldlist)比如:create table mytable (aa int,bb char(8),cc date,primary key (aa,bb ));aa,bb为联合主键不知道是不是因为mysql(6.0)的版本...

    Mysql 创建联合主键

    2008年01月11日 星期五 下午 5:21

    使用primary key (fieldlist)

    比如:

    create table mytable (

    aa int,

    bb char(8),

    cc date,

    primary key (aa,bb )

    );

    aa,bb为联合主键

    不知道是不是因为mysql(6.0)的版本问题,还是各版本都是这种情况,mysql中创建联合主键,联合主键列名之外不可以用单引号括上,否则出现错误,无法创建,报错是该列在表中不存在。例子代码如下:

    CREATE TABLE `book_sort2` (

    `sort_id2` varchar(20) NOT NULL,

    `sort_id1` varchar(20) NOT NULL COMMENT '一类id',

    `sort_name2` varchar(20) NOT NULL COMMENT '二类名称',

    PRIMARY KEY (sort_id2,sort_id1),

    KEY `sort_id1` (`sort_id1`),

    CONSTRAINT `book_sort2_fk` FOREIGN KEY (`sort_id1`) REFERENCES `book_sort1` (`sort_id1`)

    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    展开全文
  • mysql联合主键

    万次阅读 2018-03-27 13:48:58
    1、hibernate配置联合主键1.1 联合主键的好处:联合主键的好处是不需要因为需要主键而增加一个无用的主键列1.2 联合主键的建表语句CREATE TABLE `HTTP_TERMINAL_DETAIL_STATISTICS` ( `TIME` CHAR(14) NOT NULL ...

    1、hibernate配置联合主键

    1.1 联合主键的好处:

    联合主键的好处是不需要因为需要主键而增加一个无用的主键列

    1.2 联合主键的建表语句

    CREATE TABLE `HTTP_TERMINAL_DETAIL_STATISTICS` (
    	`TIME` CHAR(14) NOT NULL COMMENT '时间',
    	`TERMINAL_TYPE` VARCHAR(128) NOT NULL COMMENT '终端类型',
    	`TERMINAL_ID` VARCHAR(128) NOT NULL COMMENT '终端标识',
    	`QUANTITY` INT(11) DEFAULT NULL COMMENT '请求数量',
    	`CREATE_TIME` TIMESTAMP NULL DEFAULT NULL COMMENT '创建时间',
    	`UPDATE_TIME` TIMESTAMP NULL DEFAULT NULL COMMENT '更新时间',
    	`IS_DELETE` TINYINT(1) NULL DEFAULT NULL COMMENT '是否删除',
    	`VERSION` INT(11) DEFAULT NULL COMMENT '乐观锁',
    	`HOUR_NAME` VARCHAR(128) NULL DEFAULT NULL COMMENT '小时标识',
    	`DAY_NAME` VARCHAR(128) NULL DEFAULT NULL COMMENT '天数标识',
    	`MONTH_NAME` VARCHAR(128) NULL DEFAULT NULL COMMENT '月份标识',
    	`YEAR_NAME` VARCHAR(128) NULL DEFAULT NULL COMMENT '年份标识',
    	PRIMARY KEY (`TIME`,`TERMINAL_TYPE`,`TERMINAL_ID`)
    ) DEFAULT CHARSET=utf8;

    1.3 联合主键的hibernate配置

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC 
    	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    <hibernate-mapping package="com.sinovoice.hcicloud.daoorm.report">
    	
    	<class name="HttpTerminalDetail" table="HTTP_TERMINAL_DETAIL_STATISTICS">
                <!-- 联合主键 -->
    	    <composite-id>
                    <key-property name="time" type="java.lang.String" column="TIME" />
                    <key-property name="terminalType" type="java.lang.String" column="TERMINAL_TYPE" />
                    <key-property name="terminalId" type="java.lang.String" column="TERMINAL_ID" />
                </composite-id>
            
                    <!-- 乐观锁配置 version元素必须紧挨着id后面-->
    		<version name="version" column="VERSION" type="java.lang.Integer"></version>
    		
    		<property name="quantity" type="java.lang.Integer" column="QUANTITY"/>
    		<property name="createTime" column="CREATE_TIME"/>
    		<property name="updateTime" column="UPDATE_TIME"/>		
    		<property name="isDelete" type="java.lang.Integer" column="IS_DELETE"/>
    		
    		<property name="hourName" type="java.lang.String" column="HOUR_NAME"/>
    		<property name="dayName" type="java.lang.String" column="DAY_NAME"/>
    		<property name="monthName" type="java.lang.String" column="MONTH_NAME"/>		
    		<property name="yearName" type="java.lang.String" column="YEAR_NAME"/>
    	</class>
    </hibernate-mapping>

    2、乐观锁

    2.1 什么是乐观锁

    使用数据版本(Version)记录机制实现,这是乐观锁最常用的一种实现方式。何谓数据版本?即为数据增加一个版本标识,一般是通过为数据库表增加一个数字类型的 “version” 字段来实现。当读取数据时,将version字段的值一同读出,数据每更新一次,对此version值加一。当我们提交更新的时候,判断数据库表对应记录的当前版本信息与第一次取出来的version值进行比对,如果数据库表当前版本号与第一次取出来的version值相等,则予以更新,否则认为是过期数据

    2.2 乐观锁的配置方式

    <!-- 乐观锁配置 version元素必须紧挨着id后面-->
    <version name="version" column="VERSION" type="java.lang.Integer"></version>

    3、mysql数据类型

    数字类型

    类型大小范围(有符号)范围(无符号)用途
    TINYINT1 字节(-128,127)(0,255)小整数值
    SMALLINT2 字节(-32 768,32 767)(0,65 535)大整数值
    MEDIUMINT3 字节(-8 388 608,8 388 607)(0,16 777 215)大整数值
    INT或INTEGER4 字节(-2 147 483 648,2 147 483 647)(0,4 294 967 295)大整数值
    BIGINT8 字节(-9 233 372 036 854 775 808,9 223 372 036 854 775 807)(0,18 446 744 073 709 551 615)极大整数值
    FLOAT4 字节(-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38)0,(1.175 494 351 E-38,3.402 823 466 E+38)单精度
    浮点数值
    DOUBLE8 字节(-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)双精度
    浮点数值
    DECIMAL对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2依赖于M和D的值依赖于M和D的值小数值
    日期类型

    类型大小
    (字节)
    范围格式用途
    DATE31000-01-01/9999-12-31YYYY-MM-DD日期值
    TIME3'-838:59:59'/'838:59:59'HH:MM:SS时间值或持续时间
    YEAR11901/2155YYYY年份值
    DATETIME81000-01-01 00:00:00/9999-12-31 23:59:59YYYY-MM-DD HH:MM:SS混合日期和时间值
    TIMESTAMP4

    1970-01-01 00:00:00/2038

    结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07

    YYYYMMDD HHMMSS混合日期和时间值,时间戳
    字符串类型
    类型大小用途
    CHAR0-255字节定长字符串
    VARCHAR0-65535 字节变长字符串
    TINYBLOB0-255字节不超过 255 个字符的二进制字符串
    TINYTEXT0-255字节短文本字符串
    BLOB0-65 535字节二进制形式的长文本数据
    TEXT0-65 535字节长文本数据
    MEDIUMBLOB0-16 777 215字节二进制形式的中等长度文本数据
    MEDIUMTEXT0-16 777 215字节中等长度文本数据
    LONGBLOB0-4 294 967 295字节二进制形式的极大文本数据
    LONGTEXT0-4 294 967 295字节极大文本数据

    4、mysql数据库聚合查询语句

    SELECT TERMINAL_TYPE,TIME,SUM(QUANTITY) FROM HTTP_TERMINAL_DETAIL_STATISTICS GROUP BY TIME;

    这个查询语句在聚合某个字段的基础上实现将当前字段进行求和计算。

    5、查询mysql指定数据库的表个数:

    SELECT COUNT( * ) FROM information_schema.tables WHERE TABLE_SCHEMA = '库名';


    展开全文
  • Mysql的联合主键

    千次阅读 2021-01-18 18:27:01
    阅读原文请点击摘要: mysql的联合主键:用2个字段(或者多个字段,后面具体都是用2个字段组合)来确定一条记录,说明,这2个字段都不是唯一的,2个字段可以分别重复,这么设置的好处,可以很直观的看到某个重复字段的...
  • mysql复合主键

    千次阅读 2018-12-19 15:51:00
    上面的id和name字段组合起来就是w_test表的复合主键,目的是可能生产环境中有可能产生id重复的情况,为了确保唯一性使用复合索引 转载于:https://my.oschina.net/lianglc/blog/2990514
  • 我有一个名为Shop with this 3 tables的数据库:create table usr(id_usr varchar(20) not null,primary key(id_usr));create table product(id_product varchar(20) not null,id_size varchar(20) not null,price ...
  • 就是指你表的主键含有一个以上的字段组成比如create table test(name varchar(19),id number,value varchar(10),primary key (name,id))上面的name和id字段组合起来就是你test表的复合主键它的出现是因为你的name...
  • 1、声明主键的方法:您可以在创建表的时候就为表加上主键,如:CREATE TABLE tbl_name ([字段描述省略...], PRIMARY KEY(index_col_name));也可以更新表结构时为表加上主键,如:?ALTER TABLE tbl_nameADD PRIMARY ...
  • 如何将复合主键用作外键?看起来我的尝试不起作用.create table student(student_id varchar (25) not null ,student_name varchar (50) not null ,student_pone int ,student_CNIC varchar (50),students_Email ...
  • MySQL 复合主键(Day02)

    万次阅读 2018-10-15 17:21:49
    主键约束是表中的某一列,也可以是表中多个列所构成的一个组合,其中有多一个列组合而成的主键称为复合主键 在MsSQL中,主键列必须遵循以下规则: 1.每个表只能定义一个主键 2.唯一性原则,主键的值也成只为键值,...
  • mysql联合主键和单一主键

    千次阅读 2017-03-04 21:42:00
    索引分单列索引和组合索引。单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,...MySQL索引类型包括: (1)普通索引 这是最基本的索引,它没有任何限制。它有以下几种创建方式: ◆创建索引 CREATE IN...
  • mysql添加复合主键的方法

    千次阅读 2021-01-20 19:06:57
    mysql添加复合主键的方法发布时间:2020-09-25 10:12:21来源:亿速云阅读:90作者:小新mysql添加复合主键的方法?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家...
  • mysql联合主键及用法

    万次阅读 2019-05-31 13:41:46
    数据库的每张表只能有一个主键,不可能有多个主键。所谓的一张表多个主键,我们称之为联合主键。联合主键就是用多个字段一起作为一张表的主键主键主键的作用是保证数据的唯一性和完整性,同时通过主键检索表能够...
  • 场景:mysql 5.7 某表 t_apply_info 上的2个索引,一个组合索引带了 主键字段 ID,另一个是同字段的单列索引例如:KEY idx_1 (apply_serial_no,id)KEY idx_2 (apply_serial_no)--此处id为表的主键,自增字段讨论:这...
  • MySql 主键和外键怎么使用?

    千次阅读 2020-07-30 22:12:20
    主键,是表中一列或者多列的组合主键约束(Primary Key Constraint)要求主键列的数据唯一,并且不允许为空,主键能够唯一的标识表中的每一条记录,可以结合外键来定义与不同数据表之间的关系。 怎么理解主键呢?...
  • /* 设置符合(2个)主键 外键(2个) */ create table t1( nid int(11) not null auto_increment COMMENT'普通主键' , pid int(11) default null, num int(11) default null, primary key (nid,pid) )CHARACTER set=utf...
  • 请问一下account list表中的acc_id和acc_bankNum设置为联合主键,怎么将该表acc_bankNum和user list中的acc_bankNum设置为外键 ![用户表](https://img-ask.csdn.net/upload/201903/06/1551872995_866154.png) !...
  • 前言 一. 联合主键自增问题 今天上午闲来无事翻看了下...当多列组成联合主键时、auto_increment属性的列并不是自顾自得一味的增长,而是配合其他主键的列 从而得到唯一约束;如上图2所示 当siteId值不同时cate...
  • mysql 主键索引,组合索引,单列索引使用场景 CREATE TABLE button ( id bigint(20) NOT NULL AUTO_INCREMENT, --主键索引 button_name varchar(45) NOT NULL COMMENT ‘功能名称’, app_id bigint(20) NOT NULL, ...
  • mysql 联合主键的作用

    千次阅读 2018-05-03 17:01:14
    用这个主键包含的字段作为主键,这个组合在数据表中是唯一,且加了主键索引。 可以这么理解,比如,你的订单表里有很多字段,一般情况只要有个订单号bill_no做主键就可以了,但是,现在要求可能会有补 充订单,使用...
  • Mysql】复合主键,每个主键字段都能使用索引吗?可重复插入吗? 文章目录【Mysql】复合主键,每个主键字段都能使用索引吗?可重复插入吗?一、主键1.1 创建主键1.2 删除主键二、复合主键2.1 Question2.2 实验环境...
  • 展开全部什么...所谓的复合主键就是指你表的主键含有一个以上的字段组成比如createtabletest(namevarchar(19),idnumber,valuevarchar(10),primarykey(name,id))上面的name和id字段组合起来就...
  • MySQL建表语句是最基本的SQL语句之一,上面就为您分析最常用的三种MySQL建表语句,如果您对MySQL建表语句方面感兴趣的话,不妨一看。1、最简单的:CREATE TABLE t1(id int not null,name char(20));2、带主键的:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 66,985
精华内容 26,794
关键字:

mysql组合主键

mysql 订阅