/** * Fix MaterialsTypeToBeDeleted Table - Add AUTO_INCREMENT to ID * * This script modifies the ID column to be AUTO_INCREMENT while preserving data */ const mysql = require('mysql2/promise') async function main() { const config = { host: '192.168.31.83', port: 3306, user: 'remote_user', password: '3.1415926Beeke', database: 'BLD_DB' } let connection try { console.log('Connecting to MySQL...') connection = await mysql.createConnection(config) console.log('Connected successfully!\n') // Step 1: Check current table structure console.log('=== Step 1: Current table structure ===') const [columns] = await connection.execute(` SELECT COLUMN_NAME, COLUMN_TYPE, IS_NULLABLE, COLUMN_KEY, COLUMN_DEFAULT, EXTRA FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'dbo_MaterialsTypeToBeDeleted' AND TABLE_SCHEMA = DATABASE() ORDER BY ORDINAL_POSITION `) console.table(columns) // Step 2: Count records before modification console.log('\n=== Step 2: Record count before modification ===') const [countBefore] = await connection.execute( 'SELECT COUNT(*) AS total FROM dbo_MaterialsTypeToBeDeleted' ) console.log(`Total records: ${countBefore[0].total}`) // Step 3: Show sample data console.log('\n=== Step 3: Sample data ===') const [sample] = await connection.execute('SELECT * FROM dbo_MaterialsTypeToBeDeleted LIMIT 5') console.table(sample) // Step 4: Check if ID is already AUTO_INCREMENT const idColumn = columns.find((col) => col.COLUMN_NAME === 'ID') if (idColumn && idColumn.EXTRA.includes('auto_increment')) { console.log('\n=== ID is already AUTO_INCREMENT! No modification needed. ===') return } // Step 5: Modify the ID column console.log('\n=== Step 4: Modifying ID column to AUTO_INCREMENT ===') await connection.execute(` ALTER TABLE dbo_MaterialsTypeToBeDeleted MODIFY COLUMN ID INT NOT NULL AUTO_INCREMENT `) console.log('Modification completed successfully!\n') // Step 6: Verify the change console.log('=== Step 5: Verify modification ===') const [columnsAfter] = await connection.execute(` SELECT COLUMN_NAME, COLUMN_TYPE, IS_NULLABLE, COLUMN_KEY, EXTRA FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'dbo_MaterialsTypeToBeDeleted' AND TABLE_SCHEMA = DATABASE() AND COLUMN_NAME = 'ID' `) console.table(columnsAfter) // Step 7: Verify data is still intact console.log('\n=== Step 6: Verify data integrity ===') const [countAfter] = await connection.execute( 'SELECT COUNT(*) AS total FROM dbo_MaterialsTypeToBeDeleted' ) console.log(`Total records after modification: ${countAfter[0].total}`) if (countBefore[0].total === countAfter[0].total) { console.log('\n✅ SUCCESS: All data preserved, AUTO_INCREMENT added to ID column!') } else { console.log('\n⚠️ WARNING: Record count changed! Please check data.') } } catch (error) { console.error('\n❌ Error:', error.message) if (error.code) { console.error('Error code:', error.code) } } finally { if (connection) { await connection.end() console.log('\nConnection closed.') } } } main()