반응형
내 연구와 실험이 아직 답을 얻지 못했기 때문에 도움이 필요합니다.
이전 버전에서 지금 추가하고 싶은 열이 없었던 응용 프로그램의 설치 파일을 수정하고 있습니다. 열을 수동으로 추가하지 않고 설치 파일에 새 열이 테이블에 아직없는 경우에만 추가하고 싶습니다.
테이블은 다음과 같이 생성됩니다.
CREATE TABLE IF NOT EXISTS `#__comm_subscribers` (
`subscriber_id` int(11) NOT NULL auto_increment,
`user_id` int(11) NOT NULL default '0',
`subscriber_name` varchar(64) NOT NULL default '',
`subscriber_surname` varchar(64) NOT NULL default '',
`subscriber_email` varchar(64) NOT NULL default '',
`confirmed` tinyint(1) NOT NULL default '0',
`subscribe_date` datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (`subscriber_id`),
UNIQUE KEY `subscriber_email` (`subscriber_email`)
) ENGINE=MyISAM CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' COMMENT='Subscribers for Comm are stored here.';
create table 문 아래에 다음을 추가하면 열이 이미 존재하고 채워지면 어떻게되는지 잘 모르겠습니다.
ALTER TABLE `#__comm_subscribers` ADD `subscriber_surname`;
ALTER TABLE `#__comm_subscribers` MODIFY `subscriber_surname` varchar(64) NOT NULL default '';
그래서 어딘가에서 찾은 다음을 시도했습니다. 이것은 작동하지 않는 것 같지만 제대로 사용했는지 완전히 확신하지 못합니다.
/*delimiter '//'
CREATE PROCEDURE addcol() BEGIN
IF NOT EXISTS(
SELECT * FROM information_schema.COLUMNS
WHERE COLUMN_NAME='subscriber_surname' AND TABLE_NAME='#__comm_subscribers'
)
THEN
ALTER TABLE `#__comm_subscribers`
ADD COLUMN `subscriber_surname` varchar(64) NOT NULL default '';
END IF;
END;
//
delimiter ';'
CALL addcol();
DROP PROCEDURE addcol;*/
누구든지 이것을 할 좋은 방법이 있습니까?
해결 방법
5.0 이전 MySQL에서는 INFORMATION_SCHEMA
가 지원되지 않습니다. 5.0 이전에는 저장 프로 시저가 지원되지 않으므로 MySQL 4.1을 지원해야하는 경우이 솔루션은 좋지 않습니다.
데이터베이스 마이그레이션 을 사용하는 프레임 워크에서 사용하는 한 가지 솔루션은 스키마의 개정 번호를 데이터베이스에 기록하는 것입니다. 단일 열과 단일 행이있는 테이블이며 현재 유효한 개정판을 나타내는 정수가 있습니다. 스키마를 업데이트 할 때 숫자를 늘립니다.
또 다른 해결책은 ALTER TABLE ADD COLUMN
명령을 시도 하는 것입니다. 열이 이미 있으면 오류가 발생합니다.
ERROR 1060 (42S21): Duplicate column name 'newcolumnname'
오류를 포착하고 업그레이드 스크립트에서 무시하십시오.
참조 페이지 https://stackoverflow.com/questions/972922
반응형
'MySql' 카테고리의 다른 글
MySQL SQL : MySQL에서 기존 열을 기본 키로 설정 (0) | 2020.09.17 |
---|---|
MySQL 이미지를 데이터베이스에 직접 저장하거나 base64 데이터로 저장합니까? (0) | 2020.09.17 |
MySQL 원격 서버에서 Amazon EC2의 mysql에 연결 (0) | 2020.09.17 |
MySQL JOIN과 LEFT JOIN의 차이점 (0) | 2020.09.17 |
MySQL 스레드가 손실 된 경우 테이블 잠금 해제 (0) | 2020.09.17 |
댓글