欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

MySQL数据库常用命令总结

程序员文章站 2022-06-21 22:30:12
一、连接数据库 mysql -u user -p;回车输入password即可 或 mysql -h localhost -u user -p;回车输出密码 其中-u代表m...

一、连接数据库

mysql -u user -p;回车输入password即可

mysql -h localhost -u user -p;回车输出密码

其中-u代表mysql用户,-p为用户密码,-h为mysql的ip地址,如果远程连接mysql改为相应的ip即可

二、对数据库的操作

show db_name; 显示所有数据

use db_name; 选择某数据库

create database db_name; 创建某数据库

drop database db_name; 删除某数据库

三、一些不常用的命令

select version(); 显示mysql的版本

help select; 查看select帮助

status查看MySQL服务器的状态信息(常用于查看其编码方式)

show status;查看MySQL详细使用情况(常用like关键字连用)

show variables like 'character_set_database'; 先切换到xxx数据库下面来,然后使用SQL语句:show variables like 'character_set_database'; 来查看了xxx数据库的编码

四、对数据表的操作

1、创建数据表并查看数据表状态

show tables; 显示所选数据库的所有数据表

create table table_name(column_name column_type[,column_name2 column_type2,...]) 创建数据表

desc tables; 查看数据表结构

drop table table_name; 删除数据表

2、插入与删除数据

①插入数据

inset into table_name(field1, field2,...fieldN) values (value1,value2,...,valueN);

如果数据是字符型,必须使用单引号或者双引号,如:"value"。

如果一次插入多个值,值用‘()’括起来,中间用英文‘,’隔开。例如:

inset into table_name(field1, field2,...fieldN) values (value1,value2,...,valueN),(value'1,value'2,...,value'N)...;

从一个数据表中将数据导入另一个数据表中

insert into table_name1(field1,filed2,...) select field1',field2'... from table_name2;

注意table_name2中的filed1',filed2'与table_name中的filed1,filed2数据类型及数据类型长度都必须相同

②删除数据

truncate table table_name; 保留数据表的结构,清空其数据

delete from table_name;删除表中的所有数据

delete from 表名称 where 删除条件; 删除指定条件下的数据

③更新数据

a.更新表中特定列

UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值;

update tb set age=22 where name='zhangsan';

将名为tb的表中字段name为‘zhangsan’的age值设置为22

b.更新表中所有列

UPDATE 表名称 SET 列名称 = 新值;

update tb set age=22 where name='zhangsan';

将名为tb的表中所有字段age值设置为22

3、ALTER TABLE 语句

ALTER TABLE 语句用于在已有的表中添加、修改或删除列。

a、添加列

ALTER TABLE table_name ADD column_name datatype;

b、删除列

ALTER TABLE table_nameDROP COLUMN column_name;

c、修改表中的数据类型

ALTER TABLE table_nameMODIFY COLUMN column_name new_type;

d、修改表中数据表名称

ALTER TABLE table_name TO new_talbe_name;

e、修改表中数据字段名及数据类型

ALTER TABLE table_name CHANGE old_column_name new_column_name new_type;

f、修改存储引擎

alter table tableName engine=myisam; 存储引擎修改为myisam

g、删除外键约束:keyName是外键别名

alter table tableName drop foreign key keyName;

h、修改字段的相对位置:这里name1为想要修改的字段,type1为该字段原来类型,first和after二选一,这应该显而易见,first放在第一位,after放在name2字段后面

alter table tableName modify name1 type1 first|after name2;

%%MySql两种存储引擎的区别%%

介绍几种常用的存储引擎种类 MyISAM InnoDB MEMORY MERGE

MyISAM:

不支持事务,但是每次查询都是原子的;旧版本mysql的默认引擎

支持表级锁,即每次操作是对整个表加锁;存储表的总行数;一个MYISAM表有三个文件:索引文件、表结构文件、数据文件;采用菲聚集索引,索引文件的数据域存储指向数据文件的指针。辅索引与主索引基本一致,但是辅索引不用保证唯一性。

InnoDb:

新版本mysql的默认引擎

支持ACID的事务,支持事务的四种隔离级别;支持行级锁及外键约束:因此可以支持写并发;不存储总行数;一个InnoDb引擎存储在一个文件空间(共享表空间,表大小不受操作系统控制,一个表可能分布在多个文件里),也有可能为多个(设置为独立表空,表大小受操作系统文件大小限制,一般为2G),受操作系统文件大小的限制;主键索引采用聚集索引(索引的数据域存储数据文件本身),辅索引的数据域存储主键的值;因此从辅索引查找数据,需要先通过辅索引找到主键值,再访问辅索引;最好使用自增主键,防止插入数据时,为维持B+树结构,文件的大调整。适用于对于事务由较高要求的表的创建。

MEMORY:

1.数据访问非常快的引擎,存储格式同一放在内存中的一个磁盘文件中格式是.frm 。

2.默认使用hash索引。

3.一旦服务器关闭表中的数据就会丢失。数据大小有限制。

MERGE:

本身是融合的意思,实质是MyISUM表的融合,这些融合的表必须结构完全相同。MERGE本身是没有数据的。插入操作可以是first或者是last。删除只是删除MERGE表定义,并不删除真正表的数据。存储方式:.frm(文件存储表定义信息) .MRG(描述组合表的信息,比如由哪些表组成,插入时的依据)。

适用于:将一系列等同的MyISAM表逻辑方式组合在一起,作为一个对象引用它们

4、查询数据

MySQL 数据库使用SQL SELECT语句来查询数据。

a、基础查询

SELECT column1,column2... FROM table_name;

SELECT * FROM table_name;

b、条件查询

SELECT column1,column2... FROM table_name WHERE conditions ;

c、索引不同的列

使用DISTINCT关键字,此关键字指示MySQL只返回不同的值,去重

SELECT DISTINCT COLUMN FROM table_name;

mysql> select * from tb;

+------+----------+------+

| id | name | age |

+------+----------+------+

| 1 | zs | 12 |

| 1 | ls | 13 |

| 2 | zhangsan | 20 |

| 2 | lisi | 18 |

+------+----------+------+

4 rows in set (0.00 sec)

mysql> select distinct id from tb;

+------+

| id |

+------+

| 1 |

| 2 |

+------+

2 rows in set (0.85 sec)

d、限制结果

使用LIMIT关键字限制限制查询结果数

SELECT columns/* FROM table_name [WHERE conditions] LIMIT num1[,num2];

如果LIMIT后有两个数字,第一个数表示为开始的位置,第二个数为要检索的行数。第一行为0行

e、结果排序

使用ORDER BY可对查询结果进行排序

SELECT field1, field2,...fieldN table_name1, table_name2...

ORDER BY field1, [field2...] [ASC [DESC]] [LIMIT nums];

注意,可以添加 WHERE ... LIKE子句来设置条件,ORDER BY 是放在WHERE 之后LIMIT之前。

ASC 按升序排列;DESC 按降序排列,默认按升序排列

f、不匹配检查

mysql中<>、!= 为不匹配

SELECT id FROM table_name WHERE id <> 1003;

SELECT id FROM table_name WHERE id != 1003;

h、范围值检查

为了检查某个范围的值,可使用BETWEEN ... AND ...语法

SELECT id FROM table_name WHERE id BETWEEN num1 AND num2;

i、空值检查

SELECT filed FROM table_name WHERE filed IS NULL;

j、多条件查询

AND操作符:返回同时满足条件1和条件2的结果

SELECT fileds FROM table_name WHERE condition1 AND condition2;

OR操作符:返回符合其中一个条件的结果

SELECT fileds FROM table_name WHERE condition1 OR condition2;

WHERE可包含任意数目的AND和OR操作符。允许两者结合以进行复杂和高级的过滤。在处理OR操作符之前,优先处理AND操作符,但也可以使用‘()’进行明确地分组。

SELECT fileds FROM table_name WHERE condition1 OR condition2 and condition3;

在满足condition3的情况下返回符合condition1或condition2的结果

IN操作符:指定条件范围,合法值的由逗号分隔开组成范围清单,全放在圆括号中,范围中的每个条件都进行匹配

SELECT * FROM table_name WHERE field in (result1,result2);

相当于

SELECT * FROM table_name WHERE field = result1 OR field = result2;

NOT操作符:否定NOT之后所跟的任何条件

SELECT * FROM table_name WHERE field NOT IN (result1,result2);

返回 field字段非result1,result2的结果

K、用通配符进行过滤(模糊查询)

LIKE操作符:为了在搜索句子中使用通配符,必须使用LIKE操作符。

百分号(%)通配符:在搜素串中,%表示任何字符串出现任意次数

SELECT field1[,field2] FROM table_name WHERE field1 LIKE 'abc%';

搜素模式‘%anvil%’表示匹配任何位置包含文本anvil的值,而不论他之前或之后出现什么字符串

搜素模式‘s%e’表示匹配以s开头以e结尾

注:除了一个或多个字符外,% 还能匹配0个字符。

虽然似乎%通配符可以匹配任何东西,但有一个例外,即NULL。即使是WHERE field LIKE '%';也不能匹配用值NULL作为field值的行。

下划线(_)通配符:用法和%类似,表示匹配单个字符,不能多也不能少

5、用正则表达式进行搜素

在前面的章节我们已经了解到MySQL可以通过LIKE ...%来进行模糊匹配。

MySQL 同样也支持其他正则表达式的匹配, MySQL中使用 REGEXP 操作符来进行正则表达式匹配。

模式描述

^匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\n' 或 '\r' 之后的位置。

$匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 '\n' 或 '\r' 之前的位置。

.匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用象 '[.\n]' 的模式。

[...]字符集合。匹配所包含的任意一个字符。例如, '[abc]' 可以匹配 "plain" 中的 'a'。

[^...]负值字符集合。匹配未包含的任意字符。例如, '[^abc]' 可以匹配 "plain" 中的'p'。

p1|p2|p3匹配 p1 或 p2 或 p3。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。

*匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。

+匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。

{n}n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。

{n,m}m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。

匹配field列包含文本1000的所有行

select field from table_name where field REGEXP '1000' order by field;

匹配field列包含000的所有行

select field from table_name where field REGEXP '.000' order by field;

注:mysql 中的正则表达式匹配不区分大小写,为区分大小写,可使用BINARY关键字,如

WHERE field REGEXP BINARY 'JetPack .000'

| 为正则表达式中的OR操作符,表示匹配其中之一,也可以多个|,如匹配field列中包含1000或2000或3000的行

select field from table_name where field regexp '1000 | 2000 | 3000';

匹配范围

[0123456789] 匹配0到9 或者 [0-9]

[a-z] 匹配任意字母字符

匹配特殊字符

\\- 表示查找-

\\.表示查找.

\\f换车

\\n 换行

\\r 回车

\\t制表符

\\v纵向制表符