Mysql 입문 기초 데이터베이스 생 성 편

1.데이터 시트 만 들 기-기본(고수 건 너 뛰 기)정통 방법:create[TEMPORARY]table 표 이름[if not exists](만 든 열 정의)[표 의 옵션][파 티 션 옵션];\#정통 적 인 생 성 방식,구체 적 인 매개 변 수 는 my sql 매 뉴 얼 을 참고 하 십시오.여기 서 상세 한 설명 은 하지 않 고 특별한 것 만 말씀 하 십시오.예:
 
create table user(id int unsigned not null auto_increment,
username char(15),
sex enum('M','F') default 'M',
userid varchar(20),
PRIMARY KEY(id,userid),
INDEX idx_user(userid),
)engine='innodb' charset=utf8;
데이터베이스 구 조 를 복제 합 니 다.
 
create [temporary] table [if not exists] like ;//
mysql>create table vip_user like user;
mysql>create table vip_user select * from user where 0;// ,
복사 하고 copy 데이터베이스
 
create [temporary] table select * from ;# select 。
create table dst_tbl(
id int not null auto_increment,
primary key(id)
) select a,b,c from src_tbl;
를 통 해 사용자 의 요구 에 부 합 된 다양한 데이터 베 이 스 를 만 듭 니 다.여 기 는 벽돌 을 던 져 옥 을 만 드 는 것 입 니 다.2.수 정 된 데이터 시트 구조 보기
 
