我在MySQL的on列中创建了一个表itemID
。
创建表格后,现在我想将此列更改为AUTOINCREMENT
。
如何使用ALTER语句完成此操作?
表定义:
ALLITEMS (itemid int(10) unsigned, itemname varchar(50))
我正在使用以下代码,但它抛出语法错误
错误:语法不正确。
ALTER TABLE allitems
MODIFY itemid INT(10) UNSIGNED AUTOINCREMENT;
我在MySQL的on列中创建了一个表itemID
。
创建表格后,现在我想将此列更改为AUTOINCREMENT
。
如何使用ALTER语句完成此操作?
表定义:
ALLITEMS (itemid int(10) unsigned, itemname varchar(50))
我正在使用以下代码,但它抛出语法错误
错误:语法不正确。
ALTER TABLE allitems
MODIFY itemid INT(10) UNSIGNED AUTOINCREMENT;
AUTOINCREMENT
下划线:AUTO_INCREMENT
....
Answers:
CREATE TABLE ALLITEMS(
itemid INT(10)UNSIGNED,
itemname VARCHAR(50)
);
ALTER TABLE ALLITEMS CHANGE itemid itemid INT(10)AUTO_INCREMENT PRIMARY KEY;
DESC ALLITEMS;
INSERT INTO ALLITEMS(itemname)
VALUES
('Apple'),
('Orange'),
('Banana');
SELECT
*
FROM
ALLITEMS;
我之前也对CHANGE
和MODIFY
关键字感到困惑:
ALTER TABLE ALLITEMS CHANGE itemid itemid INT(10)AUTO_INCREMENT PRIMARY KEY;
ALTER TABLE ALLITEMS MODIFY itemid INT(5);
在此期间,还请注意,AUTO_INCREMENT
也可以以预定义的数字开头:
ALTER TABLE tbl AUTO_INCREMENT = 100;
CHANGE
和MODIFY COLUMN
?
UNSIGNED
该CHANGE
子句,可以将其itemid
转换为SIGNED整数,从而减小其最大值。
语法:
ALTER TABLE `table1` CHANGE `itemId` `itemId` INT( 11 ) NOT NULL AUTO_INCREMENT
但是该表需要一个已定义的键(例如itemId上的主键)。
ex primary key
和primary key
itemid之间有什么区别?
在OP的现有表中添加AUTO_INCREMENT PRIMARY KEY的基本语法:
ALTER TABLE allitems
MODIFY itemid INT(10) UNSIGNED AUTO_INCREMENT PRIMARY KEY;
或者对于一个新表,这是docs中的语法示例:
CREATE TABLE animals (
id MEDIUMINT NOT NULL AUTO_INCREMENT,
name CHAR(30) NOT NULL,
PRIMARY KEY (id)
);
陷阱和注意事项:
AUTO_INCREMENT
列必须有它的索引。(通常,您希望将其作为PRIMARY KEY,但是MySQL不需要。)AUTO_INCREMENT
专栏通常是一个好主意UNSIGNED
。从文档:
如果可能,请使用UNSIGNED属性,以允许更大的范围。
CHANGE
orMODIFY
子句创建列时AUTO_INCREMENT
(或实际上,无论何时使用CHANGE
orMODIFY
子句),您都应小心包含该列的所有修饰符,例如NOT NULL
or UNSIGNED
,这些修饰符在调用时会出现在表定义中SHOW CREATE TABLE yourtable
。否则,这些修饰符将丢失。ALTER TABLE tblcatalog
CHANGE COLUMN id id INT(11) NOT NULL AUTO_INCREMENT FIRST;
ALTER TABLE t_name modify c_name INT(10) AUTO_INCREMENT PRIMARY KEY;