本文共 4439 字,大约阅读时间需要 14 分钟。
设置默认的存储引擎:
vim /etc/my.conf[mysqld]default_storage_engine= InnoDB;
查看mysql支持的存储引擎:
show engines;
查看当前默认的存储引擎:
show variables like '%storage_engine%';
查看库中所有表使用的存储引擎
Show table status from db_name;
查看库中指定表的存储引擎
show table status like ‘tb_name‘;show create table tb_name;
设置表的存储引擎:
CREATE TABLE tb_name(... ) ENGINE=InnoDB;ALTER TABLE tb_name ENGINE=InnoDB;
必须以字母开头可包括数字和三个特殊字符(# _ $)不要使用MySQL的保留字同一database(Schema)下的对象不能同名
create database if not exists newdb; if not exists:条件判断,如果不存在就创建数据库创建一个默认字符集为utf8的数据库create database db default character set utf8;create database db default collate 'utf8_general_ci';
查看一个数据库创建时的默认字符集
show create database newdb;+----------+------------------------------------------------------------------+| Database | Create Database |+----------+------------------------------------------------------------------+| newdb | CREATE DATABASE `newdb` /*!40100 DEFAULT CHARACTER SET latin1 */ |+----------+------------------------------------------------------------------+
查看支持所有字符集
SHOW CHARACTER SET;
查看支持所有排序规则
SHOW COLLATION;
语法:ALTER database 数据库名 修改的属性 ...修改指定数据库默认字符集alter database db default character set utf8;
drop database if exists newdb; if exists:条件判断,如果不存在就创建数据库
desc 表名;
show table status from db
全新创建表
CREATE TABLE [IF NOT EXISTS] '表名' (字段名1 类型 修饰符, 字段名2 类型 修饰符, ...)
基于现有表创建新表,主键会丢失
create table 新表名 select * from 旧表名;
基于现有表数据插入到新表,新表结构必须与旧表一致
insert into db select * from mysql.user;
所有类型:•NULL 数据列可包含NULL值•NOT NULL 数据列不允许包含NULL值•DEFAULT 默认值•PRIMARY KEY 主键•UNIQUE KEY 唯一键•CHARACTER SET name 指定一个字符集数值型•AUTO_INCREMENT 自动递增,适用于整数类型•UNSIGNED 无符号
示例
create table students -> (id int unsigned not null primary key, -> name varchar(20) not null, -> age tinyint unsigned);desc students;+-------+---------------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+---------------------+------+-----+---------+-------+| id | int(10) unsigned | NO | PRI | NULL | || name | varchar(20) | NO | | NULL | || age | tinyint(3) unsigned | YES | | NULL | |+-------+---------------------+------+-----+---------+-------+取值范围如果加了unsigned,则最大值翻倍,如tinyint unsigned的取值范围为(0~255)
select user as 用户,host as 主机 from mysql.user;+--------+-----------+| 用户 | 主机 |+--------+-----------+| hunk3 | % || root | 127.0.0.1 |
优点:提高查询速度
缺点:占用额外空间,影响插入速度
索引实现在存储引擎
查看表上的索引
SHOW INDEXES FROM [db_name.]tbl_name;
在没有索引前,找到RAFAH记录一共找了4321行
explain select * from city where NAME='RAFAH'\G;*************************** 1. row *************************** id: 1 select_type: SIMPLE table: city type: ALLpossible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 4321 查找了多少行 Extra: Using where
创建索引
create index 索引名 on 表名(需要索引的字段)create index index_name on city(name);*************************** 3. row *************************** Table: city Non_unique: 1 Key_name: index_name 这里是索引名 Seq_in_index: 1 Column_name: Name Collation: A Cardinality: 184 Sub_part: NULL Packed: NULL Null: Index_type: BTREE Comment: Index_comment: 同时,查看表结构的时候,发现在Name中的key栏出现了MULdesc city -> ;+-------------+----------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+-------------+----------+------+-----+---------+----------------+| ID | int(11) | NO | PRI | NULL | auto_increment || Name | char(35) | NO | MUL | | || CountryCode | char(3) | NO | MUL | | || District | char(20) | NO | | | || Population | int(11) | NO | | 0 | |+-------------+----------+------+-----+---------+----------------+
利用了索引之后
explain select * from city where NAME='RAFAH'\G;*************************** 1. row *************************** id: 1 select_type: SIMPLE table: city type: refpossible_keys: index_name key: index_name key_len: 35 ref: const rows: 1 查找了一行 Extra: Using index condition
drop index 索引名 on 表名drop index index_name on city;
转载于:https://blog.51cto.com/191226139/2092002