> 데이터 베이스 > MySQL 튜토리얼 > MySQL 테이블의 CURD 작업을 자세히 설명하는 기사

MySQL 테이블의 CURD 작업을 자세히 설명하는 기사

青灯夜游
풀어 주다: 2023-02-16 19:20:17
앞으로
1568명이 탐색했습니다.

이 기사는 MySQL 테이블의 CURD 작업에 대한 자세한 이해를 제공할 것입니다. 도움이 되길 바랍니다!

1. SQL 문

관계형 데이터베이스를 운영하기 위한 프로그래밍 언어로, SQL이라고 하는 관계형 데이터베이스를 운영하기 위한 통합 표준 집합을 정의합니다.

- SQL 일반 구문

1. SQL 문은 한 줄 또는 여러 줄로 작성할 수 있으며 세미콜론으로 끝날 수 있습니다.

2. SQL 문은 공백/들여쓰기를 사용하여 문의 가독성을 높일 수 있습니다.

3. MySQL 데이터베이스의 SQL 문은 대소문자를 구분하지 않으며, 키워드에는 대문자 사용을 권장합니다.

- 댓글
  • 한 줄 댓글: – 내용에 댓글을 달거나 #을 사용하여 내용에 댓글을 달 수 있습니다.
  • 여러 줄 주석: /* 주석 내용*/
- SQL 문 분류
분류 설명
DDL(deifnition) 데이터 정의 언어(us 정의할 에드 데이터베이스 객체, 데이터베이스, 테이블, 필드)
DML(조작) 데이터 조작 언어(데이터베이스 테이블의 데이터 추가, 삭제, 수정)
DQL(쿼리) 데이터 쿼리 언어, 사용 데이터베이스의 테이블에 대한 쿼리 레코드
DCL(control) 데이터 제어 언어, 데이터베이스 사용자 생성 및 데이터베이스 액세스 권한 제어에 사용

2. 기본 테이블 작업

- 테이블 생성
  • 동일한 데이터베이스에는 동일한 이름의 테이블이 두 개 있을 수 없으며 테이블 이름과 열 이름은 SQL 키워드를 반복할 수 없습니다.

  • 구문: ​​

create table 表名(定义列1, 定义列2, .......);
列 -> 变量名 数据类型
로그인 후 복사
  • 예:
mysql> create table if not exists book(
    ->   book_name varchar(32) comment '图书名称',
    ->   book_author varchar(32)comment  '图书作者' ,
    ->   book_price decimal(12,2) comment '图书价格',
    ->   book_category varchar(12) comment '图书分类',
    ->   publish_data timestamp
    -> )character set utf8mb4;
    
Query OK, 0 rows affected (0.04 sec)
로그인 후 복사
- 라이브러리의 테이블 보기
  • 구문: ​​

    show tables;
    로그인 후 복사
  • 예 :

    mysql> show tables;
    +--------------------+
    | Tables_in_mytestdb |
    +--------------------+
    | book               |
    +--------------------+
    1 row in set (0.00 sec)
    로그인 후 복사
- 표 보기 구조
  • 구문: ​​

    desc  表名;
    로그인 후 복사
  • 예:

MySQL 데이터베이스의 테이블 구조에는 주로 다음 정보가 포함됩니다: 필드 이름, 필드 유형, 비어 있음 허용 여부, 인덱스 유형. 기본값, 확장 정보

- 테이블 삭제
  • 구문:
drop table 表名
로그인 후 복사
  • 예:
mysql> desc test1;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name  | varchar(10) | YES  |     | NULL    |       |
| age   | int(11)     | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.02 sec)

mysql> drop table test1;
Query OK, 0 rows affected (0.04 sec)

mysql> desc test1;
ERROR 1146 (42S02): Table 'mytestdb.test1' doesn't exist
로그인 후 복사
- 테이블 이름 바꾸기
  • 구문:

    rename table old_name to new_name;
    로그인 후 복사
  • 예:

    mysql> rename table book to eBook;
    Query OK, 0 rows affected (0.05 sec)
    
    mysql> show tables;
    +--------------------+
    | Tables_in_mytestdb |
    +--------------------+
    | ebook              |
    +--------------------+
    1 row in set (0.00 sec)
    로그인 후 복사

3 MySQL의 추가, 삭제, 확인 및 수정 작업

