MySQL常用语句

MySQL的基本操作可以包括两个方面:MySQL常用语句如高频率使用的增删改查(CRUD)语句和MySQL高级功能,如存储过程,触发器,事务处理等。而这两个方面又可以细分如下:

  • MySQL常用语句
  1. 表(或者数据库)的CRUD
  2. 表数据的CRUD,其中表数据查询使用最多,也更复杂。查询可以按照单表还是多表可以分为:单表SELECT查询和多表的联结查询(INNER JOIN, LEFT JOIN, RIGHT JOIN和FULL JOIN)以及组合查询UNION和UNION ALL
  3. SQL语句中各个关键字的执行顺序
  • MySQL的高级功能
    1. 存储过程
    2. 事务处理
    3. 触发器

    1. 表(或数据库)操作语句1.1. 查询表(或数据库)

    1. 获取所有可用的数据库:SHOW DATABASES;
    2. 选择数据库:USE customers;
    3. 用于显示数据库服务器的状态信息:SHOW STATUS;
    4. 用来显示授权用户的安全权限:SHOW GRANTS;
    5. 用来显示数据库服务器或警告信息:SHOW ERRORS 或者 SHOW WARNINGS;
    6. 用于显示创建数据库时的创建语句:SHOW CREATE DATABASE customers;
    7. 用于显示创建表时的创建语句:SHOW CREATE TABLE customers;
    8. 获取当前所选的数据库中所有可用的表:SHOW TABLES;
    9. 获取表中所有列的信息:SHOW COLUMNS FROM tableName;同时DESCRIBE语句有相同的效果:DESCRIBE tableName;

    1.2. 新建表(或)数据库

    1. 新建数据库:CREATE DATABASE customers;
    2. 创建表可以使用CREATE TABLE语句:

    有这样一些细节:

    1. 允许NULL值,则说明在插入行数据时允许不给出该列的值,而NOT NULL则表示在插入或者更新该列数据,必须明确给出该列的值;
    2. DEFAULT表示该列的默认值,在插入行数据时,若没有给出该列的值就会使用其指定的默认值;
    3. PRIMARY KEY用于指定主键,主键可以指定一列数据,而可以由多列数据组合构成,如PRIMARY KEY(cust_id,cust_name);
    4. ENGINE用于指定引擎类型。常见的引擎类型有这些:(1)InnoDB是一个支持可靠的事务处理的引擎,但是不支持全文本搜索;(2)MyISAM是一个性能极高的引擎,它支持全文本搜索,但是不支持事务处理;(3)MEMORY在功能上等同于MyISAM,但由于数据存储在内存中,速度很快(特别适合于临时表);

    在创建表的时候可以使用FOREIGN KEY来创建外键,即一个表中的FOREIGN KEY指向另一个表中PRIMARY KEY。外键FOREIGN KEY用于约束破坏表的联结动作,保证两个表的数据完整性。同时也能防止非法数据插入外键列,因为该列值必须指向另一个表的主键。实例为:

    1.3 删除表(或数据库)

    1. 删除数据库:DROP DATABASE customers;
    2. 删除表,使用DROP TABLE子句:DROP TABLE customers。

    1.4 更新表

    1. 更新表结构信息可以使用ALTER TABLE子句,如为表增加一列:ALTER TABLE vendors ADD vend_name CHAR(20);另外经常用于定义外键,如:
    1. 重命名表,使用RENAME子句。RENAME TABLE backup_customers TO customers, backup_vendors TO vendors;更改多个表名,之间用逗号间隔

    基本查询语句

    1. 根据过滤条件查询表中的单列或者多列或者全部列的信息SELECT FROM WEHERE:SELECT cust_id,cust_name FROM customers WHERE cust_id=10086;其中过滤条件操作符有:=,<>,!=,<,<=,>,>=,BETWEEN AND,IS NULL;
    2. 为查询出的某一列信息去重DISTINCT:SELECT DISTINCT cust_name FROM customers;
    3. 限制单列查询结果的行数:SELECT cust_name FROM customers LIMIT 5;LIMIT后跟一个数值,表示从第0行开始取,共取5行数据;如果LIMIT 5,5表示从第5行(数据库中实际第6行记录)开始取,共取5行数据。注意:数据是从第0行开始计数的;
    4. ORDER BY子句取一个或者多个列,据此对输出进行排序:SELECT cust_id,cust_name FROM customers ORDER BY cust_id DESC, cust_name;
    5. IN操作符用来指定条件范围,范围中的每个条件都可以进行匹配:SELECT cust_id, cust_name FROM customers WHERE cust_id IN (1000,2000)。另外,NOT操作符可以和IN操作符配合使用,用于表示检索出不符合条件的所有数据;
    6. LIKE操作符用来表明模糊查询,与之配合使用的通配符有**%**,%表示任何字符出现任何次数;_,_表示只能匹配一个字符:SELECT cust_id,cust_name FROM customers WHERE cust_name LIKE \’%happy%\’;
    7. 使用分组查询并可以满足一定的分组过滤条件GROUP BY HAVING。如检索总计订单金额大于等于50的订单号和订单总金额,并按总金额进行排序:SELECT order_num,SUM(quantity*item_price) AS order_total FROM orderitems GROUP BY order_num HAVING SUM(quantity*item_price)>=50 ORDER BY order_total
    8. WHERE和HAVING的比较。WHERE是行级过滤,而HAVING是组级过滤。被WHERE过滤掉的数据不会出现在分组中。WHERE中通配符以及多个WHERE子句的连接同样适用于HAVING子句;
    9. GROUP BY的使用注意事项: (1)GROUP BY子句中可以嵌套分组(即通过多个列进行分组GROUP BY cust_id, cust_name),但是进行数据汇总时,是在最后规定的分组上进行;(2)GROUP BY子句中列出的每个列都必须是检索列或者是有效的表达式。(3)如果有NULL值,将值NULL作为一个分组进行返回,如果有多行NULL值,它们将分为一组
    10. 嵌套其他查询中的查询,称之为子查询。执行过程由里向外,里层查询结果作为外层查询的条件:SELECT cust_id FROM orders WHERE order_num IN (SELECT order_num FROM orderitems WHERE prod_id = \’happy\’)。当然,多表的查询可以是用联结查询。

    联结查询

    1. 内联结用又称之为内部联结,是基于两个表 之间的的相等测试。如果不加过滤条件,会造成“笛卡尔积”。SELECT vend_name,prod_name,prod_price FROM vendors INNER JOIN products ON vendors.vend_id=products.vend_id;同样可以使用WHERE进行多表联结查询,但是更推荐使用INNER JOIN等联结方式;
    2. 外部联结包括左外联结LEFT JOIN和右外联结RIGHT JOIN和全连接FULL JOIN。例如查询每个客户的订单数:SELECT customers.cust_id,orders.orders_num FROM customers LEFT JOIN orders ON orders.cust_id =customers.cust_id;LEFT JOIN 会全部返回左表数据,RIGHT JOIN会全部返回右表数据,FULL JOIN会将左右两个表的数据全部返回;
    3. 联结查询与聚集函数一起使用。如查询每个客户的订单数:SELECT customers.cust_name,customers.cust_id,COUNT(orders.order_num) AS num_ord FROM customers INNER JOIN orders ON customers.cust_id=orders.cust_id GROUP BY customers.cust_id;

    组合查询

    1. 多个查询(SELECT)可以使用UNION将多个查询结果进行合并成一个结果集返回,UNION必须包含两个及两个以上的SELECT查询,并且每个传必须包含相同的列、表达式或聚集函数,数据类型不必完全相同,MySQL会进行隐式的类型转换。SELECT vend_id,prod_id,prod_price FROM products WHERE prod_price>5 UINON SELECT vend_id,prod_id,prod_price FROM products WHERE vend_id IN (1001,1002);
    2. UNION返回的是去重后的结果,如果不需要去重则可以使用UNION ALL
    3. 可以多组合查询使用ORDER BY进行排序,但是是针对的最终的结果集进行排序,而不是其中单个SELECT查询进行排序,因此对于组合查询来说ORDER BY子句只有一个。SELECT vend_id,prod_id,prod_price FROM products WHERE prod_price>5 UINON SELECT vend_id,prod_id,prod_price FROM products WHERE vend_id IN (1001,1002) ORDER BY vend_id

    使用函数对数据进行处理

    1. 拼接列名:SELECT Concat (vendName,\'(\’,vendCountry,\’)\’) FROM vendors ORDER BY vendName;
    2. 执行算术表达式计算:SELECT prodId, quantity,price, quantity*price AS expandedPrice FROM orderItems;
    3. 文本处理函数如Upper(),LTrim(),RTrim()等函数。比如使用Upper函数将文本转换成大写:SELECT vendName, Upper(vendName) FROM vendors ORDER BY vendName;
    4. 时间和日期处理函数,如Date(),Day()等。SELECT custId, orderNum FROM orders WHERE Date(orderDate)=\’2015-09-01\’;
    5. 数值处理函数,如Abs(),Cos()等;
    6. 常用的聚集函数。如AVG(),COUNT(),MAX(),MIN()以及SUM()。SELECT COUNT(*) AS numbers, MIN(prod_price) AS price_min, MAX(prod_price) AS price_max,AVG(prod_price) AS price_avg FROM products;
    1. 向表中插入行数据可以使用INSERT INTO子句,更安全的方式是指定列名。INSERT INTO customers (cust_name, cust_email) VALUES(\’happy\’,\’happy@gmail.com\’);在INSERT INTO子句中能够省略列名的前提条件是:该列可以允许定义为NULL值或者在定义该列时给出去了默认值;
    2. 如果插入多行数据可以将多组值用逗号进行分隔即可。INSERT INTO customers (cust_name, cust_email) VALUES(\’happy\’,\’happy@gmail.com\’),(\’smart\’,\’smart@gmail.com\’);
    3. 将查询出来的数据插入表中,可以使用INSERT SELECT语句。INSERT INTO customers(cust_id,cust_contact) SELECT cust_id, cust_contact FROM customers WHERE cust_id>5;其中SELECT中可以带WHERE过滤条件;INSERT SELECT通常被用于复制表数据
    1. 如果要更新表数据的话,使用UPDATE子句:UPDATE customers SET cust_name =\’happy\’,cust_email=\’happy@gmail.com\’ WHERE cust_id = 1001;
    2. 注意:如果不加WHERE条件指定到某一行的话,会更新表中某一列全部的数据
    1. 如果从表中删除数据的话,可以使用DELETE子句。DELETE FROM customers WHERE cust_id = 10086;删除的数据必定是表中行数据,而不是某一列。因此,与UPDATE子句相比,DELETE子句并不需要指定是哪一列,而仅仅只需要指定具体的表名即可;
    2. 注意:如果不添加WHERE指定条件的话,会将整个表中所有行数据全部删除。另外,DELETE只是删除表中的数据,而不会删除表结构信息;
    3. 如果想删除表中全部的数据,可以使用TRUNCATE,比DELETE删除效率更高;

    在SQL语句中每个关键字都会按照顺序往下执行,而每一步操作,会生成一个虚拟表,最后产生的虚拟表会作为执行的最终结果返回。下面的是常用的关键字的执行顺序:

    1. FROM:对FROM左边的表和右边的表计算笛卡尔积,产生虚表VT1;
    2. ON:对虚拟表VT1进行ON筛选,只有那些符合<join_condition>条件的行才会被记录在虚拟表VT2中;
    3. JOIN:如果是OUT JOIN,那么将保留表中(如左表或者右表)未匹配的行作为外部行添加到虚拟表VT2中,从而产生虚拟表VT3;
    4. WHERE:对虚拟表VT3进行WHERE条件过滤,只有符合<where_condition>的记录才会被放入到虚拟表VT4;
    5. GROUP BY:根据GROUP BY子句中的列,对虚拟表VT4进行分组操作,产生虚拟表VT5;
    6. CUBE|ROLLUP:对虚拟表VT5进行CUBE或者ROLLUP操作,产生虚拟表VT6;
    7. HAVING:对虚拟表VT6进行HAVING条件过滤,只有符合<having_condition>的记录才会被插入到虚拟表VT7中;
    8. SELECT:执行SELECT操作,选择指定的列,插入到虚拟表VT8中;
    9. DISTINCT:对虚拟表VT8中的记录进行去重,产生虚拟表VT9;
    10. ORDER BY:将虚拟表VT9中的记录按照<order_by_list>进行排序操作,产生虚拟表VT10
    11. LIMIT:取出指定行的记录,产生虚拟表VT11,并将结果返回。

    MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。索引分单列索引和组合索引。单列索引,即一个索引只包含单个列,而组合索引,即一个索引包含多个列。

    创建索引有两种方式,一种是直接利用CREATE INDEX进行创建,另外一种则是通过修改表结构来进行添加,则是利用ALTER TABLE语句。

    1. 使用CREATE INDEX

    语法为:

    其中对应的语法变量信息如下:

    [UNIQUE|FULLTEXT|SPATIAL]

    其中括号中的这三个关键字表示创建的索引类型,它们分别表示唯一索引全文索引空间索引三种不同的索引类型。如果我们不指定任何关键字,则默认为普通索引。

    index_name

    index_name表示索引的名称,由用户自行定义,以便于以后对该索引进行修改等管理操作。

    index_type

    index_type表示索引的具体实现方式,在MySQL中,有两种不同形式的索引——BTREE索引和HASH索引。在存储引擎为MyISAM和InnoDB的表中只能使用BTREE,其默认值就是BTREE;在存储引擎为MEMORY或者HEAP的表中可以使用HASH和BTREE两种类型的索引,其默认值为HASH。

    index_colname

    index_col_name表示需要创建索引的字段名称,我们还可以针对多个字段创建复合索引,只需要在多个字段名称之间以英文逗号隔开即可。此外,对于CHAR或VARCHAR类型的字段,我们还可以只使用字段内容前面的一部分来创建索引,只需要在对应的字段名称后面加上形如(length)的指令即可,表示只需要使用字段内容前面的length个字符来创建索引。在这里,我们以customers表的cust_name字段(类型为VARCHAR(50))为例,使用cust_name字段的6个字符前缀来创建索引。

    使用ALTER TABLE

    语法为:

    删除指定表中指定名称的索引,语法为:

    例如删除名称为idx_cust_name的索引,其SQL语句为:

    在MySQL中并没有提供修改索引的直接指令,一般情况下,我们需要先删除掉原索引,再根据需要创建一个同名的索引,从而变相地实现修改索引操作。

    在MySQL中,要查看某个数据库表中的索引也非常简单,只需要使用以下两个命令中的任意一种即可。

    1. 什么是存储过程?存储过程简单来说,就是为了复用性或者实现复杂的业务功能,而保存的一条或多条MySQL语句的集合,可将其视为批文件;
    2. 为什么使用存储过程?(1)通过把处理封装在容易使用的单元中,简化复杂的操作;(2)由于不要求反复建立一系列处理步骤,这保证了数据的完整性,如果所有的开发人员和应用程序都使用同一存储过程,则所使用的代码都是相同的;(3)简化对变动的管理。如果表名、列名或业务逻辑有变化,只需要更改存储过程的代码,使用它的开发人员甚至不需要知道这些变化,也就是具备了安全性;(4)提高了性能,因为使用存储过程比单独使用SQL语句要快;(5)存储过程可用来编写功能更灵活的代码。因此,存储过程的具备三个特性:简单可复用、安全以及高性能
    3. 存储过程的缺点?(1)存储过程编写比基本的SQL语句更加复杂,需要更高的技能;(2)可能没有创建存储过程的权限,数据库管理员可能会限制创建存储过程的权限,允许用户使用存储过程,而不允许用户自由创建存储过程;

    创建存储过程

    1. 创建存储过程。如需要统计用户订单总金额,如果该用户需要交税的话,订单总金额则需要再加上税费

    有这样一些细节: 1. 使用CREATE PROCEDURE语句进行创建,()圆括号中为存储过程的参数,其中参数类型有:1. IN类型,表示传递给存储过程;2. OUT 类型,表示存储过程返回的结果,在调用存储过程时需要传入@开始的变量;3. INOUT类型,表示在存储过程中可以传入和传出; 2.DECLARE用来声明一个变量,如这里的total,taxrate。注意MySQL中定义变量时都是变量名在前,数据类型在后。 3. 存储过程具体逻辑写在BEGIN END之间; 4. 将值赋给变量使用INTO关键字; 5. 由于存储过程中每个SQL语句中用;作为分隔符,会和单个SQL造成冲突,因此可使用DELIMITER重新定义分类符,如该例子中定义//为分隔符,自然存储过程结尾就用END //结尾,而不再是END。同时,分隔符//成对出现后,恢复到默认的\”;\”作为分隔符;

    执行存储过程

    使用CALL子句执行存储过程,CALL子句接受存储过程的名称以及需要传递的参数。

    如果存储过程中定义了OUT类型的输入参数,那么在执行存储过程时需要传入变量,如这里@total,并且变量都是用@开始的。如果存储过程中没有参数的话,就用空圆括号表示即可,CALL ordertotal();

    删除存储过程

    1. 删除存储过程,可以使用DROP PROCEDURE子句。如DROP PROCEDURE ordertotal;

    查询存储过程

    1. 显示创建一个存储过程的语句,可以使用SHOW CREATE PROCEDURE。如SHOW CREATE PROCEDURE ordertotal;
    2. 查询所有存储过程的状态,如果在定义存储过程中使用COMMENT添加注释,可以查看。同时可以LIKE进行过滤结果。如SHOW PROCEDURE STATUS LIKE \’%order%\’;

    什么是事务?

    1. 事务处理是用来维护数据库的完整性,它保证成批的MySQL操作要么完全执行,要么完全不执行。事务处理是一种机制,用来管理必须成批执行的MySQL操作,它们要么时作为整体执行或者完全不执行。

    关键概念:

    1. 事务:是指一组SQL语句;
    2. 回退:是指撤销指定的SQL语句的过程;
    3. 提交:指将未存储的SQL语句的结果写入数据库表中;
    4. 保留点:指事务处理中设置的临时占位符,可以对它发布回退;

    如何创建执行事务?

    执行结果为:插入数据(\’1\’,5,18)有效,因为,只会从保留点SAFEPOINT之后开始回退,也就是说保留点SAFEPOINT之前的SQL语句执行的结果仍然有效。

    有这样一些细节:

    1. STAET TRANSACTION用来表示下面的SQL语句集为一段事务;
    2. SAFEPOINT 用于指定保留点insertinto;
    3. ROLLBACK TO表示从指定保留点开始回退,也就是说保留点之前的SQL语句执行结果依然有效。如果仅仅使用ROLLBACK进行回退的话就表示从STAET TRANSACTION之后所有的SQL语句执行效果都会撤销;
    4. MySQL提交(写或保存)操作是自动进行的,这称之为隐含提交。但是在事务处理块中,提交不会隐含进行,要使用COMMIT子句进行提交。如:

    采用COMMIT提交事务,如果两条SQL语句都执行成功,才会将数据都写入表中。

    1. 什么是触发器?当某条SQL语句发生时,自动执行某些其他的SQL语句的时候就需要使用到触发器。触发器只能响应:DELETE,INSERT,UPDATE这三个特定操作。
    2. 创建触发器?创建触发器时需要给出最重要的四条信息:1.全局唯一的触发器名;2.触发器关联的表;3.触发器在何时执行(操作执行之前或者之后)4.触发器应该响应的活动(DELETE, INSERT或者UPDATE);由于触发器只能响应特定的三种类型的操作,因此可创建的触发器也就三种类型:INSERT触发器,DELETE触发器以及UPDATE触发器。

    INSERT触发器

    在执行INSERT触发器时,也这样几点需要注意:1.在INSERT触发器代码内,可以引用一个名为NEW的虚拟表,可以用NEW来访问刚插入的行数据;2.在BEFORE INSERT触发器中,NEW中的值可以被更新;3.对于AUTO_INCREMENT列,NEW在INSERT执行之前包含0,在INSERT执行之后包含新的自定生成值。

    创建一个INSERT触发器,每次插入一行数据,每次会返回当前插入的行数据的id。

    有这样一些细节:

    1. 使用CREATE TRIGGER来创建触发器;
    2. AFTER INSERT表明在插入行数据之后,触发器才会执行特征操作;
    3. FOR EACH ROW 表示对插入的每一行数据,触发器都起作用;
    4. 针对INSERT触发器,可以使用虚拟表NEW,来使用刚插入的行数据。比如例子中,SELECT NEW.cust_id INTO @newinsertid表示将新插入的行数据的id赋值给变量@newinsertid;

    DELETE触发器

    DELETE触发器在DELETE语句执行之前或者之后,需要知道以下两点:

    1. 在DELETE触发器代码内,可以引用一个名为OLD的虚拟表,来访问被删除的行;
    2. OLD表中的数据只能读,不能被更新,而在INSERT触发器中,就可以通过NEW来更新被插入的行数据;

    例如,针对customers表,当删除一行数据时,返回被删除数据的cust_id以及cust_name:

    基本上与创建INSERT触发器一样,只不过在DELETE触发器中只能使用OLD来访问被删除的行数据。

    UPDATE触发器

    UPDATE触发器在UPDATE语句执行之前或者之后执行,需要知道一下几点:

    1. 在BEFORE UPDATE触发器中可以使用NEW和OLD来访问数据,而在AFTER UPDATE触发器中使用NEW来访问数据会报错,只能使用OLD来访问数据;
    2. 在BEFORE UPDATE触发器中,NEW中的值可以被改变,即允许更改将用于UPDATE的数据;
    3. OLD中的行数据只能读,不能被更新;

    一个UPDATE触发器示例如下:

    输出为@beforeupdate为‘happay’,而@afterupdate为\’reset_name\’。有这样一些细节:

    1. NEW虚拟表中的数据可以更改,如这里采用 SET NEW.cust_name = \’reset_name\’;,将待更新的cust_name由“happy”变成了“reset_name”;
    2. 在BEFORE UPDATE触发器中可以使用NEW和OLD来访问数据,而在AFTER UPDATE触发器中使用NEW来访问数据会报错;

    删除触发器?

    删除触发器,可以使用 DROP TRIGGER语句,比如DROP TRIGGER insertcustomers;。触发器不能更新或者覆盖,如果要修改触发器,必须删除这个触发器。

    ======权限管理======

    我们知道我们的最高权限管理者是root用户,它拥有着最高的权限操作。包括select、update、delete、update、grant等操作。

    那么一般情况在公司之后DBA工程师会创建一个用户和密码,让你去连接数据库的操作,并给当前的用户设置某个操作的权限(或者所有权限)。

    那么这时就需要我们来简单了解一下:

    如何创建用户和密码

    给当前的用户授权

    移除当前用户的权限

    如果你想创建一个新的用户,则需要以下操作:

    1- 进入到mysql数据库下

    use mysql;

    2- 对新用户增删改

    -1 创建用户

    – 指定ip:192.118.1.1的wzy用户登录

    – create user \’wzy\’@\’192.118.1.1\’ identified by \’123\’;

    – 指定ip:192.118.1.开头的wzy用户登录

    – create user \’wzy\’@\’192.118.1.%\’ identified by \’123\’;

    – 指定任何ip的wzy用户

    – create user \’wzy\’@\’%\’ identified by \’123\’;

    -2 删除用户

    – drop user \’用户名\’@\’IP地址\’;

    -3 修改用户

    – rename user \’用户名\’@\’IP地址\’ to \’新用户名\’@\’IP地址\’;

    -4 修改密码

    – set password for \’用户名\’@\’IP地址\’=Password(\’新密码\’);

    3- 对当前的用户授权管理

    -1 查看授权

    – show grants for \’用户\’@\’IP地址\’

    -2 给权限

    -1 授权wzy用户仅对db1.t1文件有查询、插入、和更新的操作

    – grant select ,insert,update on db1.t1 to \”wzy\”@\’%\’;

    -2 表示有所有的权限,除了grant这个命令,这个命令是root才有的。wzy用户对db1下的t1文件有任意操作

    – grant all privileges on db1.t1 to \”wzy\”@\’%\’;

    -3 wzy用户对db1数据库中的文件执行任何操作

    – grant all privileges on db1.* to \”wzy\”@\’%\’;

    -4 wzy用户对所用数据库中文件有任何操作

    – grant all privileges on *.* to \”wzy\”@\’%\’;

    -3 取消权限

    -1 取消wzy用户对db1的t1文件的任意权限

    – revoke all on db1.t1 from \’wzy\’@\”%\”;

    -2 取消来自远程服务器的wzy用户对数据库db1的所有表的所有权限

    – revoke all on db1.* from \’wzy\’@\”%\”;

    -3 取消来自远程服务器的wzy用户所有数据库的所有表权限

    – revoke all privileges on *.* from \’wzy\’@\’%\’;

    4- MySQL备份命令行操作

    1- 备份

    -1 备份:数据库表结构+数据

    – mysqdump -u root db1 > db1.sql -p

    -2 备份:数据表结构

    – mysqdump -u root -d db1 > db1.sql -p

    2- 导入现有的数据到某个数据库

    -1 先创建一个新的数据库

    – reate database db10;

    -2 将已有的数据库文件导入到db10数据库中

    – mysqdump -u root -d db10 < db1.sql -p

    命令太多记不住?MySQL数据库常用命令大全

    Ehre | 作者

    博客园 | 来源

    https://www.cnblogs.com/liangmingda/p/13548466.html

    基本的SQL语句有select、insert、update、delete、create、drop、grant、revoke等,具体使用方式见表:

    1

    库操作

    • 创建数据库:create database shujuku
    • 创建带字符集的数据库:create database mydb2 CHARACTER SET=UTF8
    • 创建带校验的数据库:create database mydb3 CHARACTER SET=UTF8 COLLATE utf8_general_ci
    • 显示数据库:show databases
    • 删除数据库:drop database shujuku
    • 修改数据库编码:alter databaese shujuku character set gb2312

    2

    表操作

    创建数据库表(创建一个表名为:employee,该表中含有id、name、sex、birthday、job字段);

    create table employee(id int,name varchar(40),sex char(4),birthday date,job varchar(40),);

    • 表中增加image字段:alter table employee add image blob
    • 修改job值,使其长度为60(原长度为1000):alter table employee modify job varchar(60)
    • 删除sex列:alter table employee drop sex;
    • 表名改为user(原名为employee):rename table employee to user
    • 修改表的字符集为utf_8:alter table user character set utf8
    • 列name修改为 username:alter table change columm name username varchar(100)
    • 删除表:drop table user

    3

    增删改查实例

    准备表:

    create table employee(id int,name varchar(40),sex varchar(4),birthday date,entry_date date,salary decimal(8,2),resume text);

    插入表数据:

    insert into employee(id ,name,sex,birthday,entry_date,salary,resume) values(1,\’zhangsan\’,\’male\’,\’1999-08-22\’,\’2020-08-22,\’1000\’,\’i am a developer\’);

    • 指定某些列插入数据:insert into employee(id) values(6)
    • 插入汉字:insert into employee(id,name) values(6,‘张三’)

    4

    修改表数据

    • 将所有员工薪水修改为5000元:update employee set salary=5000
    • 将姓名为’zs’的员工薪水修改为3000元:update employee set salary = 3000 where name=‘zhangsan’
    • 将姓名为’aaa’的员工薪水修改为4000元,job改为ccc:update employee set salary = 4000,job=‘ccc’ where name=‘张三’
    • 将wu的薪水在原有基础上增加1000元:update employee set salary = salary+1000 where name=‘张三’

    5

    删除表数据

    • 删除表中名称为“zs”的记录:delete from employee where job=‘ccc’
    • 删除表中所有记录:delete from employee
    • 使用truncate删除表中记录:truncate table employee

    6

    查询表数据

    • 查询表中所有学生的信息:select id,name,chinese,english,math from student
    • 查询表中所有学生的姓名和对应的英语成绩:select name,english from student
    • 查询姓名为wu的学生成绩:select * from student where name=‘张三’
    • 查询英语成绩大于90分的同学:select * from student where english>‘90’
    • 查询英语分数在 80-90之间的同学:select * from student where english>=80 and english=<90

    7

    常见MySQL语句命令

    • 进入mysql 命令行:mysql -uroot -p
    • 查看所有数据库:show databases
    • 创建数据库:create database niu charset utf8
    • 删除数据库:drop database niu
    • 选择数据库:use databases
    • 查看所有表:show tables
    • 查看创建数据库的语句:show create database databasename
    • 查看创建表的语句:show create table tablename
    • 查看表结构:desc tablenmae

    8

    常见MySQL字段含义

    • 自增长:auto_increment
    • 非空:not null
    • 默认值:default
    • 唯一:unique
    • 指定字符集:charset
    • 主键:primary key

    软件测试员必看!数据库知识mysql查询语句大全

    作为一名测试人,掌握数据库常用的操作不可缺少,下面就一段mysql 查询语句梳理几个相关语法知识。

    本篇文章主要包括两方面内容

    ·常用的sql语法

    ·开发代码中如何和sql进行关联

    案例代码:

    `

    select a.blastid,d.apptime,a.charge_approve,

    a.blast_batch,

    a.plan_blast_time,

    a.exe_plan_id,

    a.import_flag,

    a.rig_type,…….

    case when (select \”count\”(*) from bla_geology_info geo where a.blast_id=geo.blast_id and geo.delete_flag=0)>0

    then \’true\’ else \’false\’

    END as isShowFlag

    from bla_blast_info a

    left join exe_plan_month b

    on a.exe_plan_id = b.exe_plan_id

    left join sys_user c

    on a.dynamite_user = c.user_id

    left join (select blast_id,isagree,idea,create_time as app_time from bla_charge_approve where delete_flag = \’0\’) d

    on a.blast_id = d.blast_id

    WHERE a.blast_type = \’1\’ AND a.blast_status > \’3\’ AND a.blast_status < \’8\’ AND a.charge_approve > \’1\’ AND a.delete_flag = \’0\’ ORDER BY cast(a.charge_approve as numeric) ASC , d.app_time DESC , a.create_time DESC

    `

    一 常用的sql语法

    1.查询语句 select xxxx from 表名 ,表示从哪个表进行查询。其中select 后面内容以,分割。

    2. select xxxx from 表名 别名,表示这个表用别名替代,如上个语句中的a,b,c等

    3.case when then xx,else xxx ,end as isShowFlag表示符合when 条件执行 then 后面语句,否则执行else 后面语句,

    eg 案例中case when (select \”count\”(*) from blageologyinfo geo where a.blastid=geo.blastid and geo.delete_flag=0)>0

    then \’true\’ else \’false\’ 表示符合条件的爆破量进行上传

    end as isShowFlag 起的查询语句别名,后续调用的时候 使用别名名称即可。

    4.left join 左连接 ,表1左连接表2,以左为主,表示以表1为主,关联上表2的数据,查出来的结果显示左边的所有数据,然后右边显示的是和左边有交集部分的数据。

    一句话的意思是 先取交集,再关联到左表。

    引申整理出几个连接的常用含义及区分 ,如下表所示:

    5.查询语句 select xxxx from 表名 where 查询条件

    where 查询条件后面接所有你要查询的内容,用and连接,这里需要注意order by 使用

    order by 1,2,3,4 ,先1排序,1相同的情况下按照2,3,4排序

    6. cast ()数据类型转换函数,文中cast(a.charge_approve as numeric) 表示将字段charge_approve 转换为数字型,以前是字符类型,字符类型的字段不可以进行排序

    7. a.exe_plan_id = b.exe_plan_id 表示 a表的exe_plan_id字段和b表的exe_plan_id 字段进行绑定,可以这么理解 只有两个表绑定后才能进行相关的查询操作。

    总结通用模板:

    Select 字段名1,字段名2 case when 条件 then 执行语句 else 执行语句 end as 别名 from 表名 别名 left join on 表连接(a.exe_plan_id = b.exe_plan_id)

    Where 查询条件(d.app_time DESC)

    二 开发代码中如何和sql进行关联

    开发逻辑中有一个词‘mapper映射’,里面具体的实现不做过多赘述。

    简单点的逻辑是:

    用xml文件 将sql 语句的名称 和 实体名称一一映射,通过这种形式进行绑定,然后在代码中引用映射的文件名,从而实现数据查询。

    上面我们通过一段sql 语句列举了 mysql 常用的语法,以及sql语句编写完成后 如何在代码中进行使用的。

    1)关注+私信回复:“测试”,可以免费领取一份10G软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Mysql数据库、抓包工具、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试等。

    2)关注+私信回复:\”入群\”

    本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com

    点赞 0
    收藏 0

    文章为作者独立观点不代本网立场,未经允许不得转载。