MySQL高级进阶:
预处理(绑定变量):
什么是预处理:(我的理解就是宏)
从MySQL 4.1开始,就支持预处理语句(Prepared statement),这大大提高了客户端和服务器 端数据传输的效率。当创建一个预定义SQL时,客户端向服务器发送一个SQL语句的原型;服务器 端接收到这个SQL语句后,解析并存储这个SQL语句的部分执行计划,返回给客户端一个SQL语句 处理句柄,以后每次执行这条SQL,客户端都指定使用这个句柄。
预处理的优势:
预处理的基本使用:
#定义预处理语句 PREPARE stmt_name FROM preparable_stmt;
#执行预处理语句 EXECUTE stmt_name [USING @var_name [, @var_name] ...];
#删除(释放)定义 {DEALLOCATE | DROP} PREPARE stmt_name;
例:利用预处理语句查询employee表中的信息
use mydb;
#定义预处理语句
prepare sql_employee from 'select * from employee where name=?';
#设置预处理的变量
set @name1='Jean';
set @name2='李四';
#执行预处理语句
execute sql_employee using @name1;
#删除预处理语句
drop prepare sql_employee;
#预处理语句只在当前会话生效,离开就没有了,所以不删除也是可以的
复制表的几种方式:
在开发中要对表进行处理,一般都需要先复制一份表,再处理数据。
例:
#创建一张表
create table t1(
id int not null auto_increment primary key,
name varchar(20)
);
#添加数据
insert into t1 (name) values ('Jean');
insert into t1 (name) values ('Wearn');
#添加索引
create index ind_name on t1 (name);
#只复制结构
create table t2 like t1;
#复制数据
create table t3 select * from t1;
#都复制
create table t4 like t1;
insert into t4 select * from t1;
导出数据:
方法一:
这里如果选择自己的路径会报错,因为MySQL的安全策略,所以在指定路径下完成数据的导出
# 找到指定路径:
mysql> show variables like '%secure_file_priv%';
+------------------+------------------------------------------------+
| Variable_name | Value
|
+------------------+------------------------------------------------+
| secure_file_priv | C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\ |
+------------------+------------------------------------------------+
#导出数据
select * from employee into outfile 'C:\\ProgramData\\MySQL\\MySQL Server 8.0\\Uploads\\employee.txt'
fields terminated by '#'
enclosed by '"'
lines terminated by '\r\n';
方法二:
使用mysqldump导出数据:
mysqldump是MySQL用于转存储数据库的实用程序,它主要产生一个SQL脚本,其中包含创建数 据库、创建数据表、插入数据所必需的SQL语句。(不要进mysql执行)
# 导出mydb数据库(含数据)
mysqldump -h localhost -u root -p mydb > d:/mydb.sql
# 导出mydb数据库(不含数据)
mysqldump -h localhost -u root -p mydb --no-data > d:/mydb.sql
# 导出mydb.employee数据表
mysqldump -h localhost -u root -p mydb employee > d:/employee.sql
# 导出mydb数据库,忽略contacts表
mysqldump -h localhost -u root -p mydb --ignore-table mydb.contacts > d:/employee.sql
导入数据:
方法一:
例:
#导出数据
select * from employee into outfile 'C:\\ProgramData\\MySQL\\MySQL Server 8.0\\Uploads\\employee.txt'
fields terminated by '#'
enclosed by '"'
lines terminated by '\r\n';
#导入数据
LOAD DATA INFILE 'C:\\ProgramData\\MySQL\\MySQL Server 8.0\\Uploads\\employee.txt' INTO TABLE employee character set utf8
FIELDS TERMINATED BY '#'
ENCLOSED BY '"'
LINES TERMINATED BY '\r\n';
方法二:
source命令
在MySQL中,可以使用source命令导入较大的SQL文件。source命令可以导入使用mysqldump备 份的sql文件。
# source命令的使用示例
source d:/mydb.sql
例:
#导出数据
mysql -h localhost -u root -p mydb employee > d://employee.sql;
#导入数据
source d://employee.sql;
字符集:
设置字符集
1、数据库
#创建数据库时指定字符集 CREATE DATABASE databaseName CHARSET utf8 COLLATE utf8_general_ci;
#查看数据库的字符集 SHOW CREATE DATABASE databaseName;
2、表
#创建表时指定字符集 CREATE TABLE tableName(…) DEFAULT CHARSET=utf8;
#查看数据库的字符集 SHOW CREATE TABLE tableName;
3、字段 CREATE TABLE tableName(…, name varchar(50) not null CHARSET utf8, …);
例:
create table t1 (name varchar(30))charset=gb2312;
insert into t2 (name) values ('张三');
insert into t2 (name) values ('陶喆');
create table t2 (name varchar(30))charset=gbk;
insert into t2 (name) values ('张三');
insert into t2 (name) values ('陶喆');
select * from t2;