说明在mysql语句中,sql语句总共分四种

a、DDL数据定义语句=>常用的ddl语句有(CREATE【创建】,DROP【删除】,ALTER【修改表结构】)

b、DML数据操作语句=>常用的dml语句有(INSERT【添加】,UPDATE【修改数据】,DELETE【删除】)

c、DQL数据查询语句=>常用的dql语句有(SELECT【查询】)

d、DCL数据控制语句=>用于管理数据库和用户的. 常用的有(commit, savepoint, rollback, grant, revoke)

1、mysql的命令行登录(注意:在登录后的mysql命令行里面,结束符用;或者用\g来结束)

  1. //第一种登录方式
  2. mysql -hlocalhost -uroot -p -P3306 => mysql -uroot -p
  3. //再输入自己的密码就可以执行登录(注意在windows下面,可以把mysql添加到环境变量中)-P表示端口号默认是3306,-h表示地址,-D表示登录的同时登录到指定的数据库注意区别开prompt的D
  4.  
  5. //第二种登录方式
  6. mysql -uroot -p123456
  7. //123456表示密码

2、mysql的退出方式

  1. //第一种方式
  2. exit
  3. //第二种方式
  4. quit
  5. //第三种方式
  6. ctrl+c

3、修改mysql的命令提示符

  1. --第一种在登录的时候进行修改,只对当次的连接有效,注意在使用的时候要用双引号
  2. mysql -uroot -p --prompt "test>"
  3. --在修改命令提示符的时候\h表示主机名\u表示当前用户\d表示当前打开的数据库\D表示当前的日期时间
  4. mysql -uroot -p --prompt "\h\u\d\D>"
  5. --mysql 在显示时设置对齐的小技巧,以下设置完后,那么显示就整齐了
  6. cmd>mysql -uroot -p --default-character-set=latin1
  7. mysql>set names gbk;

4、mysql 获取基本信息以及规范

  1. --获取版本号,在未登录之前进行查看
  2. mysql -V
  3. msyql --version
  4. --进入数据库之后查看版本号(注意在语句结束后要用;或者\g来结尾而\c来表示不执行当前命令)
  5. SELECT VERSION();
  6. --查看当前用户
  7. SELECT UESR();
  8. --获取当前数据库
  9. SELECT DATABASE();
  10. --获取当前时间
  11. SELECT NOW();
  12. --注意数据库和表名称不要用mysql的内部名称进行命名,如果一定要使用,那么要用``将其括起来
  13. SELECT @@SQL_MODE;
  14. --查看mysql的模式,是否是严格模式
  15. SHOW ENGINES\G
  16. --查看mysql存储引擎
  17. SHOW VARIABLES LIKE 'storage_engine';
  18. --查看默认的存储引擎
  19. SHOW TABLE STATUS LIKE 'test'\G;
  20. --查看表的状态 如果查看全部的则是SHOW TABLE STATUS\G;
  21. CHECK TABLE test
  22. --检查表的内容test表示表名并且这边的表名是不加引号的
  23. REPAIR TABLE test
  24. --修复表test表示表名并且这边的表名是不加引号的
  25. SHOW PROCESSLIST
  26. --查看当前有多少个客户端口连接到该数据库,该指令可以帮助我们查看当前有多少个客户端连接到mysqldb上,有助于我们了解当前的mysql运行和使用状况

5、数据库的相关操作

创建数据库

不同的校验规则,会对查询时字母是否区分大小写和排序有影响, 举例:

(1) 默认的 utf8_general_ci   不区分大小写

