MySQL常用SQL语句小结


一、SQL基础操作

1、创建数据库

#创建数据库
CREATE DATABASE 数据库名 DEFAULT CHARACTER SET utf8;

#或
CREATE SCHEMA 数据库名 DEFAULT CHARACTER SET utf8;


2、创建表

DROP TABLE IF EXISTS `learn`;
CREATE TABLE `learn` (
	id INT,
	course VARCHAR(32),
	chapters TINYINT,
	activity VARCHAR(32),
	PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


3、常用语句

#修改显示宽度
ALTER TABLE `learn` CHANGE COLUMN `id` `id` INT(3) UNSIGNED ZEROFILL NOT NULL ;

#显示宽度
ALTER TABLE `learn` CHANGE COLUMN `id` `id` INT(11) ZEROFILL NOT NULL ;

#添加数据(中文乱码)
INSERT INTO learn(id, course, chapters)VALUES(6, '\xF0\x9F\x92\x94', 3);

#修改字符编码
ALTER TABLE learn CHANGE COLUMN `course` `course` VARCHAR(32) CHARACTER SET 'utf8mb4' NULL DEFAULT NUL
L;

#添加数据
INSERT INTO learn(id, course, chapters, activity)VALUES(1, '5G 时代-音视频高级开发', 3,'');
INSERT INTO learn(id, course, chapters, activity)VALUES(2, 'C/C++Linux 服务器开发/后台架构师', 5, '');
INSERT INTO learn(id, course, chapters, activity)VALUES(3, '大学生春招秋招 Linux C/C++开发就业课程', 3, '');

#修改数据
UPDATE learn SET chapters = 5 WHERE id = 1;

#删除数据
DELETE FROM learn WHERE id = 3;

#查询数据
SELECT * FROM learn;

#修改字段名
ALTER TABLE `learn` CHANGE COLUMN `chapters` `chapter_count` TINYINT NULL DEFAULT 0;

#增加字段
ALTER TABLE `learn` ADD COLUMN `price` DECIMAL(8,2) NOT NULL DEFAULT 0 AFTER `chapter_count`;

#删除字段
ALTER TABLE `learn` DROP COLUMN `price`


二、MySQL连接信息


1、查看当前连接

show status like 'Threads%';

在这里插入图片描述
Threads_connected 跟 show processlist 结 果 相 同 , 表 示 当 前 连 接 数 。 准 确 的 来 说 ,Threads_running 是代表当前并发数。



2、查询数据库当前设置的最大连接数

show variables like '%max_connections%';

在这里插入图片描述



3、显示连接列表

 show processlist;



4、显示连接状态

 SHOW STATUS LIKE '%connect%';


三、MySQL定时任务

自 MySQL5.1.6 起, 增加了一个非常有特色的功能-事件调度器(Event Scheduler), 可以用做定时执行某些特定任务(例如: 删除记录、 对数据进行汇总、 数据备份等等),来取代原先只能由操作系统的计划任务来执行的工作。

事件调度器可以精确到每秒钟执行一个任务, 而操作系统的计划任务( 如: Linux 的 cron 或 Windows 下的任务计划) 只能精确到每分钟执行一次。 对于一些对数据实时性要求比较高的应用( 例如: 股票、赔率、 比分等) 就非常适合。

事件调度器有时也可以称为临时触发器( temporal triggers) , 因为事件调度器是基于特定时间周期触发来执行某些任务, 而触发器( Triggers) 是基于某个表所产生的事件触发的, 区别也就在这里。

1) 关闭事件任务: ALTER EVENT eventName ON COMPLETION PRESERVE DISABLE;
2) 开启事件任务: ALTER EVENT eventName ON COMPLETION PRESERVE ENABLE;
3) 查看事件任务: SHOW EVENTS ;



1、开启 event_scheduler

SET GLOBAL event_scheduler = ON;

在这里插入图片描述
或者可以在配置 my.cnf 文件 中加上 event_scheduler = 1。



2、关闭 event_scheduler

SET GLOBAL event_scheduler = OFF;

在这里插入图片描述
或者可以在配置 my.cnf 文件 中加上 event_scheduler = 0。



3、查看当前是否已开启事件调度器

SHOW VARIABLES LIKE 'event%';

在这里插入图片描述

或者

SELECT @@event_scheduler;

在这里插入图片描述
或者

mysql> SHOW PROCESSLIST;



4、定时任务例子

mysql> CREATE TABLE t2(timeline TIMESTAMP);
Query OK, 0 rows affected (0.00 sec)

mysql> CREATE EVENT event_test_insert
-> ON SCHEDULE EVERY 1 SECOND
-> DO INSERT t2 VALUE(CURRENT_TIMESTAMP);

Query OK, 0 rows affected (0.00 sec)