CRUD는 Create, Retrieve, Update 및 Delete

Case:

-- 创建一张图书表
mysql> create table if not exists book(
    ->   book_name varchar(32) comment '图书名称',
    ->   book_author varchar(32)comment  '图书作者' ,
    ->   book_price decimal(12,2) comment '图书价格',
    ->   book_category varchar(12) comment '图书分类',
    ->   publish_data timestamp
    -> )character set utf8mb4;
로그인 후 복사
- 추가 (insert 문)
  • 단일 행 삽입(모든 열)

    insert into 表名 values(对应列的参数列表); 
    -- 一次插入一行
    로그인 후 복사
  • 다중 행 삽입(모든 열)

    insert into 表名 values(对应列的实参列表), (对应列的参数列表), (对应列的参数列表);              
    -- 一次插入多行            -- 一次插入多行
    로그인 후 복사
  • 열 삽입 지정

    • 값 다음 내용, 번호 및 유형( )는 테이블 이름 뒤의 ()에 지정된 구조와 일치해야 합니다.
    • insert into 表名 (需要插入的列) values(对应列的参数列表); 
      -- 一次插入一行
      insert into 表名 (需要插入的列) values(对应列的参数列表), (), ().... 
      -- 一次插入多行
      로그인 후 복사
  • Case
  • # 单行输入
    
    mysql> 
    insert into book values('计算机网络','谢希仁',45,'计算机类','2020-12-25 12:51:00');
    Query OK, 1 row affected (0.01 sec)
    
    #多行输入
    
    mysql> 
    insert into book values('计算机组成原理','王峰',45,'硬件类','2020-12-12 12:00:00'),
        -> ('微机原理','李华',97,'硬件类','2000-12-19 20:00:00');
        
    Query OK, 2 rows affected (0.04 sec)
    Records: 2  Duplicates: 0  Warnings: 0
    
    #指定列插入
    
    mysql>
    insert into book(book_name,book_author,publish_data) values ('软件工程','张三','2020-05-06 12:00:00');
    Query OK, 1 row affected (0.02 sec)
    로그인 후 복사

  • 데이터를 삽입한 후의 테이블은 그림과 같습니다.
MySQL에서는 여러 레코드를 한 번에 삽입하는 것보다 여러 레코드를 차례로 삽입하는 효율성이 낮습니다. 그 이유는 다음과 같습니다.

네트워크 요청 및 응답 시간 오버헤드, 각 삽입에는
  • 데이터베이스 서버는 IO 작업 중에 데이터 양보다 작업 횟수의 영향이 더 큽니다.
  • 모든 SQL 작업은 내부적으로 열린 트랜잭션도 특정 시간을 차지합니다.
- 쿼리(select 문)
전체 열 쿼리
Syntax

select * from 表名

--  * 表示通配符, 可以匹配表中的所有列.
로그인 후 복사

주의해서 사용하세요. I/O는 사용하기 쉽습니다. 또는 네트워크 대역폭이 가득 찼습니다. 외부 사용자 클라이언트가 광대역을 통해 서버에 액세스하려는 경우 서버가 올바르게 응답할 수 없습니다.

Example

select * from book;
로그인 후 복사

열 쿼리 지정
  • select 列名...  from  表名
    로그인 후 복사
Example
  • mysql> select book_name from book;
    +----------------+
    | book_name      |
    +----------------+
    | 计算机网络     |
    | 计算机组成原理 |
    | 微机原理       |
    | 软件工程       |
    +----------------+
    4 rows in set (0.01 sec)
    
    mysql> select book_author,book_price from book;
    +-------------+------------+
    | book_author | book_price |
    +-------------+------------+
    | 谢希仁      |      45.00 |
    | 王峰        |      45.00 |
    | 李华        |      97.00 |
    | 张三        |       NULL |
    +-------------+------------+
    4 rows in set (0.00 sec)
    로그인 후 복사
필드를 표현식으로 쿼리
  • select 字段或表达式, 字段或表达式... from 表名;
    로그인 후 복사
