MySQL基本操作


MySQL基本操作


基本操作

1.建库/删库

数据库对名称是大小写敏感的。

#创建数据库

CREATE DATABAE 库名;##

#删库

DROP DATABASE 库名;

  1. 插入insert

2.1 仅插入一行

INSERT INTO 表名(列名1,列名2,列名3) VALUES(行1值1, 行1值2, 行1值3);

2.2 插入多行,比如三行

INSERT INTO 表名(列名1,列名2,列名3)

VALUES(行1值1,行1值2,行1值3),

(行2值1,行2值2,行2值3),

(行3值1,行3值2,行3值3);

3.更新update和删除delete

更新和删除操作一定要注意添加WHERE限制条件,否则很危险!!!

更新和删除操作只是对表的内容更改,并不会改变表的结构。

更新

UPDATE 表名字 SET 列1=值1,列2=值2 WHERE 条件;

删除(这是删除内容,并不会释放存储空间。)

DELETE FROM 表名字 WHERE 条件;

4.查询select

4.1 简单查询

SELECT 列1,列2,列3 FROM 表名 WHERE 限制条件;

4.2 子查询

最终结果只来自一个表的情况。条件里嵌套有查询,根据需要可多层嵌套。通过比较符连接。

SELECT … FROM 表名 WHERE
department IN (SELECT department FROM …)

4.3 连接查询

最终结果来自多个表的情况,有某些列作为连接字段。

内连接

 得到两个表的公共集合,以下三个 查询语句都等价

方式一:SELECT … FROM 表a,表b WHERE a.某列名 =
b.某列名;

方式二:SELECT … FROM 表a (INNER) JOIN 表b ON a.某列名 = b.某列名;

方式三:SELECT … FROM 表a CROSS JOIN 表b WHERE a.某列名 = b.某列名;

特殊的内连接-自连接,自己和自己作为两个表处理。

SELECT … FROM 表a AS
A,表a AS B WHERE A.某列名 = B.某列名的计算操作;

左连接

 结果集是左表的全部内容,如果右表的某行和左表不匹配,则右表的相关列内容为空值NULL。

SELECT … FROM 表a LEFT
(OUTER) JOIN 表b ON a.某列名 = b.某列名;

右连接

 结果集是右表的全部内容,如果左表的某行和右表不匹配,则左表的相关列内容为空值NULL。

SELECT … FROM 表a RIGHT
(OUTER) JOIN 表b ON
a.某列名 = b.某列名;

完整外部连接/全连接

 返回两个表的所有行,即返回左、右连接的和。若一个表的行在另一个表不匹配时则显示为空值NULL。

SELECT … FROM 表a FULL
(OUTER) JOIN 表b ON
a.某列名 = b.某列名;

交叉连接

 笛卡尔连接,返回左表每一行和右表每一行相互组合的结果,可借助笛卡尔积n*m理解。条件限制只能使用WHERE不能用ON。

SELECT … FROM 表a CROSS
JOIN 表b WHERE a.某列名 = b.某列名;

如果没有WHERE语句,那么交叉连接和没有限制的内连接等价,都是得到两个表的笛卡尔积。

即SELECT … FROM 表a CROSS JOIN 表b;结果集等同于 SELECT … FROM 表a,表b;。

操作表:对表格的操作,可以理解为更改表的属性或者结构。

5.1 建表

表的名字是大小写敏感的。

CREATE TABLE 表名(

列名1 INT(长度) UNSIGNED DEFAULT NOT NULL AUTO_INCREMENT,

列名2 数据类型(长度) DEFAULT 默认值,

列名3 数据类型(长度) DEFAULT NULL,

PRIMARY KEY(列名)

)ENGINE=InnoDB default-charset=utf8;

添加主键也可以在括号里的最后一行加上CONSTRAINT 主键名 PRIMARY KRY(列名)。

主键也可以是多列的复合主键CONSTRAINT 主键名
PRIMARY KEY(列1,列2,列3)。

查看表的结构

#方式一:使用关键字DESCRIBE

DESCRIBE 表名;

#方式二:查看建表语句

SHOW CREATE TABLE 表名;

5.2 重命名表格

对一张已经建立的表重命名

方式一:RENAME TABLE 原名 TO 新名;

方式二:ALTER TABLE 原名 RENAME
新名;

方式三:ALTER TABLE 原名 RENAME
TO 新名;

5.3 删除表

DROP TABLE 表名字;

5.4 表增加一列

以下两种方式是等效的

方式一:ALTER TABLE 表名字 ADD 列名 数据类型 约束;

方式二:ALTER TABLE 表名字 ADD COLUMN 列名 数据类型 约束;

如果没有指定添加的新列的位置,那么就会默认添加在表的最后一列,如果需要指定在第一列则用关键字FIRST,如果需要在某列后则用关键字AFTER 某列名。

新增列放在第一列

ALTER TABLE 表名字 ADD
列名 数据类型 约束 FIRST;

新增列放在列A之后

ALTER TABLE 表名字 ADD
列名 数据类型 约束 AFTER A;

5.5 表删除一列

方式一:ALTER TABLE 表名字 DROP 列名;

方式二:ALTER TABLE 表名字 DROP COLUMN 列名;

5.6 重命名表的一列/修改该列的名字

本质上是修改一个列的属性,用了关键字CHANGE。

ALTER TABLE 表名字 CHANGE
原列名 新列名 新列的数据类型 约束;

注意到如果新列名和原列名相同的话,就可以修改这个列的数据类型和约束了。

但是修改数据类型可能会导致数据丢失!!

