Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak zmienić domyślną wartość kolumny za pomocą procedury?

Musisz użyć dynamicznego SQL tutaj, jako Default klauzula w Alter Table nie będzie w stanie rozwiązać wartości zmiennej:

DELIMITER $$
CREATE PROCEDURE updateDefaultUserRole(
    IN rid_in INT
) BEGIN

    -- generate the query string for Alter Table
    SET @alter_query_str = CONCAT('ALTER TABLE _users
                                   MODIFY rid INT(255) NOT NULL 
                                   DEFAULT ', 
                                  rid_in); -- Modify the columns default value
    -- prepare the query
    PREPARE stmt FROM @alter_query_str;
    -- execute the query
    EXECUTE stmt;
    -- deallocate the query
    DEALLOCATE PREPARE stmt;

    UPDATE _users SET rid = rid_in 
    WHERE rid < rid_in; -- Update all entries lower than the role ID.

END $$
DELIMITER ;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. DATETIME VS INT do przechowywania czasu?

  2. MySQL czy/i pierwszeństwo?

  3. Sequelize:pola Concat w klauzuli WHERE LIKE

  4. Wybierz dane z zakresu dat/czasów

  5. Ostateczny koszmar dotyczący starszych baz danych MySQL