将MySQL列更改为AUTO_INCREMENT

时间:2010-01-30 19:16:45

标签: sql mysql alter-table

我正在尝试修改表格以使其主键列AUTO_INCREMENT在事后发生。我尝试了以下SQL,但得到了语法错误通知。

ALTER TABLE document
ALTER COLUMN document_id AUTO_INCREMENT

我做错了什么或者这不可能?

+--------------------+
| VERSION()          |
+--------------------+
| 5.0.75-0ubuntu10.2 |
+--------------------+

20 个答案:

答案 0 :(得分:334)

ALTER TABLE document MODIFY COLUMN document_id INT auto_increment

答案 1 :(得分:67)

Roman是对的,但请注意,auto_increment列必须是PRIMARY KEY或UNIQUE KEY的一部分(在几乎100%的情况下,它应该是构成PRIMARY KEY的唯一列):

ALTER TABLE document MODIFY document_id INT AUTO_INCREMENT PRIMARY KEY

答案 2 :(得分:9)

在我的情况下,它只有在我放not null时才有用。我认为这是一个约束。

ALTER TABLE document MODIFY COLUMN document_id INT NOT NULL AUTO_INCREMENT;

答案 3 :(得分:6)

执行此操作的SQL将是:

ALTER TABLE `document` MODIFY COLUMN `document_id` INT AUTO_INCREMENT;

您的SQL可能无法正常工作有几个原因。首先,您必须重新指定数据类型(在这种情况下为INT)。此外,您尝试更改的列必须编入索引(它不必是主键,但通常是您想要的)。此外,每个表只能有一个AUTO_INCREMENT列。因此,您可能希望运行以下SQL(如果您的列未编入索引):

ALTER TABLE `document` MODIFY `document_id` INT AUTO_INCREMENT PRIMARY KEY;

您可以在MySQL文档中找到更多信息:http://dev.mysql.com/doc/refman/5.1/en/alter-table.html表示修改列语法,http://dev.mysql.com/doc/refman/5.1/en/create-table.html表示有关指定列的更多信息。

答案 4 :(得分:5)

AUTO_INCREMENT是列数据类型的一部分,您必须再次为该列定义完整的数据类型:

ALTER TABLE document
ALTER COLUMN document_id int AUTO_INCREMENT

int作为示例,您应该将其设置为列之前的类型)

答案 5 :(得分:5)

您必须在auto_increment指令之前指定列的类型,即ALTER TABLE document MODIFY COLUMN document_id INT AUTO_INCREMENT

答案 6 :(得分:2)

AUTO_INCREMENT是列数据类型的一部分,您必须再次为该列定义完整的数据类型:

ALTER TABLE document
MODIFY COLUMN document_id int AUTO_INCREMENT

(以int为例,你应该把它设置为以前列的类型)

答案 7 :(得分:2)

如果上述任何一项都不能尝试。这就是我在MYSQL中所做的,是的,你需要写两次列名(document_id)。

ALTER TABLE document
CHANGE COLUMN document_id document_id INT(11) NOT NULL AUTO_INCREMENT ;

答案 8 :(得分:2)

以下声明有效。请注意,您需要再次为列名称提及数据类型(重新声明该列之前的数据类型)。

ALTER TABLE document
MODIFY COLUMN document_id int AUTO_INCREMENT;

答案 9 :(得分:2)

您可以使用以下查询使document_id自动增加

ALTER TABLE document MODIFY COLUMN document_id INT auto_increment

最好同时制作document_id主键

ALTER TABLE document MODIFY COLUMN document_id INT auto_increment PRIMARY KEY;

答案 10 :(得分:2)

你可以这样做:

 alter table [table_name] modify column [column_name] [column_type] AUTO_INCREMENT;

答案 11 :(得分:1)

#include "pch.h"
#include "menu.xaml.h"
#include "learn.xaml.h"
#include "level.xaml.h"
#include "records.xaml.h"
#include "easyGame.xaml.h"
#include "mediumGame.xaml.h"
#include "hardGame.xaml.h"
#include "Constants.h"

using namespace japanEasy;
using namespace Platform;
using namespace std;
using namespace Windows::UI::Popups;
using namespace Windows::Foundation;
using namespace Windows::Foundation::Collections;
using namespace Windows::UI::Xaml;
using namespace Windows::UI::Xaml::Interop;
using namespace Windows::UI::Xaml::Controls;
using namespace Windows::UI::Xaml::Controls::Primitives;
using namespace Windows::UI::Xaml::Data;
using namespace Windows::UI::Xaml::Input;
using namespace Windows::UI::Xaml::Media;
using namespace Windows::UI::Xaml::Navigation;
using namespace Windows::Phone::UI::Input;
using namespace Windows::Storage;

ApplicationDataContainer^ menuLocalSetting;
String^ lv = "Facile";

// Create a composite setting
ApplicationDataCompositeValue^ recordList = ref new ApplicationDataCompositeValue();

menu::menu()
{
InitializeComponent();  
HardwareButtons::BackPressed += ref new EventHandler<BackPressedEventArgs ^>(this, &menu::HardwareButtons_BackPressed);
}