等3秒…
在这里插入图片描述


四、MySQL备份

1、mysqldump -h 主机名 -P 端口 -u 用户名 -p 密码 数据库名 > 文件名.sql

mysql>mysqldump -h 主机名 -P 端口 -u 用户名 -p 密码 --all-databases --lock-all-tables --routines --triggers --flush-logs|gzip > `date +%Y%m%d%H%M%S`all.sql.gz


2、直接将 MySQL 数据库压缩备份

mysqldump -hhostname -uusername -ppassword databasename | gzip > backupfile.sql.gz


3、备份 MySQL 数据库某个(些)表

mysql>mysqldump -hhostname -uusername -ppassword databasename specific_table1 specific_table2 > backupfile.sql


4、同时备份多个 MySQL 数据库

mysql>mysqldump -hhostname -uusername -ppassword –databases databasename1 databasename2 databasename3 > multibackupfile.sql


5、仅仅备份数据库结构

mysql>mysqldump –no-data –databases databasename1 databasename2 databasename3 > structurebackupfile.sql


6、备份服务器上所有数据库

mysql>mysqldump -hhostname -uusername -ppassword –-all-databases > allbackupfile.sql


7、还原 MySQL 数据库的命令

mysql>mysql -hhostname -uusername -ppassword databasename < backupfile.sql


8、还原压缩的 MySQL 数据库

mysql>gunzip < backupfile.sql.gz | mysql -uusername -ppassword databasename


案例

#备份
mysqldump -uroot -pls!@#456 -R lingsheng-mall>/home/milo/mysql_backup/backup.dump

#创建数据库
CREATE SCHEMA `lingsheng-mall_new` DEFAULT CHARACTER SET utf8 ;

#恢复
mysql -uroot -pls!@#456 lingsheng-mall_new< /home/milo/mysql_backup/backup.dump


五、MySQL表复制

1、创建表 t1

mysql>create table t1 (int id, name varchar(30));


2、创建表 t2,(学习 t1 表的结构)

mysql>create table t2 like t1;


3、复制表(两个表的结构完全一致)

mysql>insert into t2 select * from t1;


4、复制表(两个表的结构可能不一致)

mysql>insert into t2 select name from t1


六、MySQL导出数据


1、使用 SELECT … INTO OUTFILE 语句导出


以下实例中我们将数据表 user 数据导出到 /tmp/testdata.txt 文件中:

mysql> select * from `user` INTO OUTFILE '/tmp/testdata.txt';


你可以通过命令选项来设置数据输出的指定格式, 以下实例为导出 CSV 格式:

mysql> SELECT * FROM `user` INTO OUTFILE '/tmp/testdata.txt'
-> FIELDS TERMINATED BY ',' ENCLOSED BY '"'
-> LINES TERMINATED BY '\r\n';


在下面的例子中, 生成一个文件, 各值用逗号隔开。 这种格式可以被许多程序使用。

SELECT a,b,a+b INTO OUTFILE '/tmp/result.text' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' FROM test_table;



SELECT … INTO OUTFILE 语句有以下属性:

  • 1)LOAD DATA INFILE 是 SELECT … INTO OUTFILE 的逆操作, SELECT 句法。 为了将一个数据库的数据写入一个文件, 使用 SELECT … INTO OUTFILE, 为了将文件读回数据库, 使用 LOAD DATA INFILE。
  • 2)SELECT…INTO OUTFILE 'file_name’形式的 SELECT 可以把被选择的行写入一个文件中。该文件被创建到服务器主机上, 因此您必须拥有 FILE 权限, 才能使用此语法。
  • 3)输出不能是一个已存在的文件。 防止文件数据被篡改。
  • 4)你需要有一个登陆服务器的账号来检索文件。 否则 SELECT … INTO OUTFILE 不会起任何作用。
  • 5)在 UNIX 中, 该文件被创建后是可读的, 权限由 MySQL 服务器所拥有。 这意味着, 虽然你就可以读取该文件, 但可能无法将其删除。



2、导出表作为原始数据
mysqldump 是 mysql 用于转存储数据库的实用程序。 它主要产生一个 SQL 脚本, 其中包含从头重新创建数据库所必需的命令 CREATE TABLE INSERT 等。使用 mysqldump 导出数据需要使用 --tab 选项来指定导出文件指定的目录, 该目标必须是可写的。

以下实例将数据表 student_tbl 导出到 /tmp 目录中:

mysqldump -u root -p --no-create-info --tab=/tmp STUDENT student_tbl



3、导出 SQL 格式的数据

导出 SQL 格式的数据到指定文件, 如下所示:

mysqldump -u root -p STUDENT student_tbl > dump.txt


以上命令创建的文件内容如下:

CREATE TABLE student_tbl (
	id int(11) NOT NULL auto_increment,
	title varchar(100) NOT NULL default '',
	teacher varchar(40) NOT NULL default '',
	`date` datetime default NULL,
	PRIMARY KEY (id),
	UNIQUE KEY AUTHOR_INDEX (teacher)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO student_tbl VALUES (1,'class1','xiaoming', now());
INSERT INTO student_tbl VALUES (2,'class2','lilei', now());
INSERT INTO student_tbl VALUES (3,'class3','hanmei', now());


如果你需要导出整个数据库的数据, 可以使用以下命令:

mysqldump -u root -p STUDENT > database_dump.txt


如果需要备份所有数据库, 可以使用以下命令:

mysqldump -u root -p --all-databases > database_dump.txt

–all-databases 选项在 MySQL 3.23.12 及以后版本加入。该方法可用于实现数据库的备份策略。



4、将数据表及数据库拷贝至其他主机

如果你需要将数据拷贝至其他的 MySQL 服务器上, 你可以在 mysqldump 命令中指定数据库名及数据表。在源主机上执行以下命令, 将数据备份至 dump.txt 文件中:

mysqldump -u root -p database_name table_name > dump.txt


如果完整备份数据库, 则无需使用特定的表名称。
如果你需要将备份的数据库导入到 MySQL 服务器中, 可以使用以下命令, 使用以下命令你需要确认数据库已经创建:

mysql -u root -p database_name < dump.txt


你也可以使用以下命令将导出的数据直接导入到远程的服务器上,但请确保两台服务器是相通的, 是可以相互访问的:

mysqldump -u root -p database_name | mysql -h other-host.com database_name


七、MySQL导入数据


1、mysql 命令导入

mysql -u 用户名 -p 密码 < 要导入的数据库数据(0voice.sql)

实例:

mysql -uroot -p123456 < student.sql

以上命令将将备份的整个数据库 student.sql 导入。



2、source 命令导入
source 命令导入数据库需要先登录到数库终端:

mysql> create database abc; # 创建数据库
mysql> use abc; # 使用已创建的数据库
mysql> set names utf8; # 设置编码
mysql> source /home/abc/abc.sql # 导入备份数据库



3、使用 LOAD DATA 导入数据

MySQL 中提供了 LOAD DATA INFILE 语句来插入数据。 以下实例中将从当前目录中读取文件dump.txt , 将该文件中的数据插入到当前数据库的 mytbl 表中。

LOAD DATA LOCAL INFILE 'dump.txt' INTO TABLE mytbl;

如果指定 LOCAL 关键词, 则表明从客户主机上按路径读取文件。 如果没有指定, 则文件在服务器上按路径读取文件。

你能明确地在 LOAD DATA 语句中指出列值的分隔符和行尾标记,但是默认标记是定位符和换行符。

两个命令的 FIELDS 和 LINES 子句的语法是一样的。 两个子句都是可选的, 但是如果两个同时被指定, FIELDS 子句必须出现在 LINES 子句之前。

如果用户指定一个 FIELDS 子句, 它的子句 ( TERMINATED BY、 [OPTIONALLY] ENCLOSED BY 和 ESCAPED BY) 也是可选的, 不过, 用户必须至少指定它们中的一个。

mysql> LOAD DATA LOCAL INFILE 'dump.txt' INTO TABLE mytbl
-> FIELDS TERMINATED BY ':'
-> LINES TERMINATED BY '\r\n';

LOAD DATA 默认情况下是按照数据文件中列的顺序插入数据的,如果数据文件中的列与插入表中的列不一致, 则需要指定列的顺序。
如, 在数据文件中的列顺序是 a,b,c, 但在插入表的列顺序为 b,c,a, 则数据导入语法如下:

mysql> LOAD DATA LOCAL INFILE 'dump.txt' 
-> INTO TABLE mytbl (b, c, a);



4、使用 mysqlimport 导入数据

mysqlimport 客户端提供了 LOAD DATA INFILEQL 语句的一个命令行接口。 mysqlimport的大多数选项直接对应 LOAD DATA INFILE 子句。

从文件 dump.txt 中将数据导入到 mytbl 数据表中, 可以使用以下命令:

mysqlimport -u root -p --local mytbl dump.txt

mysqlimport 命令可以指定选项来设置指定格式,命令语句格式如下:

mysqlimport -u root -p --local --fields-terminated-by=":" \
--lines-terminated-by="\r\n" mytbl dump.txt

mysqlimport 语句中使用 --columns 选项来设置列的顺序:

 mysqlimport -u root -p --local --columns=b,c,a mytbl dump.txt


mysqlimport 的常用选项介绍
在这里插入图片描述
在这里插入图片描述

mysqlimport 命令常用的选项还有:

-v 显示版本( version)
-p 提示输入密码( password)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值