5.7 修改表一列的数据类型

方式一:ALTER TABLE 表名字 CHANGE 原列名 原列名 新数据类型 约束;

方式二:ALTER TABLE 表名字 MODIFY 列名字 新数据类型;

注意,修改数据类型可能会导致数据丢失!!

6.索引

数据库默认使用全表扫描,当一张表数据量较少的时候检索速度也会很快,当数据量很大的时候(比如达到百万级)如果使用全表扫描就会很慢。这个时候就需要添加索引来提高查询速度,往往会有很大的改善。添加索引时会在磁盘上创建索引文件,并且写入索引信息,所以创建索引会增加插入速度和消耗一部分存储空间。

执行查询语句时,数据库会自动判断是否有可用的索引,如果没有才会进行全表扫描。

创建单列索引的命令:

方式一:ALTER TABLE 表名字 ADD INDEX 索引名 (列名);

方式二:CREATE INDEX 索引名 ON 表名字 (列名);

创建多列索引的命令:

 多列索引必须符合最左匹配原则。

方式一:ALTER TABLE 表名字 ADD INDEX 索引名 (列名1,列名2,列名3);

方式二:CREATE INDEX 索引名 ON 表名字 (列名1,列名2,列名3);

查询一张表的索引命令:

SHOW INDEX FROM 表名字;

6.视图

视图是一张虚拟表,基于数据库中已有的一张表或者多张表的真实数据组织而成,是一张逻辑表而不是实际存在的物理表,数据库中存放的是视图的定义。查询的时候可以把视图当做一张普通的表操作。

创建视图命令:

CREATE VIEW 视图名(视图列1,视图列2,视图列3) AS SELECT
列1,列2,列3
FROM 表;

可以看到视图中用到关键字AS,而且在AS后面是一个查询语句,所以这个查询语句可以是子查询和连接查询,视图依赖的数据可以是多个表的数据。

查看视图表的数据命令(和查询普通表一样,只不过把表名字换成了视图名字):

SELECT * FROM 视图名;

删除视图(和删除表操作一样):

DROP VIEW 视图名;

7.导入和导出

导入

 导入本地文件数据到数据库中的某张表去。需要注意指定文本中行、列数据的分隔符,默认使用制表符Tab作为列分隔符、使用换行符(windows是“\r\n”,OS
 X是“\r”,Linux是“\n”)作为行分隔符。

#使用默认的分隔符

LOAD DATA INFILE ‘文件路径’ INTO TABLE 表名;

注意导入的文件路径需要加上单引号。如果需要指定分隔符,则为:

LOAD DATA INFILE ‘文件路径’

INTO TABLE 表名

FIELDS TERMINATED BY ‘列分隔符’

LINES TERMINATED BY ‘换行符’;

导出

 导出操作和导入相反,是把数据库的数据导出到本地文件中去。需要设置MySQL服务器允许导出权限。

SELECT 列1,列2,列3 INTO OUTFILE ‘文件路径’ FROM 表名;

注意导出文件路径需要加上单引号。同样,上面是使用默认的分隔符导出数据,如果想要设定分隔符,则可以在上面的命令后添加分隔操作。

SELECT 列1,列2,列3

INTO OUTFILE ‘文件路径’

FROM 表名

FIELDS TERMINATED BY ‘列分隔符’

[OPTIONALLY] ENCLOSED BY ‘指定把字段包括起来的字符(若用了OPTIONALLY则只会包括CHAR和VARCHAR类型)’

ESCAPED BY ‘指定当需要转义时用什么作为转义字符(通常为\)’

LINES TERMINATED BY ‘换行符’;

对于用LOAD DATA INFILE或SELECT …INTO OUTFILE执行的文本文件导入或导出操作,NULL用序列\N表示。

8.数据备份和恢复

导出和备份的区别

 导出仅仅是导出需要的数据,而备份则是把数据库的结构,包括表结构、所有数据、索引、视图等全部另存为一个文件。

备份

 数据备份使用关键词mysqldump,mysqldump是一个备份程序,产生一个备份脚本文件*.sql。

备份命令不需要在MySQL服务里面敲命令,需要退出MySQL的命令行操作界面,在系统命令行操作界面进行。

#备份整个数据库

mysqldump -u 用户名 数据库名 > 备份文件路径;

#备份某个数据表

mysqldump -u 用户名 数据库名 表名 > 备份文件路径;

恢复

 方式一是在MySQL命令行操作,使用关键词source。会重新创建需要的库和表。

 source命令直接执行sql脚本文件。

source 备份文件路径;

方式二先在数据库建一个空库,然后在系统命令行操作恢复命令。使用Linux输入符号“<”完成恢复。

mysql -u 用户名 < 备份文件路径;

不交互执行SQL

在shell脚本执行SQL语句,不需要登录MySQL服务执行操作。

mysql -h主机IP地址 -u 登录用户名 -p ‘密码’ -S
mysql.sock的路径 -e “SQL命令;”

保存本地文件路径

如果没有-h参数,则表示是访问本地的MySQL服务。举例:

mysql -uroot -p’fefjay@2017’ -S
/tmp/mysql.sock -e “show databases;” >> /home/a.txt

echo “show databases;” | mysql
-uroot -p’fefjay@2017’ -S /tmp/mysql.sock > /home/a.txt

上述命令都是先要登录MySQL服务,然后执行命令,得到结果,至于把结果是导出到本地的文件a.txt,或者结合管道符|和grep的操作,看具体的业务需要了。但是这里需要写出登录的密码,不安全,需要找到一种更加安全的可以写到脚本中的方法

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值