Maison > base de données > tutoriel mysql > Vous souvenez-vous des « L » dans MySQL ?

Vous souvenez-vous des « L » dans MySQL ?

Libérer: 2023-08-24 15:45:26
avant
1037 Les gens l'ont consulté

Bonjour à tous, aujourd'hui j'aimerais partager avec vous : Quelques "L" dans MySQL, vous vous en souvenez encore ?

Lorsque nous commençons tout juste à apprendre les connaissances sur les bases de données, nous entrerons d'abord en contact avec divers L, où L est la première lettre de la langue langue.

Il existe à peu près les types suivants :

  • DQL
  • DML
  • DCL
  • DDL
  • TCL

Ci-dessous, laissez-moi vous les présenter un par un.

DQL

fait référence à select查询语句(Data query language),基本结构是由 select子句,from子句,where etc.

"Requête de table unique"

Utilisez des images Pour l'exprimer de manière plus vivante : img

DMLDML fait référence au langage de manipulation de données, le nom anglais complet est , qui est utilisé pour mettre à jour les enregistrements dans les tables de la base de données. Mots-clés : insertion, suppression, mise à jour, etc., sont des opérations sur les données.

insert

insert insert

-- 格式
SELECT selection_list /*要查询的列名称*/
  FROM table_list /*要查询的表名称*/
  WHERE condition /*行条件*/
  GROUP BY grouping_columns /*对结果分组*/
  HAVING condition /*分组后的行条件*/
  ORDER BY sorting_columns /*对结果排序*/
  LIMIT offset_start, row_count /*结果限定*/
Copier après la connexion
Remarque : Vous souvenez-vous des « L » dans MySQL ?

Le nombre de noms de colonnes est égal au nombre de valeurs après les valeursL'ordre des colonnes est cohérent avec l'ordre des valeurs insérées

Data Manipulation Language

Le type du nom de colonne doit être cohérent avec la valeur insérée

Lors de l'insertion de la valeur, elle ne peut pas dépasser la longueur maximale