Ex ample
  • -- 查询图书涨价10元后所有图书的名称作者和价格
    mysql> select book_name ,book_author,book_price + 10 from book;
    +----------------+-------------+-----------------+
    | book_name      | book_author | book_price + 10 |
    +----------------+-------------+-----------------+
    | 计算机网络     | 谢希仁      |           55.00 |
    | 计算机组成原理 | 王峰        |           55.00 |
    | 微机原理       | 李华        |          107.00 |
    | 软件工程       | 张三        |            NULL |
    +----------------+-------------+-----------------+
    4 rows in set (0.00 sec)
    로그인 후 복사
표현식 또는 필드 별칭을 지정하세요. ​​query
MySQL은 쿼리된 표현식에 별칭 제공을 지원합니다. as를 사용하면 쿼리 결과가 더 직관적이고 코드 읽기가 더 쉬워집니다.

select 列名或表达式 as 别名, ... from 表名;
로그인 후 복사

Example
  • -- 将涨价20元后的图书价格取为别名newprice
    mysql> select book_name,book_author,book_price + 20 as newprice from book;
    +----------------+-------------+----------+
    | book_name      | book_author | newprice |
    +----------------+-------------+----------+
    | 计算机网络     | 谢希仁      |    65.00 |
    | 计算机组成原理 | 王峰        |    65.00 |
    | 微机原理       | 李华        |   117.00 |
    | 软件工程       | 张三        |     NULL |
    +----------------+-------------+----------+
    4 rows in set (0.00 sec)
    로그인 후 복사
Go Duplicate query
  • select distinct 列名 from 表名
    로그인 후 복사
Example
  • --book 表中插入一条重复的book_name数据
    
    mysql> insert into book values('计算机网络','张华',89,'计算机类','2020-11-23 11:00:00');
    Query OK, 1 row affected (0.00 sec)
    
    mysql> select book_name from book;
    +----------------+
    | book_name      |
    +----------------+
    | 计算机网络     |
    | 计算机组成原理 |
    | 微机原理       |
    | 软件工程       |
    | 计算机网络     |
    +----------------+
    5 rows in set (0.00 sec)
    
    mysql> select distinct book_name from book;
    +----------------+
    | book_name      |
    +----------------+
    | 计算机网络     |
    | 计算机组成原理 |
    | 微机原理       |
    | 软件工程       |
    +----------------+
    4 rows in set (0.00 sec)
    로그인 후 복사
쿼리 결과에 중복된 book_name 요소가 없어 중복 제거 효과를 얻을 수 있습니다.

Sort query
  • select 列名 
    from 表名 
    order by 列名 asc(升序)/desc(降序); 
    #  想要排序的列
    로그인 후 복사
Example
  • # 按照书的价格升序进行排列
    mysql> select book_name,book_price from book order by book_price asc;
    +----------------+------------+
    | book_name      | book_price |
    +----------------+------------+
    | 软件工程       |       NULL |
    | 计算机网络     |      45.00 |
    | 计算机组成原理 |      45.00 |
    | 计算机网络     |      89.00 |
    | 微机原理       |      97.00 |
    +----------------+------------+
    5 rows in set (0.00 sec)
    
    #按照书的价格降序进行排列
    mysql> select book_name,book_price from book order by book_price desc;
    +----------------+------------+
    | book_name      | book_price |
    +----------------+------------+
    | 微机原理       |      97.00 |
    | 计算机网络     |      89.00 |
    | 计算机网络     |      45.00 |
    | 计算机组成原理 |      45.00 |
    | 软件工程       |       NULL |
    +----------------+------------+
    5 rows in set (0.00 sec)
    로그인 후 복사
