기사 디렉토리
- 1. 테이블 구조(필드 추가)
- 2. MySQL의 6가지 일반적인 제약
-
- 1. 외래키의 정의
- 2. 외래 키 제약 조건 만들기
- 3. 메인 테이블 블루 생성
- 4. 아이스크림에서 테이블 만들기
- 5. 파란색 기본 테이블에 기본 키 제약 조건을 추가합니다. 기본 키 이름은 "PK_"로 시작하는 것이 좋습니다.
- 6. 슬레이브 테이블 Icecream 테이블에 외래 키를 추가하고 Icecream 테이블의 hobid 필드와 파란색 테이블의 hobid 필드 간에 외래 키 연결을 설정합니다.
- 7. 쿼리 테이블 문 구조 명령을 사용하여 외래 키 연결을 볼 수 있습니다.
- 8. 새로운 데이터 레코드를 삽입할 때 마스터 테이블 다음에 슬레이브 테이블을 삽입해야 합니다.
- 9. 데이터 레코드를 삭제할 때는 먼저 테이블을 삭제한 다음 기본 테이블을 삭제해야 합니다. 즉, 기본 키 테이블을 삭제할 때는 먼저 연결된 다른 테이블을 삭제해야 합니다.
- 10. 외래 키 제약 조건 보기 및 삭제
- 3. 데이터베이스 사용자 관리
- 4. 데이터베이스 사용자 인증
- 총
1. 테이블 구조(필드 추가)
1. 테이블 구조 생성
use sky;
#指定主键的第二种方式
create table if not exists sky (id int(4) zerofill primary key auto_increment,name varchar(10) not null,cardid int(18) not null unique key,hobby varchar(50));
desc sky;
노트:
#if not exists: 생성할 테이블이 이미 있는지 확인하고 없으면 계속 생성함을 나타냅니다.
#int(4) zerofill: 값이 4자리 미만이면 "0"으로 채워짐을 나타냅니다(예: 0001). #auto_increment: 이 필드가 자체 증가
필드임을 나타냅니다.
자기성장 필드 데이터는 반복할 수 없으며 자기성장 필드는 기본 키여야 하며 추가된 레코드 데이터가 이 필드의 값을 지정하지 않으면 추가 실패 시 자동으로 한 번 증가함(이것은 가져온 데이터가 테이블의 다음 데이터 옆에 삽입됨) #unique key: 이 필드의 고유 키 제약을 나타내며 이 필드의 데이터는 반복될 수 없음: 테이블에 기본 키는 하나만 있을 수 있지만 테이블에는 여러 개의 고유 키가 있을 수 있음 #not null: 이 필드를 나타냅니다. NULL은 허용
되지 않습니다
.
2. 데이터 테이블 복사
2.1 복사 형식
(1) 형식
create table 生成新的表名 like 复制的表名;
(2) 예
#复制格式,通过LIKE方法,复制sky表结构生成sun表
create table sun like sky;
#查看库中的表
show tables;
#备份内容
insert into sun select * from sky;
desc sun;
select * from sun;
2.2 복제 테이블
데이터 테이블의 데이터 레코드를 새 테이블로 생성
(1) 형식
CREATE TABLE 需要创建的新表(select * from 已存在需要新表复制的数据的表);
(2) 예
#复制test 表数据到test02中
create table banana (select * from sky);
#获取数据表的表结构、索引等信息
show create table banana\G;
select * from banana;
desc banana;
3. 테이블을 지우고 테이블의 모든 데이터 삭제
(1) 방법 1:
#DELETE清空表后,返回的结果内有删除的记录条目;
delete from banana;
show tables;
desc banana;
select from * banana;
DELETE가 작동하면 레코드 데이터를 한 줄씩 삭제합니다. 테이블에 자체 증가 필드가 있는 경우 DELETE FROM을 사용하여 모든 레코드를 삭제한 후 새로 추가된 레코드는 계속 자체 증가하고 원래 가장 큰 레코드 ID에서 레코드를 씁니다. 이 삭제는 테이블의 데이터만 삭제합니다.
새로 추가된 레코드는 계속해서 자동 증가하고 원래의 가장 큰 레코드 ID 뒤에서 레코드를 씁니다.
(2) 방법 2:
#TRUNCATE清空表后,没有返回被删除的条目:
truncate table sun;
TRUNCATE가 작동하면 테이블 구조가 그대로 재설정되므로 TRUNCATE가 DELETE보다 빠르게 테이블을 지우고 TRUNCATE TABLE을 사용하여 테이블의 데이터를 지우면 ID가 1부터 다시 기록됩니다.
4. 임시 테이블 생성
임시 테이블이 성공적으로 생성된 후 생성된 임시 테이블은 SHOWTABLES 명령을 사용하여 볼 수 없으며 연결이 종료되면 임시 테이블이 파괴됩니다.
연결을 종료하기 전에 DROP TABLE 문을 사용하여 직접 임시 테이블을 수동으로 삭제하는 등 추가, 삭제, 수정 및 확인과 같은 작업을 수행할 수도 있습니다.
추신: 외래 키를 만들 수 없습니다.
(1) 형식
CREATE TEMPORARY TABLE 表名 (字段1 数据类型,字段2 数据类型[, ...][, PRIMARY KEY (主键名)]);
(2) 예:
create temporary table tree (id int(4) zerofill primary key auto_increment,name varchar(10) not null,cardid int(18) not null unique key,hobby varchar(10));
insert into tree values (1,'qqq',123456,'running') ;
select * from tree;
show tables;
quit
select * from tree;
(3) 적용 시나리오
- 많은 양의 데이터를 삭제할 때와 같은 테스트 환경에서 사용할 수 있습니다. 복잡한 삭제를 수행하기 위해 임시 테이블을 만들 수 있습니다.
- 요구 사항은 오늘 특정 소프트웨어의 모든 새 번호를 등록하는 것입니다.
2. MySQL의 6가지 일반적인 제약
기본 키 제약 조건(기본 키)
외래 키 제약 조건(외래 키)
null이 아닌 제약 조건(null이 아님)
고유 제약 조건(unique [key|index])
기본값 제약 조건(기본값)
자체 증가 제약 조건(auto_increment)
1. 외래키의 정의
동일한 속성 필드 x가 테이블 1의 기본 키이지만 테이블 2에는 없는 경우 필드 x를 테이블 2의 외래 키라고 합니다.
2. 외래 키 제약 조건 만들기
데이터 무결성과 일관성을 보장하기 위해 외래 키 제약 조건(우발적인 삭제, 수정)을 만듭니다.
기본키 테이블과 외래키 테이블의 이해
(1) 공개키워드를 기본키로 하는 테이블은 기본키 테이블(부모테이블, 기본테이블)
(2) 공개키워드를 외래키로 하는 테이블은 외래키 테이블(슬레이브 테이블, 외부 테이블)
참고: 외래키와 연관된 기본테이블의 필드는 기본키로 설정해야 한다. 슬레이브 테이블은 임시 테이블이 될 수 없으며
마스터 테이블의 외래 키 필드와 슬레이브 테이블의 필드는 데이터 유형, 문자 길이 및 제약 조건이 동일해야 합니다.
3. 메인 테이블 블루 생성
create table blue (hobid int(4),hobname varchar(50));
4. 아이스크림에서 테이블 만들기
create table Icecream(id int(4) primary key auto_increment,name varchar(10),age int(3),hobid int(4));
5. 파란색 기본 테이블에 기본 키 제약 조건을 추가합니다. 기본 키 이름은 "PK_"로 시작하는 것이 좋습니다.
alter table blue add constraint PK_hobid primary key (hobid);
6. 슬레이브 테이블 Icecream 테이블에 외래 키를 추가하고 Icecream 테이블의 hobid 필드와 파란색 테이블의 hobid 필드 간에 외래 키 연결을 설정합니다.
외래 키 이름은 "FK_"로 시작하는 것이 좋습니다.
alter table Icecream add constraint FK_hob foreign key (hobid) references blue (hobid);
7. 쿼리 테이블 문 구조 명령을 사용하여 외래 키 연결을 볼 수 있습니다.
show create table Icecream;
desc blue;
desc Icecream;
MySQL 데이터베이스에서는 의 MUL
타입 KEY
이고 풀네임은 MULTIPLE
, 다중 인덱스를 의미합니다.
인덱스를 구성하는 테이블에 여러 열이 있는 경우 각 인덱스 열에 MUL
유형이 표시됩니다. 이는 일반적으로 CREATE INDEX
다중 열 복합 인덱스가 를 사용하여 정의될 때 발생합니다.
MUL
타입은 두 가지 의미가 있습니다. 하나는 현재 인덱스 열에 여러 개의 동일한 값, 즉 중복 값이 포함되어 있다는 의미이고 다른 하나는 현재 인덱스 열에 여러 개의 다른 값, 즉 고유하지 않은 값이 포함되어 있음을 의미합니다.
인덱스 열의 유형이 인 경우 MUL
쿼리를 사용할 때 성능 문제가 발생할 수 있습니다. MySQL은 모든 인덱스 열에서 어떤 값이 고유한지 결정할 수 없기 때문에 MySQL이 더 많은 데이터를 읽고 더 복잡한 쿼리 작업을 수행하게 됩니다.
EXPLAIN
쿼리 성능을 최적화해야 하는 경우 명령을 사용하거나 테이블 구조를 재설계하고 인덱스를 병합하여 인덱스 효율성을 높일 수 있습니다 .
8. 새로운 데이터 레코드를 삽입할 때 마스터 테이블 다음에 슬레이브 테이블을 삽입해야 합니다.
insert into blue values(1,'running');
insert into Icecream values(1,'zs',18,1);
9. 데이터 레코드를 삭제할 때는 먼저 테이블을 삭제한 다음 기본 테이블을 삭제해야 합니다. 즉, 기본 키 테이블을 삭제할 때는 먼저 연결된 다른 테이블을 삭제해야 합니다.
drop tables Icecream;
drop tables blue;
10. 외래 키 제약 조건 보기 및 삭제
#如果要删除外键约束字段先删除外键约束,再删除外键名
show create table Icecream;
alter table Icecream drop foreign key FK_hob;
alter table Icecream drop key FK_hob;
desc Icecream;
3. 데이터베이스 사용자 관리
1. 새 사용자 만들기
(1) 형식
CREATE USER '用户名'@'来源地址' [IDENTIFIED BY [PASSWORD] '密码'];
'Username': 생성할 사용자 이름을 지정합니다.
'Source Address': 새로 생성된 사용자가 로그인할 수 있는 호스트를 IP 주소, 네트워크 세그먼트 및 호스트 이름 형식으로 지정합니다. 로컬 사용자는 localhost를 사용하여 모든 호스트에서 로그인할 수 있습니다. 와일드카드를 사용할 수 있습니다. ); 'Ciphertext'; "IDENTIFIED BY" 부분이 생략된 경우 사용자의 암호는 비어 있습니다(권장
하지 않음
) .
(2) 예
#明文创建
create user 'user1'@'localhost' identified by '123456';
#密文创建
select password('abc123');
create user 'user2'@'localhost' identified by password '*6691484EA6B50DDDE1926A220DA01FA9E575C18A';
2. 사용자 정보 보기
생성된 사용자는 mysql 데이터베이스의 user 테이블에 저장됩니다.
USE mysql;
SELECT User,authentication_string,Host from user;
3. 중명명 지정
rename user 'user1'@'localhost' to 'lisi'@'localhost';
SELECT User,authentication_string,Host from user;
4. 사용자 삭제
DROP USER 'lisi'@'localhost' ;
5. 현재 비밀번호 수정
SET PASSWORD = PASSWORD('abc123');
6. 다른 사용자 비밀번호 수정
set password for 'user2'@'localhost' = password('123456');
7. 루트 비밀번호 솔루션을 잊어버리세요
修改/etc/my.cnf 配置文件,免密登陆mysql
vim /etc/my.cnf
[mysqld]
#添加,使登录mysql不使用授权表
skip-grant-tables
systemctl restart mysqld
mysql #直接登录
然后使用SQL语句修改密码
UPDATE mysql.user SET AUTHENTICATION_STRING = PASSWORD('abc123') where user='root';
#刷新,必须大写
FLUSH PRIVILEGES;
quit
mysql -u root -pabc123
PS:最后再把/etc/my.cnf 配置文件里的skip-grant-tables 删除,并重启mysql服务,即取消免密登录数据库
4. 데이터베이스 사용자 인증
1. 권한 부여
부여 권한 상승
(1) 형식
GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'来源地址' [IDENTIFIED BY '密码'];
(2) 예
#授权了一个名为 'user2' 的 MySQL 用户对所有数据库和表拥有全部权限
grant all privileges on *.* to 'user2'@'%' identified by '123456';
Query OK, 0 rows affected, 1 warning (0.00 sec)
#권한 목록: "선택, 삽입, 업데이트" 와 같이 쉼표로 구분하여 사용할 수 있는 다양한 데이터베이스 작업을 나열하는 데 사용됩니다 . 모든 작업을 수행할 수 있는 권한을 부여하는 모든 권한에 대해 "all"을 사용합니다.
#Database name.Table name: 권한 부여 작업을 지정하는 데 사용되는 데이터베이스 및 테이블의 이름입니다. 여기서 와일드카드 " "를 사용할 수 있습니다.
예를 들어 "kgc. "를 사용하여 인증된 작업의 개체가 학교 데이터베이스의 모든 테이블임을 나타냅니다.
#'User name@source address': 접근이 허용된 사용자 이름과 클라이언트 주소, 즉 누가 어디에서 접속할 수 있는지 지정하기 위해 사용합니다. 소스 주소는 도메인 이름, IP 주소일 수 있으며 "%" 와일드카드는 "%.xyw.com", "192.168.80.%" 등과 같이 특정 영역 또는 네트워크 세그먼트의 모든 주소를 나타내는 데 사용할 수 있습니다.
#IDENTIFIED BY: 사용자가 데이터베이스에 연결하기 위해 사용하는 암호 문자열을 설정하는 데 사용됩니다.
새 사용자를 생성할 때 "IDENTIFIED BY" 부분을 생략하면 사용자의 암호가 비어 있게 됩니다.
주문하다 | 의미 |
---|---|
승인하다 | SQL 문에서 권한 부여 작업의 키워드로, 사용자에게 특정 액세스 권한을 부여하는 것을 의미합니다. |
모든 권한 | 사용자에게 모든 권한을 부여하는 것을 의미하는 시스템 권한 키워드. |
에 . | 모든 데이터베이스 및 사용자 테이블이 지정되었음을 나타내는 데이터베이스 관련 문. |
'user2'@'%'로 | 'user2'라는 사용자에게 권한을 부여하고 해당 사용자가 % 호스트에서 로그인할 수 있는 사용자 지정 명령문입니다. |
'123456'으로 식별 | 사용자 지정 문은 사용자 'user2'의 로그인 암호가 '123456'임을 나타냅니다. |
2. 사용자는 로컬에서 데이터베이스의 모든 테이블의 데이터 레코드를 쿼리할 수 있지만 다른 데이터베이스의 테이블 레코드는 쿼리할 수 없습니다.
grant select on banana.* to 'ff'@'localhost' identified by '123456';
Query OK, 0 rows affected, 2 warnings (0.00 sec)
3. 사용자가 모든 터미널에서 mysql에 원격으로 연결하고 모든 권한을 갖도록 허용합니다.
grant all privileges on *.* to 'zjf'@'%' identified by '123456';
Query OK, 0 rows affected, 1 warning (0.00 sec)
#刷新权限
flush privileges;
quit
시험
mysql -u zjf -p123456
show databases;
use summer;
show tables; .
select * from sun;
delete from sky;
흰색 단자 테스트 연결 가능
4. 데이터베이스 권한 보기
mysql -u root -pabc123
SHOW GRANTS FOR 用户名@来源地址;
SHOW GRANTS FOR 'zjf'@'%';
5. 데이터베이스 권한 철회
(1) 형식
REVOKE 权限列表 ON 数据库名.表名 FROM 用户名@来源地址;
(2) 예
mysql -u root -pabc123
use mysql;
REVOKE ALL ON *.* FROM 'zjf'@'%'
mysql -uzjf -p123456
SHOW GRANTS FOR 'zjf'@'%';
#USAGE 권한은 데이터베이스 로그인에만 사용할 수 있으며 어떤 작업도 수행할 수 없습니다.
플러시 권한;
총
1. 데이터베이스에서 삭제, 잘라내기 및 삭제의 차이점
1.1방울
(1) 형식
드롭 테이블 table_name
(2) 특징
- 빨리 삭제
- 테이블 및 콘텐츠 및 구조 삭제
- 가져올 수 없는 곳
- 롤백 불가(복구 불가)
- DDL에 속합니다
1.2 자르기
(1) 형식
테이블 자르기 table_name
(2) 특징
- 빨리 삭제
- 테이블의 내용 삭제
- 가져올 수 없는 곳
- 롤백 불가(복구 불가)
- DDL에 속합니다
1.3 삭제
(1) 형식
table_name에서 삭제
(2) 특징
- 삭제가 느리고 한 줄씩 삭제해야 합니다.
- 테이블 구조는 여기에 있으며 테이블의 내용은 where의 실행에 따라 다릅니다.
- 어디로 걸릴 수 있습니다
- 롤백 가능(복구 가능)
- DML에 속합니다
1.4 애플리케이션 시나리오에서의 선택
- 테이블이 더 이상 필요하지 않을 때 drop 사용
- 일부 데이터 행을 삭제하려면 delete를 사용하고 where 절을 추가하십시오.
- 테이블을 유지하고 모든 데이터를 삭제할 때 자르기 사용
2. 인증된 사용자 권한이 모든 권한을 나타내는 권한은 무엇입니까?
insert(데이터 삽입)
select(데이터 쿼리)
update(테이블 데이터 업데이트)
delete(테이블의 데이터 삭제)
drop(라이브러리 및 테이블 삭제)
cerate(라이브러리, 테이블 생성)
index(인덱스 생성)
alter(테이블 속성 변경)
create view(뷰 생성)
create routine(저장 프로시저 생성)
alter routine(저장 프로시저 수정)
event(이벤트)