Si la valeur est une chaîne ou date, il faut la citer ''

  1. mettre à jour
  2. mettre à jour les données
  3. update 表名 set 字段名=值,字段名=值...;
    update 表名 set 字段名=值,字段名=值... where 条件;
    Copier après la connexion

    注意:

    1. 列名的类型与修改的值要一致
    2. 修改值的时候不能超过最大长度
    3. 值如果是字符串或者日期要加’’

    delete

    delete删除数据

    delete from 表名 [where 条件];
    Copier après la connexion

    注意:

    删除表中所有记录使用delete from 表名;还是truncate table 表名;?删除方式:delete一条一条的删除,不清空auto_increment(自增)记录数;truncate 直接删除表,重新建表,auto_increment讲置为0,重新开始。事务方面:delete删除的数据,如果在一个事务中可以找回;truncate 删除的数据找不回来。

    DCL

    DCL是数据控制语言Data Control Language)的简称,它包含诸如GRANT之类的命令,并且主要涉及数据库系统的权限,权限和其他控件。

    • GRANT :允许用户访问数据库的权限
    • REVOKE:撤消用户使用GRANT命令赋予的访问权限

    DCL 语句主要是DBA 用来管理系统中的对象权限时所使用,一般的开发人员很少使用。

    案例演示

    下面 通过一个例子来简单说明一下。创建一个数据库用户plf,具有对plf数据库中所有表的SELECT/INSERT 权限:

    mysql> grant select,insert on plf.* to 'plf'@'%' identified by '123456';
    Query OK, 0 rows affected (0.00 sec)
    mysql> flush privileges;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> quit
    Bye
    
    
    
    [root@mysql ~]# mysql -uplf -p123456 -h 192.168.3.100
    Warning: Using a password on the command line interface can be insecure.
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 7
    Server version: 5.6.37 Source distribution
    
    Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql> use mysql;
    ERROR 1044 (42000): Access denied for user 'plf'@'%' to database 'mysql'
    mysql> use plf
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    
    Database changed
    Copier après la connexion

    由于权限变更,需要将 plf 的权限变更,收回 INSERT,只能对数据进行 SELECT 操作,这时我们需要使用root账户进行上述操作:

    mysql> revoke insert on plf.* from 'plf'@'%';
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> quit
    Bye
    
    
    
    
    
    [root@mysql ~]# mysql -uplf -p123456 -h 192.168.3.100
    Warning: Using a password on the command line interface can be insecure.
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 9
    Server version: 5.6.37 Source distribution
    
    Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql> use plf
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    
    Database changed
    mysql> show tables;
    +---------------+
    | Tables_in_plf |
    +---------------+
    | dept          |
    | emp           |
    | hk_info       |
    | log_info      |
    | user_info     |
    +---------------+
    5 rows in set (0.00 sec)
    
    mysql> insert into dept values(7,'plf');
    ERROR 1142 (42000): INSERT command denied to user 'plf'@'192.168.3.100' for table 'dept'
    mysql> select*from dept;
    +--------+----------+
    | deptno | deptname |
    +--------+----------+
    |      1 | tech     |
    |      2 | sale     |
    |      3 | hr       |
    |      5 | fin      |
    +--------+----------+
    4 rows in set (0.00 sec)
    Copier après la connexion

    以上例子中的grant和revoke分别授出和收回了用户plf的部分权限,达到了我们的目的。

    DDL

    DDL是数据定义语言(Data Definition Language)的简称,它处理数据库schemas和描述数据应如何驻留在数据库中。

    • CREATE:创建数据库及其对象(如表,索引,视图,存储过程,函数和触发器)
    • ALTER:改变现有数据库的结构
    • DROP:从数据库中删除对象
    • TRUNCATE:从表中删除所有记录,包括为记录分配的所有空间都将被删除
    • COMMENT:添加注释
    • RENAME:重命名对象

    常用命令如下:

    # 建表
    CREATE TABLE sicimike  (
      id int(4) primary key auto_increment COMMENT '主键ID',
      name varchar(10) unique,
      age int(3) default 0,
      identity_card varchar(18)
      # PRIMARY KEY (id) // 也可以通过这种方式设置主键
      # UNIQUE KEY (name) // 也可以通过这种方式设置唯一键
      # key/index (identity_card, col1...) // 也可以通过这种方式创建索引
    ) ENGINE = InnoDB;
    
    # 设置主键
    alter table sicimike add primary key(id);
    
    # 删除主键
    alter table sicimike drop primary key;
    
    # 设置唯一键
    alter table sicimike add unique key(column_name);
    
    # 删除唯一键
    alter table sicimike drop index column_name;
    
    # 创建索引
    alter table sicimike add [unique/fulltext/spatial] index/key index_name (identity_card[(len)] [asc/desc])[using btree/hash]
    create [unique/fulltext/spatial] index index_name on sicimike(identity_card[(len)] [asc/desc])[using btree/hash]
    example: alter table sicimike add index idx_na(name, age);
    
    # 删除索引
    alter table sicimike drop key/index identity_card;
    drop index index_name on sicimike;
    
    # 查看索引
    show index from sicimike;
    
    # 查看列
    desc sicimike;
    
    # 新增列
    alter table sicimike add column column_name varchar(30);
    
    # 删除列
    alter table sicimike drop column column_name;
    
    # 修改列名
    alter table sicimike change column_name new_name varchar(30);
    
    # 修改列属性
    alter table sicimike modify column_name varchar(22);
    
    # 查看建表信息
    show create table sicimike;
    
    # 添加表注释
    alter table sicimike comment '表注释';
    
    # 添加字段注释
    alter table sicimike modify column column_name varchar(10) comment '姓名';
    Copier après la connexion

    TCL

    TCL是事务控制语言Transaction Control Language)的简称,用于处理数据库中的事务

    • COMMIT : validation de la transaction
    • COMMIT:提交事务
  • ROLLBACK:在发生任何错误的情况下回滚事务
  • 事务的概念

    事务是由一条或多条SQL语句组成的一个执行单元,这个单元作为一个不可分割的执行整体,要么全部执行成功,要么全部执行失败。若其中有一条执行失败则事务会回滚到事务开始之前的状态。事务有四个属性(ACID):原子性、一致性、隔离性、持久性

    • 原子性(Atomicity):指事务是一个不可分割的整体,事务中的操作要么都执行,要么都不执行。
    • 一致性(Consistency):事务必须是数据库从一个一致性状态变为另一个一致性状态。
    • 隔离性(Isolation):指一个事务的执行不能被其他事务干扰,即一个事务内部的操作及其使用的数据对并发的其他事务是隔离的,并发执行的各个事务之前不能相互干扰。这个在高并发环境下尤为重要,事务隔离的程度跟选择的隔离级别有很大关系。
    • 持久性:一个事务一旦提交,对数据库中数据的改变就是永久性的。

    注意:

    事务仅对数据的增删改操作有效,对于表的定义、表结构的变化等是没有事务的概念的。

    存储引擎和事务

    存储引擎是指数据存储时使用的不同的技术,并不是所有的存储引擎都支持事务,Mysql中常用的存储引擎中只有InnoDB是支持事务的,MyIsam和Memory则不支持事务。

    Mysql中查看存储引擎的方式:show engines;