(2) 还有有个 utf8_bin 这个是区分大小写.

  1. --创建数据库
  2. CREATE DATABASE `test`;
  3. --为了阻止重名的提示,表示如果不存在test的情况下新建test,也就是把错误信息放到警告中区
  4. CREATE DATABASE IF NOT EXISTS `test`;
  5. --查看警告,注意没有括号
  6. SHOW WARNINGS;
  7. --在创建数据库的时候指定编码方式
  8. CREATE DATABASE IF NOT EXISTS `test` DEFAULT CHARACTER SET 'UTF8';
  9. --在创建数据库的同时,指定编码方式和较验规则
  10. CREATE DATABASE IF NOT EXISTS `db` DEFAULT CHARACTER SET `utf8` DEFAULT COLLATE `utf8_general_ci`;
  11. --查看指定数据库的编码方式
  12. SHOW CREATE DATABASE `test`;
  13. --修改指定数据库的编码方式alter表示改变的意思
  14. ALTER DATABASE `test` DEFAULT CHARACTER SET 'UTF8';
  15. --查看数据库
  16. SHOW DATABASES;
  17. --打开指定数据库
  18. USE test;
  19. --获得当前已经打开的数据库
  20. SELECT DATABASE();
  21. --删除指定的数据库

注意在打印SHOW CREATE DATABASE `dbname`时会出现

表示当mysql版本大小4.01.00的时候会执行后面语句

比如:当执行/*!50500 SHOW DATABASES */时表示当mysql 的版本大于5.05.00的时候,会执行里面语句;

数据库的备份与恢复

数据库备份的基本语法(在未进入mysql即cmd环境下):cmd>mysqldump -uroot -p 数据库名>d:/备份路径/备份名.bak

如果只想备份其他的几张表,语法是:cmd>mysqldump -uroot -p 数据库名 表名1 表名2 >d:/备份路径/备份名.bak

数据库恢复的步骤

如果库中有中文字符的情况,最好设置 set names gbk;

  • 创建一个新的空库(mysql 环境下)
  • use 新的数据库
  • SOURCE d:/备份路径/备份名.bak

同时备份多个数据库 mysqldump -uroot -p -B 数据库名1 数据库名2 数据库名3 >d:/路径/文件名.bak

那么同时恢复多个数据库 SOURCE d:/备份路径/备份名.bak   即可(注意设置set names gbk)

6、数据表的相关操作

数据表中的类型主要有,整数型,浮点型,定点型,字符串型,日期类型

整数类型:

注意:在类型后面加数字,只是规定其显示的宽度(即零填充的宽度),而不会改变其存储的容量。BOOL类型指定后被打印出来显示是TINYINT(1),但是会影响零填充的情况。

数值型bit的使用,bit字段在显示时按ascii码对应的字符显示,但是查询的时候仍然可以用数值查询 占用的字节是1-64个字节。

浮点型:

注意:对精度要求比较高的情况下,可以用DECIMAL进行存储如求和后,尾部会有一长串的小数位。以上的几个数据类型M表示数据的总长度(包含小数位),D表示小数所占用的长度,decimal 如果不指定长度的情况下,默认保留10位数,decimal最大数可以保留到65位

举例:

float(4,2) 表示的范围是-99.99-99.99

float(4,2) unsigned 表示的范围是 0-99.99

decimal(4,2) 表示的范围是-99.99-99.99

decimal(4,2) unsigned 表示的范围是 0-99.99

注意当小数点超过设置的小数点的位数,那么系统会进行四舍五入,如果四舍五入后超出范围,那么就会报越界的错误

字符型:

注意:CHAR(3),即使存储一个字节,那么所占容量是3个字节,VARCHAR(3),存储一个字节,所占容量是length+1个字节。但是CHAR的检索速度要比VARCHAR来得快。CHAR在存储的时候尾部会用空格来填充,在检索的时候会把尾部的空格去掉,VARCHAR则不进行填充,尾部的空格也不会去掉。如果需要的字段是定长的,如电话号,md5等可以使用char,否则可以使用varchar。char在存放空格的时候容易丢失,而varchar则不容易丢失

VARCHAR M 的范围是

如果表的字符集是utf8那么M的范围是(65535-3)/3=21844;

如果表的字符集是gbk那么M的范围是(65535-3)/2=32766;

如果表的字符集是latin1那么M的范围是(65535-3)/1=65532;

其中有两个字符是记录varchar数据的大小,一个字符是记录是否为Null