mysql> desc ;#
mysql> show create table \G # ,\G ; , \G , 。
mysql> show table status like ' '\G #
mysql> show columns from ;# , desc , like ' '
3.라 이브 러 리 의 구 조 를 바 꾸 려 면 먼저 표 my sql>create table vip(id int null,username varchar(30)를 만 듭 니 다.표 구조의 데이터 형식 수정
 
mysql>alter table vip modify id smallint default 1;# 1.
mysql>#alter table vip modify id smallint auto_increment;# , mysql
mysql>alter table vip add primary(id);# vip id, 。
mysql>alter table vip modify username char(30) not null;# vip username char(30);
mysql>alter table vip modify username mediumtext first; # vip username, , after ,
기 존 표 에 추 가 된 필드 my sql>alter table vip add sex enum('M','F')default'M'not null after id;\#새 sex 필드 는 enum 형식 으로 id 뒤에 놓 습 니 다.기 존 필드 의 이름 을 my sql>alter table vip change sex usersex tinyint default 0 not null after username 으로 변경 합 니 다.필드 sex 를 usersex 로 바 꾸 고 유형 과 위 치 를 바 꿉 니 다.주:alter 에서 만 modify,change 는 비슷 하지만 modify 는 이름 을 바 꿀 수 없고 구조 만 바 꿀 수 있 지만 change 는 이름 을 바 꿀 수도 있 고 유형 을 바 꿀 수도 있 습 니 다.필드 삭제 mysql>alter table vip drop usersex;\#usersex 필드 를 삭제 하고 경고 합 니 다.이 필드 의 모든 데 이 터 를 잃 어 버 립 니 다.데이터베이스 이름 변경 my sql>alter table vip rename to vipuser;데이터 베 이 스 를 개명 하 다.데이터 시트 엔진 mysql>alter table vip engine="MyISAM"변경;데이터 구 조 를 수정 하 는 것 은 매우 위험한 일이 므 로 옆 에 있 지 않도록 백업 을 잘 하 는 것 이 좋 습 니 다.그리고 일부 alter 의 문구 와 기 교 는 우리 가 앞으로 관련 된 곳 에서 일일이 올 것 입 니 다.......................................................................우 리 는 평소에 표를 만 들 때 서로 관련 된 정보 가 있 을 수 있 고 데이터 제약 은 두 시 계 를 연결 하 는 유대 이기 때문이다.예 를 들 어 두 개의 표,하 나 는 usertype,하 나 는 userid,usertype 중 하 나 는 key 가 사용자 유형 번호 이 고 userid 표 에 도 user 가 있 습 니 다.key 는 usertype 표 의 1 에 대응 합 니 다.우선 userid 표 의 모든 값 이 usertype 에 있 음 을 보증 해 야 합 니 다.2.그 다음 에 usertype 의 값 key 가 userid 표 의 user 를 바 꾸 도록 해 야 합 니 다.키 값 도 달라 집 니 다.3.usertype 의 값 은 임의로 삭제 할 수 없습니다.userid 표 에 이 usertype 형식의 값 이 존재 하지 않 는 한 강제로 삭제 하려 면 userid 의 모든 usertype 값 을 삭제 합 니 다.데이터 제약 이 없 으 면 insert/update 는 여러 개의 문 구 를 사용 해 야 데이터 의 정확 한 완전 성 을 확보 할 수 있 습 니 다.데이터 제약 을 사용 하면 정의 할 때 만 처리 해 야 합 니 다.너무 걱정 하지 않 아 도 됩 니 다.그리고 가장 중요 한 것 은 데이터 제약 을 사용 하면 데이터,업무 의 완전 성 을 잘 확보 할 수 있다 는 것 이다.하하,이렇게 많은 말 을 했 지만 데이터 제약 의 단점 은 아직 말 하지 않 았 습 니 다.느 리 고 데이터 제약 을 사용 하지 않 는 것 보다 훨씬 느 립 니 다.또한 사용자 가 데 이 터 를 삽입 하거나 데 이 터 를 변경 할 때마다 데이터 베이스 시스템 은 일정한 시간 을 들 여 검 사 를 합 니 다.그러나 my sql 이 날로 성숙 해 지면 서 이런 속 도 는 크게 개선 되 었 습 니 다.개인 적 으로 저 는 비 즈 니스,실시 간 시스템 이 데이터 업무 의 완전 성에 대한 요구 가 비교적 높 은 상황 에서 데이터 제약 을 사용 하 는 것 이 필요 하 다 고 생각 합 니 다.다른 상황 에 서 는 어 진 사람 을 보고 어 진 사람 을 보고 지혜 로 운 사람 을 본다.5.데이터 제약 이 간단명료 하 게 해석 되 기 때문에 외부 키 의 정 의 는 다음 과 같은 세 가지 상황 을 만족 시 켜 야 합 니 다.1.두 표 는 innodb 표 형식 이 어야 합 니 다.2.외부 키 로 지정 한 열 은 색인 을 해 야 합 니 다.3.두 표 에 연 결 된 외부 키 형식 은 일치 해 야 합 니 다.우 리 는 먼저 예 를 들 어 예 에서 학습 을 진행 합 니 다:my sql>create table parent(id int null,primary key(id)engine=innodb;\#메 인 테이블 mysql>create table child(id int,parentid int, foreign key(parent_id) references parent(id) on delete restrict on update cascade ) engine=innodb; #표 에서 키 키 를 만 들 고 parent 로 약 속 됩 니 다.id,관계 구축.mysql> insert into parent values(1),(2),(3);#메 인 테이블 에 데이터 삽입 mysql>insert into child values(1,1),(1,2),(1,3);\#하위 테이블 에 데 이 터 를 삽입 하여 서로 다른 parent 에 대응 합 니 다.id 자식 child 의 id 값 은 모두 1 입 니 다.mysql> #insert into child values(1,1),(1,2),(1,3),(1,4); #이게 무슨 일이 일어 날 지 볼 까요?잘못 보 고 했 죠?무슨 이유?설명 을 생각해 보 세 요.문 구 를 만 들 때 데이터 가 외부 키 와 연결 되 는 것 이 라 고 약 속 했 기 때문에 parent 에 id 값 이 4 인 메 인 키 가 존재 하지 않 으 면 서브 키 는 당연히 업데이트 되 지 않 습 니 다.이 데이터베이스 의 값 은:parent child id parent 입 니 다.id 1 1 1 2 1 2 3 3 우 리 는 외부 키 관련 표 의 역할 을 나타 내기 위해 계속 작업 합 니 다 my sql>update parent set id=4 where id=1;\#parent 의 값 을 바 꾸 어 child 의 반응 my sql>select*from parent;mysql> select * from child; 이 데이터베이스 의 값 은:parent child id parent 입 니 다.id 2 1 4 3 1 2 4 1 3 이상 의 예 를 통 해 사용 자 는 parent 의 값 만 바 꾸 고 관련 된 child 값 은 자동 으로 바 뀌 는 것 을 알 수 있 습 니 다.우 리 는 계속해서 mysql>insert 를 child values(2,4),(3,4),(4,4);\#하위 테이블 에 다른 값 을 추가 합 니 다.mysql> #delete from parent where id=4; #여러분 이 문 구 를 실행 해서 어떤 결과 가 있 는 지 보 세 요.틀 렸 죠?힌트 오 류 를 분석 해 보 겠 습 니 다.id)\#이 말 은 대외 관련 키 를 본 표 로 지정 한 parentid; references parent(id)on delete restrict on update 캐 스 케 이 드\#이 말 은 구속 문 입 니 다.references 는 본 데이터 베 이 스 를 제약 할 수 있 는 외 키 즉 parendid 는 parent 데이터 시트 의 id 서브 키 와 대응 하고 on delete,on update 의 동작 을 제약 합 니 다.my sql 은 모두 다음 과 같은 몇 가지 동작 이 있 습 니 다.(1)restrict,no action 은 서브 시트 에 일치 하 는 기록 이 있 으 면 부모 표 에 대응 하 는 후보 키 에 대해 update/delete 작업 을 할 수 없다 는 것 을 알 고 있 습 니까?왜 우 리 는 delete from parent where id=4 를 실행 합 니까?하위 표(child)에 값 이 존재 하기 때문에 오류 가 발생 했 습 니 다.(2)set null 이 부모 표 에 update/delete 기록 을 할 때 하위 표 에 일치 하 는 열 을 null 로 설정 하지만,하위 표 의 외 키 열 이 not null(3)캐 스 케 이 드 가 부모 표 에 update/delete 기록 을 할 때 update/delete 에서 하위 표 의 일치 기록 을 동기 화하 면 필요 에 따라 다른 동작 을 설정 할 수 있 습 니 다.예 를 들 어,부모 테이블 을 삭제 할 때 하위 테이블 의 관련 값 을 자동 으로 삭제 하려 면 설정 을 해 야 합 니 다.references parent(id)on delete cascade on update cascade,실험 전에 우 리 는 1.이미 정 의 된 외부 키 는 변경 할 수 없습니다.외부 키 를 삭제 한 후에 만들어 야 합 니 다(다른 방법 이 있 을 수 있 습 니 다.어떤 고수 가 지적 합 니까?my sql>show create table child/G\#constraint(제약)의 이름 설명 을 받 았 습 니 다.constraint 는 부족 할 수 있 습 니 다.제약 하 는 이름 을 지정 할 수 있 습 니 다.지정 하지 않 으 면 시스템 이 자동 으로 이름 을 지 을 수 있 습 니 다.예 를 들 어 우 리 는 이렇게 할 수 있 습 니 다:constraint fkchild_key foreign key(parent_id) references parent(id) on delete restrict on update cascade; 이렇게 해서 우 리 는 이 구속 의 전체 이름 을 fk 로 지정 했다.child_key,나중에 이것 을 조작 할 수 있 습 니 다.my sql>alter table child drop foreign key fkchild_key;#제약 조건 삭제 mysql>alter table child add foreign key('parentid) references parent(id) on delete cascade on update cascade; mysql>show create table child/G\#이 제약 조건 이 변경 되 었 습 니 다.사용 자 는 변경 상황 을 볼 수 있 습 니 다 mysql>delete from parent where id=4;\#우 리 는 위의 그 말 을 다시 집행 하 는데,이 때 는 틀 리 지 않 았 지?mysql>select * from parent; mysql>select * from child; #우 리 는 지금 과 parent 를 볼 수 있다.id 가 4 인 모든 삭제.하하,앞으로 편리 하 게 사용 할 수 있 습 니 다.이 데이터베이스 의 값 은:parent child id parent 입 니 다.id 2 1,2,3,1,3,6.데이터 제약 에 대한 추가 설명 이 데이터 제약 을 정의 하면 데이터 의 삽입 이나 변경 속도 가 느 릴 수 있 습 니 다.특히 데이터 구 조 를 변경 하고 데 이 터 를 삽입 할 때 효율 이 낮 고 무 섭 습 니 다.클 라 이언 트 가 load data(데 이 터 를 불 러 오고 나중에 소개 합 니 다)를 실행 할 때 alter table 은 다음 명령 을 사용 하여 데이터 제약 을 잠시 닫 고 완성 한 후에 시작 하 는 것 을 권장 합 니 다.그러면 속 도 는 최소 20 배 이상 올 릴 수 있 습 니 다.mysql> set foreign_key_checks=0;#데이터 제약 mysql>load data infile'파일 절대 주소'를 테이블 이름 으로 닫 습 니 다.\#텍스트 파일 에서 대량의 데 이 터 를 불 러 옵 니 다 my sql>set foreignkey_checks=1;#데이터 제약 조건 열기

좋은 웹페이지 즐겨찾기