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-数据库操作的主要内容,如果未能解决你的问题,请参考以下文章

如何在片段中填充列表视图?

MySQL触发器

MySql触发器使用

VSCode自定义代码片段——git命令操作一个完整流程

VSCode自定义代码片段15——git命令操作一个完整流程

VSCode自定义代码片段15——git命令操作一个完整流程