/// <summary>
/// Invoqué lorsque cette page est sur le point d'être affichée dans un frame.
/// </summary>
/// <param name="e">Données d'événement décrivant la manière dont l'utilisateur a accédé à cette page.
/// Ce paramètre est généralement utilisé pour configurer la page.</param>
void menu::OnNavigatedTo(NavigationEventArgs^ e)
{
    //(void) e; // Paramètre non utilisé

if (e->Parameter) {
    menuLocalSetting = safe_cast<ApplicationDataContainer^>(e->Parameter);
    this->myName->Text = safe_cast<String^>(menuLocalSetting->Values->Lookup("userName"));
    auto values = menuLocalSetting->Values;
    if (safe_cast<String^>(menuLocalSetting->Values->Lookup("level"))) {
        String^ value = safe_cast<String^>(menuLocalSetting->Values->Lookup("level"));
        lv = value;
    }
    else {
        auto vvv = menuLocalSetting->Values;
        vvv->Remove("level");
        vvv->Insert("level", dynamic_cast<PropertyValue^>(PropertyValue::CreateString("Facile")));
        String^ test3 = safe_cast<String^>(menuLocalSetting->Values->Lookup("level"));

    }
}
}

void japanEasy::menu::goToLearn_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
    this->Frame->Navigate(TypeName(japanEasy::learn::typeid), menuLocalSetting);
}

void japanEasy::menu::goTo_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
if(lv == "Facile")
    this->Frame->Navigate(TypeName(japanEasy::easyGame::typeid), menuLocalSetting);
else if(lv =="Moyen")
    this->Frame->Navigate(TypeName(japanEasy::mediumGame::typeid), menuLocalSetting);
else if(lv == "Difficile")
    this->Frame->Navigate(TypeName(japanEasy::hardGame::typeid), menuLocalSetting);
}

void japanEasy::menu::Button_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
this->Frame->Navigate(TypeName(japanEasy::level::typeid), menuLocalSetting);
}

void japanEasy::menu::goToRecords_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
this->Frame->Navigate(TypeName(japanEasy::records::typeid), menuLocalSetting);
    }

//on ajoute une fonction qui gère la back navigation
void menu::HardwareButtons_BackPressed(Object^ sender, Windows::Phone::UI::Input::BackPressedEventArgs^ e)
{
if (this->Frame->CanGoBack)
{
    //On ferme l'application si l'utilisateur clique sur le bouton back du menu
    Application::Current->Exit();
    e->Handled = true;
}
}

答案 12 :(得分:1)

就像这样:

alter table document modify column id int(11) auto_increment;

答案 13 :(得分:1)

Previous Table语法:

CREATE TABLE apim_log_request (TransactionId varchar(50) DEFAULT NULL);

要将TransactionId更改为自动增量,请使用此查询

ALTER TABLE apim_log_request MODIFY COLUMN TransactionId INT auto_increment;

答案 14 :(得分:1)

要修改mysql中的列,我们使用alter和modify关键字。假设我们创建了一个表格,如:

create table emp(
    id varchar(20),
    ename varchar(20),
    salary float
);

现在我们要将列id的类型修改为带有自动增量的整数。您可以使用以下命令执行此操作:

alter table emp modify column id int(10) auto_increment;

答案 15 :(得分:0)

当您再次重新定义列时,您必须再次指定数据类型并将auto_increment添加到它,因为它是数据类型的一部分。

-lm

答案 16 :(得分:0)

同时将列设置为主键并自动递增:

  mysql> ALTER TABLE persons MODIFY COLUMN personID INT auto_increment PRIMARY KEY;
    Query OK, 10 rows affected (0.77 sec)
    Records: 10  Duplicates: 0  Warnings: 0

    mysql>

答案 17 :(得分:0)

您可以通过以下查询将atuto_increment约束应用于数据列:

ALTER TABLE customers MODIFY COLUMN customer_id BIGINT NOT NULL AUTO_INCREMENT;

但是,如果列是外键约束的一部分,则很可能会收到错误。因此,建议使用以下查询来关闭foreign_key_checks:

SET foreign_key_checks = 0;

因此,请改用以下查询:

SET foreign_key_checks = 0;
ALTER TABLE customers MODIFY COLUMN customer_id BIGINT NOT NULL AUTO_INCREMENT;
SET foreign_key_checks = 1;

答案 18 :(得分:-1)

由于问题附加了 SQL 标签,我真的认为所有答案都遗漏了一个重点。

MODIFY 命令在 SQL 服务器中不存在 所以当你运行

ALTER TABLE Satellites MODIFY COLUMN SatelliteID INT auto_increment PRIMARY KEY;

enter image description here

在这种情况下,您可以将新列添加为 INT IDENTITY

ALTER TABLE Satellites
   ADD ID INT IDENTITY
       CONSTRAINT PK_YourTable PRIMARY KEY CLUSTERED;


使用此方法用增量数字填充现有的空索引,
DECLARE @id INT
SET @id = 0 
UPDATE Satellites SET @id = SatelliteID = @id + 1 

答案 19 :(得分:-3)

使用以下查询:

ALTER TABLE YourTable DROP COLUMN IDCol

ALTER TABLE YourTable ADD IDCol INT IDENTITY(1,1)