测试工作中常用的mysql语句

一 创建数据库和表

1.创建数据库dbname,若存在则先删除

drop database if exists dbname

create database dbname

2.查看数据库是否创建成功

show databases;

3.选中特定数据库后,再创建表

use database;

create table table_name(

id int(10) not null unique primary key,

uname varchar(28) not null;

sex varchar(4)

);

4.复制旧表表结构,来创建新表

1)like用法,专门复制表结构的方法,

但是它只复制表的结构和相关属性比如包括存储引擎、备注、主键、索引等,并不复制数据

create table 新表 like 旧表;

2)select用法,只是执行了一个select查询语句,不包括表属性和数据

create table 新表 as select * from 旧表 where 1=2;

5.复制旧表的结构和数据,创建新表

create table 新表 as select * from 旧表;

6.复制旧表的部分结构,创建新表,不包括数据

create table 新表 as select 字段名1,字段名2 from 旧表 where 1<>1;

二 修改表字段

对已存在的表结构进行修改,比如添加、删除表字段用alter,添加的字段默认位置在最后

1.使用 ADD 子句来向数据表中添加列,如下实例在表 istester 中添加 istester6 字段,并定义数据类型:

alter table 表名 add 表字段 属性;

alter table istester add istester6 varchar(100) not null;

若想指定新添加的字段位置,可以使用first(放在首位),after 字段名(在指定字段名之后)

alter table istester add istester7 first;

alter table istester add istester8 after id;

2.使用了 ALTER 命令及 DROP 子句来删除以上创建表的 istester6  字段:

alter table 表名 drop 表字段;

alter table istester drop istester6;

当表只有一个字段时无法执行drop操作来删除字段

3. 如果需要修改字段类型及名称, 你可以在ALTER命令中使用 MODIFY 或 CHANGE 子句 。

例如,把字段istester6 的类型从 CHAR(1) 改为 CHAR(10),可以执行以下命令:

ALTER TABLE testalter_tbl MODIFY istester6  CHAR(10);

ALTER TABLE testalter_tbl CHANGE column_name1column_name2 BIGINT;

ALTER TABLE testalter_tbl CHANGEcolumn_name1  column_name1INT;

4.修改表名

如果需要修改数据表的名称,可以在 ALTER TABLE 语句中使用 RENAME 子句来实现。

尝试以下实例将数据表 table_name_A 重命名为 table_name_B:

 ALTER TABLE table_name_A RENAME TO table_name_B;

5.查看当前表结构,有两种写法

show columns from tabel_name;

desc tabel_name;

三 更新表数据

修改表中的数据时可以使用

update table_name set 字段名=新值  where 条件

四 插入数据

语法

insert   into tablename  (filed1,filed2,filed3……)

values

 (value1,value2,value3……),(value1,value2,value3……)……;

注意:若字段类型是字符型,则需要在使用单引号或者双引号,比如 “value1”

1 给表中的部分字段插入数据

添加数据的时候可以规定列进行添加。

insert into tablename (filed1,filed2) values (value1,value2);

如果添加过主键自增(PRINARY KEY AUTO_INCREMENT)第一列在增加数据的时候,可以写为0或者null,这样添加数据可以自增

2 给表中所有字段插入数据

如果所有的列都要添加数据可以不规定列进行添加数据,即不需要写出列名

insert into tablename values (value1,value2);

若添加过主键自增(PRINARY KEY AUTO_INCREMENT),则可以在指定字段和字段值中都省略,如

表 idoxu  主键id 配置了递增,插入记录的sql可以这么写:

insert into idoxu (stu_id,c_name,grade) values (11,"idoxu",90),(12,"lin",100);

执行后,id字段会从0递增

3 将表A的数据插到表B中

insert into B(filed1,filed2) select value1,value2 from A;

五 查询数据

语法

select column_name1,column_name2 from table_name [where Clause] [LIMIT N] [ OFFSET M];

limit子句

1. LIMIT 属性来设定返回的记录数N

LIMIT[起始条目索引,],条目数

起始条目索引从0开始

select * from tablename limIt N;

等同于