TEXT相关的列不能有默认值default,可以不指定大小并且TEXT在检索的时候是不存在大小写转换,并且效率要低于CHAR与VARCHAR。

在创建一张表的时候,所有的字段总和不能超过65535,但是如果超过了,那么可以用TEXT来替代

ENUM类型对应的value值所对应的下标是从1开始的,也可以用下标进行插入值,如:INSERT test (sex) VALUES (1)进行插入。

ENUM相当于单选,而SET相当于多选,并且可以用数字来替代

  1. CREATE TABLE IF NOT EXISTS test_enum(
  2. a ENUM('男','女','保密')
  3. );
  4.  
  5. INSERT test_enum (a) VALUES ('男');
  6. INSERT test_enum (a) VALUES (3);
  7. INSERT test_enum (a) VALUES ('女');
  8.  
  9. SELECT * FROM test_enum;
  10. --输出
  11. +------+
  12. | a |
  13. +------+
  14. | |
  15. | 保密 |
  16. | |
  17. +------+

SET类型的在设定的值里面,当插入值后,表会根据原始的值的顺序对插入的值进行排序,可以插入一个值,也可以插入多个值,但前提是值要在预设的值里面,否则mysql会报错,并且注意只用一个引号。

  1. CREATE TABLE IF NOT EXISTS test_set(
  2. a SET('A','B','C','D','E','F')
  3. )ENGINE=INNODB CHARSET=UTF8;
  4.  
  5. INSERT test_set (a) VALUES ('A,B');
  6. INSERT test_set(a) VALUES('C,F,D');
  7. INSERT test_set(a) VALUES('B,A,F');
  8.  
  9. SELECT * FROM test_set;
  10. +-------+
  11. | a |
  12. +-------+
  13. | A,B |
  14. | C,D,F |
  15. | A,B,F |
  16. +-------+

如果查询在集合set中的字段用find_in_set如下

SELECT * FROM `test_set` WHERE FIND_IN_SET('A',a),表示在表test_set表中查询字段a中有A选项的记录,返回的是指定值在字段的位置

日期型:

注意:常用的有DATE,DATETIME,TIMESTAMP,date的格式是“2011-11-11”,datatime和timestamp的格式是"2011-11-11 12:12:00"的模式TIME类型的第一个数字表示天数,当212:59:59表示60:50:50;

timestamp要慎重使用,因为在insert(没有指定值的时候,自动取系统时间)和update(在更新该字段或者其他字段时)的时候timestamp字段会自动更新

对于图片音频和视频通常不会直接存放在数据库中,而是记录该文件的路径,然后通过路径去读取该文件

表格的创建

  1. //创建表的基本语法
  2. CREATE TABLE [IF NOT EXISTS] tbl_name(
  3. 字段名称 字段类型 [完整性约束条件],
  4. 字段名称 字段类型 [完整性约束条件],
  5. ...
  6. )ENGINE=存储引擎 CHARSET=编码方式 COLLATE=utf8_general_ci;
  7.  
  8. //举例(以下例子不包括约束性条件):
  9. CREATE TABLE IF NOT EXISTS user(
  10. id INT,
  11. username VARCHAR(20),
  12. password CHAR(32),
  13. email VARCHAR(50),
  14. age TINYINT,
  15. card CHAR(18),
  16. tel CHAR(11),
  17. salary FLOAT(8,2),
  18. married TINYINT(1),
  19. addr VARCHAR(100),
  20. sex ENUM('1','2','0')
  21. )ENGINE=INNODB CHARSET=UTF8;

表格的基本操作

  1. //查看数据库的表
  2. //如果只是查看当前的表,前提是当前数据库处于打开的状态下
  3. SHOW TABLES;
  4. //如果查看别的数据库的表,可以是当前无打开的数据库
  5. SHOW TABLES FROM (database_name)
  6. //也可以是
  7. SHOW TABLES IN (database_name)
  8. //查看表的详细信息
  9. SHOW CREATE TABLE table_name
  10. //查看表的结构
  11. DESC table_name
  12. //删除数据表
  13. DROP TABLE IF EXISTS table_name

