mysql-数据库操作
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql-数据库操作相关的知识,希望对你有一定的参考价值。
数据库存储引擎
设置默认的存储引擎:
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: ALL
possible_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栏出现了MUL
desc 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: ref
possible_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;
以上是关于mysql-数据库操作的主要内容,如果未能解决你的问题,请参考以下文章