select * from tablename limit 0,N;

查询出表中从第N条到第M条的记录,其中N为开始的位置,从原始记录中从0开始计算,M为要取出的条数

select * from tablename limit N,M;

比如select * from idoxu limit 2,3;   取得数据是从第三行到第五行

若想查询出从第N条记录到表结束的记录来,如下其中的999,代表着一个较大的数值,可根据实际情况改变

select * from table_name limit N-1,999;

LIMIT 条目数 OFFSET 起始条目索引

起始条目索引从0开始

若想查询出某表中从第三行到第五行的数据可用

select * from table_name limit 3 offset 2;

等同于select * from table_name limit 2,3;

SELECT* FROM表名LIMIT3,1;#从第4条数据开始取数,取1条数据,即只取第四条

SELECT * FROM表名LIMIT1OFFSET3;#从第4条数据开始取数,取1条数据,即只取第四条

SELECT * FROM表名LIMIT3,2;#从第4条数据开始取数,取2条数据,即取第4条,第5条

SELECT * FROM表名LIMIT2OFFSET3;#从第4条数据开始取数,取2条数据,即取第4条,第5条

2.sql函数

count()函数

count(*) 函数返回表中的记录数

count(字段名) 函数返回指定列的值的数目(NULL 不计入)

count(distinct 字段名  ) 函数返回指定列的不同值的数目(字段去重后统计该字段值的数目)


2.内连接  

关键字:inner  join   on

语句select * from a_table a inner join b_table b on a.a_id = b.b_id;

说明:组合两个表中的记录,返回关联字段相符的记录,也就是返回两个表的交集(阴影)部分。

3.左连接

关键字:left join on / left outer join on

语句:SELECT  * FROM a_table a left join b_table b ON a.a_id = b.b_id;

说明: left join 是left outer join的简写,它的全称是左外连接,是外连接中的一种。 左(外)连接,左表(a_table)的记录将会全部表示出来,而右表(b_table)只会显示符合搜索条件的记录。右表记录不足的地方均为NULL。


4.右连接

关键字:right join on / right outer join on

语句:SELECT  * FROM a_table a right outer join b_table b on a.a_id = b.b_id;

说明:right join是right outer join的简写,它的全称是右外连接,是外连接中的一种。与左(外)连接相反,右(外)连接,左表(a_table)只会显示符合搜索条件的记录,而右表(b_table)的记录将会全部表示出来。左表记录不足的地方均为NULL。


5.全连接

关键字:union /union all

语句:(select colum1,colum2...columN from tableA ) union (select colum1,colum2...columN from tableB )

         或 (select colum1,colum2...columN from tableA ) union all (select colum1,colum2...columN from tableB );

union语句注意事项:

         1.通过union连接的SQL它们分别单独取出的列数必须相同;

         2.不要求合并的表列名称相同时,以第一个sql 表列名为准;

         3.使用union 时,完全相等的行,将会被合并,由于合并比较耗时,一般不直接使用 union 进行合并,而是通常采用union all 进行合并;

         4.被union 连接的sql 子句,单个子句中不用写order by ,因为不会有排序的效果。但可以对最终的结果集进行排序;

           (select id,name from A order by id) union all (select id,name from B order by id); //没有排序效果

           (select id,name from A ) union all (select id,name from B ) order by id; //有排序效果

摘自  https://blog.csdn.net/zjt980452483/article/details/82945663

六 删除表数据 

delete from table_name;

truncate table table_name;

清除表中的数据有两种方法,两者的区别:

1.delete 可以删除部分数据,而truncate只能删除所有数据,

2.delete可事务回滚,而truncate不行

3.在主键自动增加的字段中,若用truncate删除了表数据,则重新插入后,主键还是从1开始,而用delete删除后,会从上次删除数据的最大值+1开始

七 删除表

drop table table_name;

八 删除数据库

drop database db_name;

当你不再需要该表时, 用 drop;当你仍要保留该表,但要删除所有记录时, 用 truncate;当你要删除部分记录时(always with a WHERE clause), 用 delete.

你可能感兴趣的:(测试工作中常用的mysql语句)