复制表

  1. --复制一个表结构
  2. CREATE TABLE `新表名` like `旧表名`;
  3. --进行数据的复制
  4. INSERT INTO `新表名` SELECT * FROM `旧表名`; (注意:这里没有value或者是values

7、完整性的约束条件

A、UNSIGNED 无符号,没有负数,从0开始(一般放在not null 前面)

B、ZEROFILL 零填充,当显示长度不够的时候可以使用前补0的效果填充至指定长度,添加上这个属性后就相当于默认UNSIGNED这个属性了填充的顺序是从左边开始填充

C、NOT NULL 非空约束,也就是插入值的时候这个字段必需给值

D、PRIMARY KEY 主键,标识记录的唯一性,值不能重复,一个表只能有一个主键,并且自动禁止为空,实现表里字段的快速定位

E、UNIQUE KEY 唯一性,一个表中可以有多个字段是唯一索引,值不能重复,NULL除外(如果设置成unique,not null在使用效果上相当于Primary key)

F、AUTO_INCREMENT 自增长,只能用于数值列,而且配合索引使用,且一个表只有一个自增长的类型

G、FOREIGN KEY 代表外键约束

H、COMMENT 表示添加注释

I、 DEFAULT 默认值

测试主键

  1. --测试主键
  2. CREATE TABLE IF NOT EXISTS test_pri(
  3. id INT UNSIGNED PRIMARY KEY,
  4. --还可以使用以下两种方法指定
  5. --id INT UNSIGNED KEY,
  6. --PRIMARY KEY(id),
  7. username VARCHAR(20)
  8. )ENGINE=INNODB CHARSET=UTF8;
  9.  
  10. INSERT test_pri (id,username) VALUES (1,'first');
  11. INSERT test_pri (username) VALUES (2,'second');
  12. DESC test_pri;
  13. +----------+------------------+------+-----+---------+-------+
  14. | Field | Type | Null | Key | Default | Extra |
  15. +----------+------------------+------+-----+---------+-------+
  16. | id | int(10) unsigned | NO | PRI | NULL | |
  17. | username | varchar(20) | YES | | NULL | |
  18. +----------+------------------+------+-----+---------+-------+

复合主键表示用两个字段共同组成一个主键,那么就可以根据这两个字段进行对数据的定位,同时唯一性也就变成两个字段不能同时相同

  1. CREATE TABLE IF NOT EXISTS test_pri(
  2. id INT UNSIGNED,
  3. uid INT UNSIGNED,
  4. name VARCHAR(20),
  5. --定义复合组件只能用这种方式定义,也可以是整型与字符串的组合,比如uidVARCHAR类型的
  6. PRIMARY KEY(id,uid)
  7. )ENGINE=INNODB CHARSET=UTF8;
  8.  
  9. INSERT test_pri (id,uid,name) VALUES (1,2,'first');
  10. DESC test_pri;
  11. +-------+------------------+------+-----+---------+-------+
  12. | Field | Type | Null | Key | Default | Extra |
  13. +-------+------------------+------+-----+---------+-------+
  14. | id | int(10) unsigned | NO | PRI | NULL | |
  15. | uid | int(10) unsigned | NO | PRI | NULL | |
  16. | name | varchar(20) | YES | | NULL | |
  17. +-------+------------------+------+-----+---------+-------+

测试自增长

  1. CREATE TABLE IF NOT EXISTS test_inc(
  2. id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  3. name VARCHAR(20)
  4. )ENGINE=INNODB CHARSET=UTF8;
  5. --以下三种方式添加都可以实现主键的自增长
  6. INSERT test_inc (id,name) VALUES (DEFAULT,'first');
  7. INSERT test_inc (id,name) VALUES (NULL,'second');
  8. INSERT test_inc (name) VALUES ('third');
  9. DESC test_inc;
  10. +-------+------------------+------+-----+---------+----------------+
  11. | Field | Type | Null | Key | Default | Extra |
  12. +-------+------------------+------+-----+---------+----------------+
  13. | id | int(10) unsigned | NO | PRI | NULL | auto_increment |
  14. | name | varchar(20) | YES | | NULL | |
  15. +-------+------------------+------+-----+---------+----------------+
  16. SHOW CREATE TABLE test_inc;
  17. --输出如下表格
  18. +----------+-------------------------------------------------+
  19. | Table | Create Table |
  20. +----------+-------------------------------------------------+
  21. | test_inc | CREATE TABLE `test_inc` (
  22. `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  23. `name` varchar(20) DEFAULT NULL,
  24. PRIMARY KEY (`id`)
  25. ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 |
  26. +----------+-------------------------------------------------+

测试唯一索引

  1. CREATE TABLE IF NOT EXISTS test_unq(
  2. id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  3. --在定义唯一索引的时候可以省略KEY
  4. name VARCHAR(20) UNIQUE KEY NOT NULL,
  5. --UNIQUE KEY(name)
  6. phone VARCHAR(11) UNIQUE NOT NULL
  7. )ENGINE=INNODB CHARSET=UTF8;
  8.  
  9. DESC test_unq;
  10. +-------+------------------+------+-----+---------+----------------+
  11. | Field | Type | Null | Key | Default | Extra |
  12. +-------+------------------+------+-----+---------+----------------+
  13. | id | int(10) unsigned | NO | PRI | NULL | auto_increment |
  14. | name | varchar(20) | NO | UNI | NULL | |
  15. | phone | varchar(11) | NO | UNI | NULL | |
  16. +-------+------------------+------+-----+---------+----------------+

测试建立一个相对完整的用户表

  1. CREATE TABLE IF NOT EXISTS user(
  2. `id` INT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT '用户编号',
  3. `username` VARCHAR(20) NOT NULL COMMENT '用户名',
  4. `password` VARCHAR(60) NOT NULL COMMENT '用户密码',
  5. `email` VARCHAR(50) NOT NULL UNIQUE KEY COMMENT '用户邮箱',
  6. `age` TINYINT UNSIGNED NOT NULL COMMENT '用户年龄',
  7. `tel` VARCHAR(20) NOT NULL UNIQUE KEY COMMENT '用户手机',
  8. `addr` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '用户地址',
  9. `sex` ENUM('','','') NOT NULL DEFAULT '' COMMENT '性别,1代表男,2代表女,0代表保密',
  10. `card` VARCHAR(18) NOT NULL UNIQUE KEY COMMENT '用户身份证',
  11. `married` TINYINT(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT '是否已婚,0未婚1已婚',
  12. `salary` FLOAT(6,2) NOT NULL DEFAULT 0 COMMENT '薪水'
  13. )ENGINE=INNODB CHARSET=UTF8;

8、表结构的相关操作(字段的增删改)

增加和删除字段

  1. --添加字段,如果没有FIRST或者AFTER,那么默认是追加到表尾
  2. ALTER TABLE tab_name ADD 字段名 字段属性[完整性约束条件][FIRST|AFTER 字段名称]
  3. --添加多个字段的时候
  4. ALTER TABLE tab_name ADD 字段名 字段属性[完整性约束条件][FIRST|AFTER 字段名称],ADD 字段名 字段属性[完整性约束条件][FIRST|AFTER 字段名称];
  5. --例子,注意age是在username之前添加
  6. ALTER TABLE user ADD age TINYINT UNSIGNED NOT NULL AFTER id,ADD username VARCHAR(20) NOT NULL AFTER age;
  7. --删除字段
  8. ALTER TABLE tab_name DROP 字段名
  9. --删除多个字段
  10. ALTER TABLE tab_name DROP 字段名,DROP 字段名;
  11. --例子
  12. ALTER TABLE user DROP username,DROP age;

修改字段的属性类型(注意不包含索引的修改,索引在这里面修改是无效的)

  1. --修改字段的字段类型,字段属性
  2. ALTER TABLE tab_name MODIFY 字段名 字段类型[完整性约束性条件][FIRST|AFTER 字段名称]
  3. --同时修改多个字段的字段类型,字段属性
  4. ALTER TABLE tab_name MODIFY 字段名 字段类型[完整性约束性条件][FIRST|AFTER 字段名称],MODIFY 字段名 字段类型[完整性约束性条件][FIRST|AFTER 字段名称]
  5. --修改字段的名称,字段类型,字段属性
  6. ALTER TABLE tab_name CHANGE 字段名 新字段名[完整性约束性条件][FIRST|AFTER 字段名称]
  7. --同时修改多个字段的名称,字段类型,字段属性
  8. ALTER TABLE tab_name CHANGE 字段名 新字段名[完整性约束性条件][FIRST|AFTER 字段名称],CHANGE 字段名 新字段名[完整性约束性条件][FIRST|AFTER 字段名称]

添加和删除主键

  1. --添加主键
  2. ALTER TABLE tab_name ADD PRIMARY KEY 字段名
  3. --如果是添加复合主键,那么按如下书写
  4. ALTER TABLE tab_name ADD PRIMARY KEY (字段名1,字段名2)
  5. --删除主键,如果主键上有AUTO_INCREMENT这个属性,那么,要先删除AUTO_INCREMENT这个属性
  6. ALTER TABLE tab_name DROP PRIMARY KEY

添加和删除唯一索引

  1. --添加唯一索引,以下两种写法都可以
  2. ALTER TABLE tab_name ADD UNIQUE KEY 索引名(如uni_name) (字段名)
  3. ALTER TABLE tab_name ADD UNIQUE INDEX 索引名(如uni_name) (字段名)
  4. --例子(两种效果是一样的)
  5. ALTER TABLE test ADD UNIQUE INDEX uni_name (name);
  6. ALTER TABLE test ADD UNIQUE KEY uni_name (name);
  7. --也可以同时添加多个唯一索引
  8. ALTER TABLE tab_name ADD UNIQUE KEY 索引名(如uni_name) (字段名),ADD UNIQUE KEY 索引名(如uni_name) (字段名)
  9. --例子
  10. ALTER TABLE test ADD UNIQUE KEY uni_name (name),ADD UNIQUE INDEX uni_card(card)
  11.  
  12. --删除唯一索引,注意后面添加的是索引名,通常没有特别指定的,那么索引名就是字段名,可以能过SHOW CREATE TABLE tab_name 来查看
  13. ALTER TABLE tab_name DROP INDEX 索引名
  14. --删除多个唯一索引
  15. ALTER TABLE tab_name DROP INDEX 索引名,DROP INDEX 索引名
  16. -- 还有一种建立唯一索引的方法
  17. CREATE UNIQUR INDEX 索引名 ON 表名(字段名)

修改数据表名称

  1. --第一种方法,这里面的TO或者AS 是可以省略的
  2. ALTER TABLE tab_name RENAME [TO|AS] new_tab_name;
  3. --举例
  4. ALTER TABLE test RENAME nametest;
  5. --第二种方法,这里面的TO是不能省略的
  6. RENAME TABLE tab_name TO new_tab_name;
  7. --举例,这里只有TO
  8. RENAME TABLE nametest TO test;

重置自增长的序号

  1. --重置AUTO_INCREMENT
  2. ALTER TABLE tab_name AUTO_INCREMENT=1;

索引

在Mysql中常见的索引有四种:主键索引,唯一索引,普通索引(建立如下例子),全文索引(主要用于检索某个字段的关键字)

建立索引会让表的检索速度加快,但是会稍微损耗一些增删改的性能,不过这种损耗可以忽略不计

  1. -- 建立普通索引 一般索引名是ind_字段名 一张表可以有多个普通索引
  2. CREATE INDEX `INDEXNAME` ON `TABLENAME`(`字段名`)
  3. --方法二
  4. ALTER TABLE `表名` ADD INDEX `索引名` (`字段`)

索引的查询

  1. ——方法一
  2. SHOW INDEX FROM '表名' \G 表示换行显示
  3. ——方法二
  4. SHOW INDEXES FROM `表名`

9、mysql 的存储引擎

mysql 是由SQL 接口,解析器,优化器,缓存和存储引擎组成的。

  1. --通过SHOW ENGINES\G表出所有的引擎
  2. --引擎名称
  3. Engine: InnoDB
  4. --是否支持
  5. Support: YES
  6. --描述
  7. Comment: Supports transactions, row-level locking, foreign keys and encryption for tables
  8. --是否支持事务
  9. Transactions: YES
  10. --是否支持分布式交易处理的XA规范
  11. XA: YES
  12. --是否支持保存点,事务性回滚的时候回滚到所保存的点
  13. Savepoints: YES

MEMORY存储引擎:特点:1、数据保存在内存中,读写效率高。2、磁盘中只产生一个.frm的文件,只保存表结构。3、关闭mysql服务,数据会产生丢失。

CSV存储引擎:特点:1、所有的列不支持空值,所以都必需加上NOT NULL。2、CSV引擎不持索引也不支持分区。3、.csv文件是保存数据的原文件。4、.csm是保存元信息的文件保存表的状态及存储的数据量。

ARCHIVE存储引擎:特点:1、适合对于不经常使用,又删除不了的数据做归档处理。2、.frm文件是结构文件 .arz是数据文件。3、插入效率很高而且占用的空间小,只支持select和insert而不支持delete 和update语句。

MYISAM存储引擎:特点:1、默认的MYISAM会在磁盘中产生三个文件.frm文件是表结构文件,.myd是表示数据文件,.myi是表示索引文件。2、单表支持的最大的数据量的记录是2的64次方条记录。3、每个表可以建立64个索引,复合索引最多可以含16个字段,索引值最大长度是1000B。

InnoDB存储引擎:特点:1、设计遵循ACID原则,支持事务,具有从服务崩溃中恢复的能力,最大限度的保护用户的数据。2、支持行级锁,可以提升多用户并发时的读写性能。3、支持外键,保证数据的一致性和完整性。4、InnoDB拥有自己独立的缓冲池,常用数据和索引都在缓存中。5、对于INSERT、UPDATE、DELETE操作INNODB会使用一种change buffering的机制来自动优化,还可以提供一致性的读,并且还能够缓存变更的数据,减少磁盘I/O,提高性能。

(1)  MyISAM的存储引擎的介绍

  1. 执行速度快.
  2. 不支持事务,不支持外键
  3. 会产生碎片,需要定时进行optimize table 表名[举例]

  1. 如果我们的表不需要事务,则考虑使用MyISAM

(2)  InnoDB存储引擎

  1. 并发性好.
  2. 支持事务,支持外键
  3. 如果我们希望使用事务,则应该选择InnoDB.

(3)  Memory 存储引擎

  1. 数据在内存中
  2. 执行速度快.
  3. 当重启mysql后,数据丢失了/表结构还在.
  4. memory 表,可以优化项目,可以存放经常查询或者变化的数据,而且这些数据不需要入库,比如(用户的状态[离线,在线,发呆]) .

mysql 表结构及基本操作的更多相关文章

  1. 查看mysql表结构和表创建语句的方法(转)

    查看mysql表结构的方法有三种:1.desc tablename;例如:要查看jos_modules表结构的命令:desc jos_modules;查看结果:mysql> desc jos_m ...

  2. mysql:恢复mysql表结构

    mysql,frm格式恢复mysql表结构,以tuser.frm格式为例   新增数据库,如下,创建数据库名为ab   打开数据库,双击打开数据库   点右键新建表结构   新增表,里面只添加一个字段 ...

  3. MySQL表结构同步工具 mysql-schema-sync

    mysql-schema-sync 是一款使用go开发的.跨平台的.绿色无依赖的 MySQL 表结构自动同步工具.用于将线上(其他环境)数据库结构变化同步到测试(本地)环境! 可以解决多人开发,每人都 ...

  4. SQL SERVER 自动生成 MySQL 表结构及索引 的建表SQL

          SQL SERVER的表结构及索引转换为MySQL的表结构及索引,其实在很多第三方工具中有提供,比如navicat.sqlyog等,但是,在处理某些数据类型.默认值及索引转换的时候,总有些 ...

  5. [转载]github在线更改mysql表结构工具gh-ost

    GitHub正式宣布以开源的方式发布gh-ost:GitHub的MySQL无触发器在线更改表定义工具! gh-ost是GitHub最近几个月开发出来的,目的是解决一个经常碰到的问题:不断变化的产品需求 ...

  6. 【转】查看mysql表结构和表创建语句的方法

    转自:http://blog.csdn.net/business122/article/details/7531291 查看mysql表结构的方法有三种: 1.desc tablename; 例如: ...

  7. Sqoop将MySQL表结构同步到hive(text、orc)

    Sqoop将MySQL表结构同步到hive sqoop create-hive-table --connect jdbc:mysql://localhost:3306/sqooptest --user ...

  8. MySQL表结构为InnoDB类型从ibd文件恢复数据

    客户的机器系统异常关机,重启后mysql数据库不能正常启动,重装系统后发现数据库文件损坏,悲催的是客户数据库没有进行及时备份,只能想办法从数据库文件当中恢复,查找资料,试验各种方法,确认下面步骤可行: ...

  9. Mysql表结构定义及相关语法

    mysql语法及相关命令1.每个sql命令都需要使用分号来完成2.可以将一个命令写成多行3.可以通过\c来取消本行命令4.可以通过\g.exit.ctrl+c或者quit来退出当前客户端5.可以通过使 ...

随机推荐

  1. 采用VSPD、ModbusTool模拟串口、MODBUS TCP设备进行Python采集软件开发

    版权声明:本文为博主原创文章,欢迎转载,并请注明出处.联系方式:460356155@qq.com 不少仪器/设备都提供了数据采集的接口,其中不少是串口或网络的MODBUS/TCP协议. 串口是比较简单 ...

  2. rxjs一句话描述一个操作符(1)

    之前一直在写LINQ之类的东西,对于函数式的面向对象还是有一些功底,所以对于rxjs,感觉上不是很难,但是每次看完过几天就忘,还是记一下笔记吧,好记性不如烂笔头真不是盖的. 首先介绍几个重要的概念. ...

  3. [官网]Using PuTTY

    Previous | Contents | Next Chapter 3: Using PuTTY Section 3.1: During your session Section 3.1.1: Co ...

  4. 妙解Servlet四大域对象

    pageContext pageContext作用域为page(页面执行期). request request是表示一个请求,只要发出一个请求就会创建一个request,它的作用域仅在当前请求中有效. ...

  5. idea 配置 jdk tomcat

    https://blog.csdn.net/cxjsnail/article/details/80018519 1.  安装IntelliJ IDEA IDEA 对maven有完美的支持,有强大的语法 ...

  6. 关于sha1加密与md5加密

    1.区别 Hash,一般翻译做"散列",也有直接音译为"哈希"的,就是把任意长度的输入,变换成固定长度的输出,该输出就是散列值.这种转换是一种压缩映射,也就是, ...

  7. Hive 口袋手册

    2019-04-01 关键字:Hive 学习总结.Hive 基础 . Hive 进阶 .Hive 调优 . Hive 入门手册.Hive PDF 下载 本篇文章系本人就目前所掌握的知识对 Apache ...

  8. Java8之方法引用

    一.概述 在学习lambda表达式之后,我们通常使用lambda表达式来创建匿名方法.然而,有时候我们仅仅是调用了一个已存在的方法.如下: Arrays.sort(stringsArray,(s1,s ...

  9. 用不用lambda,这是一个问题

    用不用lambda,这是一个问题  mp.weixin.qq.com Sun在2009年开启了代号为“dolphin”的工程,计划在JDK1.7中加入lambda表达式.虚拟机模块化支持.动态语言支持 ...

  10. SQL学习指南第三篇

    再谈连接 外连接 之前的范例都是没有考虑条件可能无法为表中的所有行匹配的问题 左外连接与右外连接 SELECT a.account_id, a.cust_id, b.name FROM account ...