-
2020-09-15 17:42:05
ALTER TABLE 表名 MODIFY COLUMN id INT (10) NOT NULL FIRST;
更多相关内容 -
关于 mysql 主键自增问题
2021-02-03 23:04:56MyISam引擎:MyISAM表会把自增列(auto-increment计数器)最大值是记录到数据文件里,重启MySQL自增列(计数器)最大值不会丢失,从而使用自增列作为主键ID时也不会丢失。 MySQL 一般使用 innodb 引擎,数据库重启MySQL 引擎 innodb引擎(低版本):Innodb表中把自增列作为主键ID时,自增列是通过auto-increment计数器实现的,计数器的最大值是记录到内存中的,重启数据库后,会导致auto-increment计数器重置,从而会导致主键ID重置。 MyISam引擎:MyISAM表会把自增列(auto-increment计数器)最大值是记录到数据文件里,重启MySQL自增列(计数器)最大值不会丢失,从而使用自增列作为主键ID时也不会丢失。
MySQL 一般使用 innodb 引擎,数据库重启后,主键自增可能会丢失,因为这个引擎使用 auto-increment计数器进行主键自增,值保存在内存中 MyISam 引擎的值保存在系统表中,不会丢失
查看数据库当前使用的引擎 SHOW ENGINES; 更改引擎方式一: 修改配置文件my.ini 将my-small.ini另存为my.ini,在[mysqld]最后添加为上default-storage-engine=InnoDB,重启服务,数据库默认的引擎修改为InnoDB 更改引擎方式二: 在建表的时候指定或者建完表修改 -- 建表的时候指定 create table mytbl( id int primary key, name varchar(50) )type=MyISAM; -- 建完表后修改 alter table mytbl2 type = InnoDB;
目前只知道通过 SQL 语句对主键自增进行重置 ALTER TABLE account MODIFY id INT; // 取消主键自增 ALTER TABLE account MODIFY id INT AUTO_INCREMENT; // 添加主键自增 至于如何用代码实现 主键自增的重置, 欢迎大家留言
-
【mysql主键创建 取消】自增主键 】【【自动增添】【唯一约束 UNIQUE】【null与not null空值】【unsigned...
2021-08-30 17:11:30PRIMARY KEY (PK) 标识该字段为该表的主键,可以唯一的标识记录,不可以为空 UNIQUE + NOT NULL FOREIGN KEY (FK) 标识该字段为该表的外键,实现表与表之间的关联 NULL 标识是否允许为空,默认为NULL。 NOT NULL ...文章目录
表完整性约束
作用:用于保证数据的完整性和一致性
约束条件 说明
PRIMARY KEY (PK) 标识该字段为该表的主键,可以唯一的标识记录,不可以为空 UNIQUE + NOT NULL
FOREIGN KEY (FK) 标识该字段为该表的外键,实现表与表之间的关联
NULL 标识是否允许为空,默认为NULL。
NOT NULL 标识该字段不能为空,可以修改。
UNIQUE KEY (UK) 标识该字段的值是唯一的,可以为空,一个表中可以有多个UNIQUE KEY
AUTO_INCREMENT 标识该字段的值自动增长(整数类型,而且为主键)
DEFAULT 为该字段设置默认值
UNSIGNED 无符号,正数
.主键
每张表里只能有一个主键,不能为空,而且唯一,主键保证记录的唯一性,主键自动为NOT NULL。
一个 UNIQUE KEY 又是一个NOT NULL的时候,那么它被当做PRIMARY KEY主键。定义两种方式:
#表存在,添加约束 案例1
mysql> alter table g1 add primary key(id); 给已有表添加 主键 唯一性
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0mysql> desc g1; 查看表结构
±------±------------±-----±----±--------±------+
| Field | Type | Null | Key | Default | Extra |
±------±------------±-----±----±--------±------+
| id | int(11) | NO | PRI | NULL | |
| age | varchar(10) | YES | | NULL | |
±------±------------±-----±----±--------±------+
2 rows in set (0.00 sec)
测试
第二种创建主键方法
创建表并指定约束;
mysql> create table g6(id int,name enum(‘man’,‘woman’),age int,primary key(id)); 创建表 指定主键
Query OK, 0 rows affected (0.01 sec)mysql> desc g6; 查看表结构
±------±--------------------±-----±----±--------±------+
| Field | Type | Null | Key | Default | Extra |
±------±--------------------±-----±----±--------±------+
| id | int(11) | NO | PRI | NULL | |
| name | enum(‘man’,‘woman’) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
±------±--------------------±-----±----±--------±------+
3 rows in set (0.00 sec)
测试案例:
取消主键
mysql> alter table g1 drop primary key; 取消表主键
Query OK, 1 row affected (0.06 sec)
Records: 1 Duplicates: 0 Warnings: 0mysql> desc g1; 查看表结构
±------±------------±-----±----±--------±------+
| Field | Type | Null | Key | Default | Extra |
±------±------------±-----±----±--------±------+
| id | int(11) | NO | | NULL | |
| age | varchar(10) | YES | | NULL | |
±------±------------±-----±----±--------±------+
2 rows in set (0.00 sec)
主键被删除之后,这个字段仍然不允许为空值;主键自动增添
2.auto_increment自增--------自动编号,且必须与主键组合使用默认情况下,起始值为1,每次的增量为1。当插入记录时,如果为AUTO_INCREMENT数据列明确指定了一个数值,则会出现两种情况:
- 如果插入的值与已有的编号重复,则会出现出错信息,因为AUTO_INCREMENT数据列的值必须是唯一的;
- 如果插入的值大于已编号的值,则会把该插入到数据列中,并使在下一个编号将从这个新值开始递增。也就是说,可以跳过一些编号。如果自增序列的最大值被删除了,则在插入新记录时,该值被重用。
(每张表只能有一个字段为自增) (成了key才可以自动增长)
案例:
mysql> create table mingqing2(id int primary key auto_increment,name varchar(30),age enum(‘nan’,‘nv’)); 添加自动填补主键
Query OK, 0 rows affected (0.00 sec)
mysql> desc mingqing2; 查看表结构
±------±-----------------±-----±----±--------±---------------+
| Field | Type | Null | Key | Default | Extra |
±------±-----------------±-----±----±--------±---------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(30) | YES | | NULL | |
| age | enum(‘nan’,‘nv’) | YES | | NULL | |
±------±-----------------±-----±----±--------±---------------+
案例:
删除自动增长
删除自动增长
mysql> alter table mingqing2 change id id int not null
前面不变 表格名称 更改这个名字不变,int改成不允许为空值
mysql> desc mingqing;
±------±-----------------±-----±----±--------±------+
| Field | Type | Null | Key | Default | Extra |
±------±-----------------±-----±----±--------±------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(30) | YES | | NULL | |
| age | enum(‘nan’,‘nv’) | YES | | NULL | |
±------±-----------------±-----±----±--------±------+
3 rows in set (0.00 sec)
设置唯一约束 UNIQUE
字段添加唯一约束之后,该字段的值不能重复,也就是说在一列当中不能出现一样的值。
步骤:
mysql> create table g2(id int(5),name varchar(5) unique,comment char(5));
Query OK, 0 rows affected (0.01 sec) 添加唯一性mysql> desc g2; 查看表结构
±--------±-----------±-----±----±--------±------+
| Field | Type | Null | Key | Default | Extra |
±--------±-----------±-----±----±--------±------+
| id | int(5) | YES | | NULL | |
| name | varchar(5) | YES | UNI | NULL | |
| comment | char(5) | YES | | NULL | |
±--------±-----------±-----±----±--------±------+
3 rows in set (0.00 sec)
实验案例:撤销唯一键
4.null与not null
- 是否允许为空,默认NULL,可设置NOT NULL,字段不允许为空,必须赋值
- 字段是否有默认值,缺省的默认值是NULL,如果插入记录时不给字段赋值,此字段使用默认值
步骤:
mysql> create table g3(id int(5),name varchar(6),sex enum(‘nan’,‘nv’) not null default ‘nan’); 创建表格设置不允许为空值
Query OK, 0 rows affected (0.00 sec)
mysql> desc g3; 查看表结构
±------±-----------------±-----±----±--------±------+
| Field | Type | Null | Key | Default | Extra |
±------±-----------------±-----±----±--------±------+
| id | int(5) | YES | | NULL | |
| name | varchar(6) | YES | | NULL | |
| sex | enum(‘nan’,‘nv’) | NO | | nan | |
±------±-----------------±-----±----±--------±------+
3 rows in set (0.00 sec)
测试案例:
unsigned属性:
unsigned属性:
整数类型有可选的UNSIGNED属性,表示不允许负值,这大致上可以使正数的上限提高一倍
可以使用这几种整数类型:TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT。分别使用8,16,24,32,64位存储空间
它们可以存储的值的范围从-2(n-1)到2(n-1)-1,其中n是存储空间的位数。
案例;
mysql> create table g4(id tinyint(10) default null, qq tinyint(12) unsigned default null);
Query OK, 0 rows affected (0.00 sec) 创建 不可负数不可空值选项mysql> desc g4; 查看表结构
±------±---------------------±-----±----±--------±------+
| Field | Type | Null | Key | Default | Extra |
±------±---------------------±-----±----±--------±------+
| id | tinyint(10) | YES | | NULL | |
| qq | tinyint(12) unsigned | YES | | NULL | |
±------±---------------------±-----±----±--------±------+
2 rows in set (0.00 sec)
案例测试:
指定字符集
修改字符集 :在创建表的最后面指定一下: default charset=utf8 #可以指定中文
mysql> create table g5(id int(2),name char(5),age int(4)) default charset=utf8;
Query OK, 0 rows affected (0.01 sec)
指定字符集
mysql> show create table g5; 查看创建过程
±---- --±------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
±------±------------------------------------------------------------------------------------------------------------------------------------------------+
| g5 | CREATE TABLEg5
(
id
int(2) DEFAULT NULL,
name
char(5) DEFAULT NULL,
age
int(4) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
±------±------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
测试案例:
设置mysql字符集为utf8
要求MySQL版本>= 5.5.3
查看字符集
查看MYSQL数据库服务器和数据库字符集
方法一:show variables like ‘%character%’;
方法二:show variables like ‘collation%’;
查看MYSQL所支持的字符集
show charset;
查看库的字符集
语法:show database status from 库名 like 表名;
查看表的字符集
语法:show table status from 库名 like 表名;
查看表中所有列的字符集
语法:show full columns from 表名;设置全局字符集
/数据库客户端的编码/
set character_set_client = utf8mb4;
/建立连接使用的编码/
set character_set_connection = utf8mb4;
/数据库的编码/
set character_set_database = utf8mb4;
/结果集的编码/
set character_set_results = utf8mb4;
/数据库服务器的编码/
set character_set_server=utf8mb4;重启,查看如下
service mysqld restart单独设置字符集
修改库的字符集
语法:alter database 库名 default character set 字符集;
alter database shiyan default character set gbk;
修改表的字符集
语法:alter table 表名 convert to character set 字符集;
alter table test1 convert to character set utf8;
修改字段的字符集
语法:alter table 表名 modify 字段名 字段属性 character set gbk;
alter table test1 modify name char(10) character set gbk;
————————————————
以上字符集修改为转载5.默认约束
添加/删除默认约束
mysql> create table g6(id int not null,name varchar(20),number int,primary key(id)); 创建一个表
Query OK, 0 rows affected (0.00 sec)mysql> desc g6; 查看表结构
±-------±------------±-----±----±--------±------+
| Field | Type | Null | Key | Default | Extra |
±-------±------------±-----±----±--------±------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(20) | YES | | NULL | |
| number | int(11) | YES | | NULL | |
±-------±------------±-----±----±--------±------+
3 rows in set (0.00 sec)
添加约束条件 添加默认值是0
mysql> alter table g6 alter number set default 0; 添加约束条件
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0mysql> desc g6;
±-------±------------±-----±----±--------±------+
| Field | Type | Null | Key | Default | Extra |
±-------±------------±-----±----±--------±------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(20) | YES | | NULL | |
| number | int(11) | YES | | 0 | |
±-------±------------±-----±----±--------±------+
3 rows in set (0.00 sec)
添加一个 自动增长
mysql> alter table g6 change id id int not null auto_increment;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0mysql> desc g6;
±-------±------------±-----±----±--------±---------------+
| Field | Type | Null | Key | Default | Extra |
±-------±------------±-----±----±--------±---------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(20) | YES | | NULL | |
| number | int(11) | YES | | 0 | |
±-------±------------±-----±----±--------±---------------+
3 rows in set (0.00 sec)
删除默认值
删除默认值 自动增加
mysql> alter table g6 change id mq_id int not null default 0;
-
取消和添加MySQL数据库的主键自增SQL语句 《=====》auto_increment & 修改表的列名称
2021-09-16 20:50:01取消MySQL数据库表的自增 alter table tableName modify id int(11) unsigned not null comment '主键'; 增加表的主键字段自动递增 alter table tableName modify id bigint auto_increment comment '产品类型...取消MySQL数据库表的自增
alter table tableName modify id int(11) unsigned not null comment '主键';
增加表的主键字段自动递增
alter table tableName modify id bigint auto_increment comment '产品类型ID';
修改表的列名称(原列名 creator_id 目标列名 creator_number)
alter table t_object_model change creator_id creator_number varchar(64) not null comment '创建者工号';
-
Mysql的主键为0与主键自增
2021-02-01 20:01:49本文主要介绍了关于MySQL主键为0与主键自排约束的关系,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。开始不设置主键表的设计如下:如果id的位置有好几个0的话:设置主键并且自动排序时,0会从... -
Mysql语句删除主键的自增
2019-04-12 22:03:00ALTER TABLE 表名MODIFY COLUMN 字段名 int(2) NOT NULL FIRST ; 转载于:https://www.cnblogs.com/zxrxzw/p/10698915.html -
navicat怎么设置主键自增
2021-01-19 20:43:49mysql数据库创建一张表之后,为了有一个标识某一条记录,一般都会有一个唯一id,这个id可以设置为主键和自增的方式,这样在插入新的记录的时候,都会随着之前的id自动递增。为表设置主键和自增可以通过sql的方式,也... -
mysql中的一个字段(新增 / 修改 / 取消 / 重置 ) 为主键 自增类型
2021-06-01 17:26:56mysql中的一个字段(新增 / 修改 / 取消 / 重置 ) 为主键 自增类型 -- 添加字段为主键自增类型 alter table user_t add column pids int auto_increment not null ...-- 取消主键约束 alter table user_t drop prim -
MySQL 中的自增主键
2021-02-08 04:33:49文章正文:MySQL的主键可以是自增的,那么如果在断电重启后新增的值还会延续断电前的自增值吗?自增值默认为1,那么可不可以改变呢?下面就说一下 MySQL的自增值。特点保存策略1、如果存储引擎是 MyISAM,那么这个自... -
mysql如何让表的自增主键重新设置从1开始自增
2021-12-31 15:46:46mysql如何让表的自增主键重新设置从1开始自增 作用于无数据的表或者有数据但数据作废的表 直接执行该语句 : truncate table 你的表名。 该语句会清空数据,然后重置自增长主键 truncate table student ...... -
MySQL获取自增主键Id
2020-02-11 16:37:52mysql和oracle插入的时候有一个很大的区别是,oracle通过获取序列的方式得到主键,mysql本身有一个列可以做自增长字段,mysql在插入一条数据后,如何能获得到这个自增id的值呢? 方法1:使用last_insert_id mysql... -
mysql删除自增主键
2018-11-15 11:34:00在MySQL中删除主键需要两步.(1)如果有auto_increment,先删除之;(2)删除主键约束 primary key1、alter table t9 modify id int(11);#这里用的modify,只改变数据类型,也可以用change,改变列名的同时输入新的数据... -
mysql主键自增
2021-07-29 18:16:05另外,超过一弹指的耗时操作要有进度提示,并且可以随时中止或取消,这样才能给用户最好的体验。” 那么瞬间、刹那、一弹指具体是多少时间呢? 根据《摩诃僧祗律》记载 一刹那者为一念,二十念为一瞬,二十瞬为一弹... -
SQL Server 2008 主键自增
2021-03-03 22:43:59环境:SQL Server 2008问题:设置主键和把它设为...若要设置主键自增,在列属性中找到标识规范,单击左边的"+"号,把否改为是,其他默认即可。create tabletableName(id int identity(1,1)primary key,data varch... -
mybatis-puls 集成oracle 主键自增
2022-04-22 13:30:54oracle通过mybatis-puls新增数据时,主键自增不同于MySQL添加注解,oracle需要进行配置 1,创建表 2,创建序列 create sequence XXX_SEQ INCREMENT BY 1 -- 设置序列自增从为1 START WITH 1 -- 起始值... -
Mysql表删除主键和新增主键
2022-02-24 11:14:09先创建一个表:并设置主键uuid CREATE TABLE JALYYQKZXX ( S_LAST_UPDATETIME timestamp NOT NULL DEFAULT NOW() COMMENT '最近更新时间戳', uuid varchar(255) NOT NULL COMMENT 'uuid', SSYQ varchar(255) ... -
深入谈谈MySQL中的自增主键
2021-02-07 14:10:04免费资源网,https://freexyz.cn/MySQL的主键可以是自增的,那么如果在断电重启后新增的值还会延续断电前的自增值吗?自增值默认为1,那么可不可以改变呢?下面就说一下 MySQL的自增值。特点保存策略1、如果存储引擎... -
Mysql、Sql Server、Oracle主键自动增长的设置
2021-01-27 18:30:341、把主键定义为自动增长标识符类型MySql在mysql中,如果把表的主键设为auto_increment类型,数据库就会自动为主键赋值。例如:create table customers(id int auto_increment primary key not null, name varchar... -
Mysql,SqlServer,Oracle主键自动增长的设置
2021-01-27 18:30:441、把主键定义为自动增长标识符类型MySql在mysql中,如果把表的主键设为auto_increment类型,数据库就会自动为主键赋值。例如:customers(idauto_increment,name(customers(name)idcustomers;以上sql语句先创建了... -
mybatis主键自增设置
2019-05-13 08:29:02做插入数据的时候经常用到插入操作...//mysql设置使用自增的主键生成策略,并能获取生成的主键值 <insert id="xxx" useGeneratedKeys="true" keyProperty="id">insert into tb(a,b,c) values(#{a},#{b},#{c})... -
mysql如何设置自增长id
2021-02-07 16:50:53mysql设置自增长id的方法:首先创建好数据库,选择Create Table;然后在设计表字段的时候,id列最后一个参数AI即为自增长,勾选上即可。本教程操作环境:windows7系统、mysql8.0.22版,该方法适用于所有品牌电脑。... -
SqlServer Mysql数据库修改自增列的值及相应问题的解决方案
2021-01-21 18:34:22SQL Server 平台修改自增列值由于之前处理过sql server数据库的迁移工作,尝试过其自增列值的变更,但是通过SQL 语句修改自增列值,是严格不允许的,直接报错(无法更新标识列 '自增列名称‘)。sql server我测试是... -
mysql自增字段重排 mysql删除表后自增字段从1开始
2021-01-18 21:44:181,3,4,5,7,10这样子-------------------------truncate命令是会把自增的字段还原为从1开始的,或者你试试把table_a清空,然后取消自增,保存,再加回自增,这也是自增段还原为1的方法。-----------MySql数据库... -
shardingsphere批量插入引起的mysql主键和分布式自增键递增顺序不一致的bug
2021-03-27 14:38:20shardingsphere批量插入,数据库主键和分布式自增键递增顺序不一致问题复现和排查过程版本相关关键词使用背景bug分析进入debug调试 问题复现和排查过程 版本相关 shardingsphere版本:4.1.1 mybatis版本:3.5.3 ... -
Dapper扩展的主键自增与非自增
2021-11-17 16:53:42环境: window10 x64 vs2022 企业版 17.0.0 .NET 6.0 Dapper 2.0.78 ...二、KeyAttribute [隐式]主键特性 为什么我把它定义隐式呢,关键在于在Insert时,如果你用它标记了一个属性,那这个属性的值无