오름차순 생략 가능합니다. 즉, 기본값은 오름차순이며, null 값은 그 중 가장 작아야 합니다.
  • 여러 필드를 정렬할 수 있으며, 우선 순위는 쓰는 순서입니다.
    # 查询按照价格升序 ,年份降序
    select name,price,age from book order by price asc,age desc;
    #查询按照总成绩进行降序
    select name,english+math+chinese as total from grade order by total desc;
    로그인 후 복사
  • 조건 쿼리
    쿼리를 사용할 때 일반적으로 다양한 전제 조건이 있으며, 완료하려면 조건 쿼리를 사용해야 합니다.
  • select 列名.. from 表名..where + 条件
    로그인 후 복사
    비교 연산자
  • 运算符说明
    >, >=, <, <=大于,大于等于,小于,小于等于
    =等于,null 不安全,例如 null = null 的结果是 null(false)
    <=>等于,null 安全,例如 null <=> null 的结果是 true(1)
    !=, <>不等于
    between a0 and a1范围匹配,[a0, a1],如果 a0 <= value <= a1,返回 true(1)
    in (option, …)如果是 option 中的任意一个,返回 true(1)
    is null是 null
    is not null不是 null
    like模糊匹配; % 表示任意多个(包括 0 个)任意字符;_ 表示任意一个字符

    逻辑运算符

    运算符说明
    and多个条件必须为 true , 结果才为true
    or任意一个条件为true 结果才为true
    not条件为true , 结果为false

    • WHERE条件可以使用表达式,但不能使用别名。

    • AND的优先级高于OR,在同时使用时,需要使用小括号()包裹优先执行的部分

    • 案例
    -- 查询图书价格低于50的图书作者和图书名称
    mysql> select book_name,book_author from book where book_price < 50;
    +----------------+-------------+
    | book_name      | book_author |
    +----------------+-------------+
    | 计算机网络     | 谢希仁      |
    | 计算机组成原理 | 王峰        |
    +----------------+-------------+
    2 rows in set (0.05 sec)  
    -- 查询图书价格等于97的图书作者
    mysql> select book_name ,book_author from book where book_price = 97;
    +-----------+-------------+
    | book_name | book_author |
    +-----------+-------------+
    | 微机原理  | 李华        |
    +-----------+-------------+
    1 row in set (0.00 sec)
    -- 查询图书价格在50 - 100 之间的图书名称
    mysql> select book_name from book where book_price between 50 and 100;
    +------------+
    | book_name  |
    +------------+
    | 微机原理   |
    | 计算机网络 |
    +------------+
    2 rows in set (0.02 sec)\
    -- 查询图书价格在此范围内的图书名称
    mysql> select book_name from book where book_price in (12,45);
    +----------------+
    | book_name      |
    +----------------+
    | 计算机网络     |
    | 计算机组成原理 |
    +----------------+
    2 rows in set (0.00 sec)
    로그인 후 복사

    模糊查询

    • % 匹配任意多个(包括 0 个)字符
    • _ 匹配严格的一个字符
    #查询姓张的作者的书本价格书名.
    mysql> select book_price,book_name,book_author from book where book_author like &#39;张%&#39;;
    
    +------------+------------+-------------+
    | book_price | book_name  | book_author |
    +------------+------------+-------------+
    |       NULL | 软件工程   | 张三        |
    |      89.00 | 计算机网络 | 张华        |
    +------------+------------+-------------+
    2 rows in set (0.00 sec)
    # 查询前缀为&#39;计算机&#39;后缀为七个字的书籍名称
    mysql> select book_name from book where book_name like &#39;计算机____&#39;;
    +----------------+
    | book_name      |
    +----------------+
    | 计算机组成原理 |
    +----------------+
    #查询前缀为&#39;计算机&#39;的书籍名称并去重
    mysql> select distinct book_name from book where book_name like &#39;计算机%&#39;;
    +----------------+
    | book_name      |
    +----------------+
    | 计算机网络     |
    | 计算机组成原理 |
    +----------------+
    2 rows in set (0.00 sec)
    로그인 후 복사
    • 分页查询

    分页查询即将查询出的结果 , 按页进行呈现,并不是一次性展现出来,这种模式就是分页查询, mysql当中使用limit来实现分页查询.

    • limit 子句当中接受一个或者两个参数 , 这两个参数的值为0 或者正整数

    两个参数的limit子句的用法

    select 元素1,元素2  from 表名  limit offset,count;
    
    #offset参数指定要返回的第一行的偏移量。第一行的偏移量为0,而不是1。
    #count指定要返回的最大行数。
    로그인 후 복사

    示例:

    mysql> select book_author from book limit 2, 3;
    +-------------+
    | book_author |
    +-------------+
    | 李华        |
    | 张三        |
    | 张华        |
    +-------------+
    3 rows in set (0.02 sec)
    
    #表示获取列表当中偏移量为2(表示从第3行开始), 最大行数为3的作者名称
    로그인 후 복사

    带有一个参数的limit子句的用法

    select 列名1.列名2 from 表名 limit count;
    #  表示从结果集的开头返回的最大行数为count;
    #  获取前count行的记录
    로그인 후 복사

    等同于

    select 列名1 ,列名2 from 表名 limit 0 , count;# 第一行的偏移量为0
    로그인 후 복사

    示例

    mysql> select book_price from book limit 5;
    +------------+
    | book_price |
    +------------+
    |      45.00 |
    |      45.00 |
    |      97.00 |
    |       NULL |
    |      89.00 |
    +------------+
    5 rows in set (0.00 sec)
    
    # 获取表中前五行的图书价格 , 最大行数为5
    로그인 후 복사
    • limit 结合 order by 语句 和其他条件可以获取n个最大或者最小值

      select book_name,book_price from book order by book_price desc limit 3; 
      #获取价格前三高的图书名称和图书价格
      mysql> select book_price,book_name from book order by book_price desc limit 3;
      +------------+------------+
      | book_price | book_name  |
      +------------+------------+
      |      97.00 | 微机原理   |
      |      89.00 | 计算机网络 |
      |      45.00 | 计算机网络 |
      +------------+------------+
      3 rows in set (0.01 sec)
      로그인 후 복사
    • 使用limit 获取第n高个最大值

    偏移量从0开始,所以要指定从n - 1 开始,然后取一行记录

    #示例:获取价格第二高的图书名称
     mysql> select book_name from book order by book_price desc limit 1,1;
    +------------+
    | book_name  |
    +------------+
    | 计算机网络 |
    +------------+
    1 row in set (0.00 sec)
    로그인 후 복사
    - 修改(update)

    MySQL当中使用update关键字来对数据进行修改 , 既可以修改单列又可以修改多列.

    update 表名 set 列名1 = 值 , 列名2 = 值 ... where 限制条件下修改
    로그인 후 복사
    • SET子句指定要修改的列和新值。要更新多个列,请使用以逗号分隔的列表。以字面值,表达式或子查询的形式在每列的赋值中来提供要设置的值。
    • 第三,使用WHERE子句中的条件指定要更新的行。WHERE子句是可选的。 如果省略WHERE子句,则UPDATE语句将更新表中的所有行。

    示例:

    #将书名为&#39;软件工程&#39;的图书价格修改为66元
    mysql> update book set book_price = 66 where book_name = &#39;软件工程&#39;;
    Query OK, 1 row affected (0.05 sec)
    Rows matched: 1  Changed: 1  Warnings: 0
    
    mysql> select book_price from book where book_name = &#39;软件工程&#39;;
    +------------
    | book_price |
    +------------+
    |      66.00 |
    +------------+
    1 row in set (0.00 sec)
    
    #将所有的图书价格修改为原来的二倍
    mysql> update book set book_price = 2 * book_price;
    Query OK, 5 rows affected (0.02 sec)
    Rows matched: 5  Changed: 5  Warnings: 0
    #更新成功
    mysql> select book_price from book;
    +------------+
    | book_price |
    +------------+
    |      90.00 |
    |      90.00 |
    |     194.00 |
    |     132.00 |
    |     178.00 |
    +------------+
    5 rows in set (0.00 sec)
    로그인 후 복사
    - 删除(delete)

    要从表中删除数据,需要使用delete 语句, delete 语句的 用法如下

    delete from 表名 where + 条件
    로그인 후 복사

    首先指定需要删除数据的表,其次使用条件指定where子句中删除的行记录, 如果行匹配条件,这些行记录将会删除.

    WHERE子句是可选的。如果省略WHERE子句,DELETE语句将删除表中的所有行 , 请注意,一旦删除数据,它就会永远消失。因此,在执行DELETE语句之前,应该先备份数据库,以防万一要找回删除过的数据。

    示例

    #删除图书表中图书单价大于150的图书记录
    mysql> delete from book where book_price > 150;
    Query OK, 2 rows affected (0.01 sec)
    
    mysql> select book_price from book;
    +------------+
    | book_price |
    +------------+
    |      90.00 |
    |      90.00 |
    |     132.00 |
    +------------+
    3 rows in set (0.00 sec)
    로그인 후 복사

    MySQL中delete 语句也可以结合limit语句 和 order by 语句来控制删除的数量和条件

    【相关推荐:mysql视频教程

    위 내용은 MySQL 테이블의 CURD 작업을 자세히 설명하는 기사의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:csdn.net
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