虽然不是DBA,但是了解mysql的一些基本知识对于我们提高自身水平和提高书写sql语句性能有帮助!
这些文件的配置根据系统的不同配置方式是一样,只不过文件名称不一样,windows的名称为my.ini文件,而linux系统下的在/etc/my.conf文件:配置方式都是【mysqld】下,举例配置:
优势:与其他数据库相比,mysql与众不同,它的架构可以在多种不同场景中应用并且发挥良好作用。主要体现在存储引擎的架构上。插件式存储引擎架构将查询出来和其他的系统任何以及数据的存储提取相分离。这种架构可以根据业务的需求和实际需求选择合适的存储引擎。
查看本机引擎有两种方式:
show variables like '%storge_engine%'; show engines 查看某张表的存储引擎方式:use db01; show create table user; mysql> show create table user; +-------+-----------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +-------+-----------------------------------------------------------------------------------------------------------------------------------------------------+ | user | CREATE TABLE `user` ( `id` int(11) NOT NULL, `name` varchar(20) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci | +-------+-----------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec) show table status from db01 where name='user' mysql> show table status from db01 where name='user' \G *************************** 1. row *************************** Name: user Engine: InnoDB Version: 10 Row_format: Dynamic Rows: 2 Avg_row_length: 8192 Data_length: 16384 Max_data_length: 0 Index_length: 0 Data_free: 0 Auto_increment: NULL Create_time: 2018-07-10 01:04:41 Update_time: 2018-07-10 01:05:58 Check_time: NULL Collation: utf8mb4_0900_ai_ci Checksum: NULL Create_options: Comment:查看某引擎的存在那几张表中:
select table_catalog ,table_schema,table_name ,engine from information_schema.tables where table_schema='db01' and engine='InnoDB'; mysql> select table_catalog ,table_schema,table_name ,engine from information_schema.tables where table_schema='db01' and engine='InnoDB'; +---------------+--------------+------------+--------+ | TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | ENGINE | +---------------+--------------+------------+--------+ | def | db01 | user | InnoDB | +---------------+--------------+------------+--------+ 1 row in set (0.01 sec)修改某张表的引擎方式
真接修改ALTER TABLE my_table ENGINE=InnoDB 在数据多的时候比较慢,而且在修改时会影响读取性能。my_table是操作的表,innoDB是新的存储引擎。导出,导入。这个比较容易操作,直接把导出来的sql文件给改了,然后再导回去。用mysqldump ,常用的是navicate那样更容易上手。友情提醒风险较大。创建,插入。这个比第一种速度快, 安全性比第二种高,推荐。分2步操作 a.创建表,先创建一个和要操作表一样的表,然后更改存储引擎为目标引擎。`INSERT INTO my_tmp_table; SELECT * FROM my_table; `
b.插入。为了安全和速度,最好加上事务,并限制id(主键)范围。INSERT INTO my_tmp_table SELECT * FROM my_table;
常见的两种引擎之间的区别:
sql_mode是个很容易被忽视的变量,默认值是空值,在这种设置下是可以允许一些非法操作的,比如允许一些非法数据的插入。在生产环境必须将这个值设置为严格模式,所以开发、测试环境的数据库也必须要设置,这样在开发测试阶段就可以发现问题 ; 查看sql_mode的设置:
//第一种方式 vi /etc/my.cnf //第二种方式,登录mysql之后 SELECT @@GLOBAL.sql_mode; +--------------------------------------------+ | @@global.sql_mode | +--------------------------------------------+ | STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION | +--------------------------------------------+ 1 row in set (0.00 sec)mysql5.0以上版本支持三种sql_mode模式:ANSI、TRADITIONAL和STRICT_TRANS_TABLES。 ANSI模式:宽松模式,对插入数据进行校验,如果不符合定义类型或长度,对数据类型调整或截断保存,报warning警告。 TRADITIONAL模式:严格模式,当向mysql数据库插入数据时,进行数据的严格校验,保证错误数据不能插入,报error错误。用于事物时,会进行事物的回滚。 STRICT_TRANS_TABLES模式:严格模式,进行数据的严格校验,错误数据不能插入,报error错误。 查看sql_mode的详解
感谢浏览!希望对你有帮助!