前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL常见的库操作,表操作,数据操作集锦及一些注意事项

MySQL常见的库操作,表操作,数据操作集锦及一些注意事项

作者头像
用户1214487
发布2018-01-24 10:35:09
9220
发布2018-01-24 10:35:09
举报
文章被收录于专栏:PythonPython

一 库操作(文件夹)

1 数据库命名规则

可以由字母、数字、下划线、@、#、$ 区分大小写 唯一性 不能使用关键字如 create select 不能单独使用数字 最长128位

2 数据库相关操作

创建库

create database 数据库名 ;    (注意要引号结尾)    (默认latin1)

在创建数据库的时候也可指定编码格式,如: create database 数据库名 charset utf8; 

选择数据库

use 数据库名    切换到指定数据库下 

查看库

show databases;     查看所有数据库(即文件夹)

show create database db1;  查看db1数据库

select database();    查看当前所在的数据库名称

select user();        查看登录用户

修改库

alter database db1 charset gbk;     将数据库的编码更改为gbk 

删除库

drop database db1;     删除数据库db1

如果不小心输入语法时写错了,在其末尾加\c 即可取消; 不小心加了‘时用\c取消不了,因为引号需要有一个配对的',所以要用'\c来取消

为mysql服务指定配置文件

代码语言:javascript
复制
#在mysql的解压目录下,新建my.ini,然后配置
[mysqld]
#跳过授权表
;skip-grant-tables    #ini文件中#和;都是注释


#指定端口,可以不指定,因为mysql默认端口就是3306
port=3306  

#指定数据库默认字符编码
character_set_server=utf8

#指定解压的目录
basedir=E:\mysql-5.7.19-winx64

#指定data目录
datadir=E:\my_data      #在mysqld --initialize时,就会将初始数据存入此处指定的目录,在初始化之后,启动mysql时,就会去这个目录里找数据,如果初始化后又将data指定为其他目录,则需要重新进行初始化操作,否则会报错

[client]
port=3306
default-character-set=utf8

#2. 针对客户端命令的全局配置,当mysql客户端命令执行时,下列配置生效
[client]
port=3306
default-character-set=utf8
user=root
password=123

#3. 只针对mysql这个客户端的配置,2中的是全局配置,而此处的则是只针对mysql这个命令的局部配置
[mysql]
;port=3306
;default-character-set=utf8
user=egon
password=4573


#!!!如果没有[mysql],则用户在执行mysql命令时的配置以[client]为准

#InnoDB 存储引擎 支持事务,其设计目标主要面向联机事务处理(OLTP)的应用。其 特点是行锁设计、支持外键,并支持类似 Oracle 的非锁定读,即默认读取操作不会产生锁。 从 MySQL 5.5.8 版本开始是默认的存储引擎。 InnoDB 存储引擎将数据放在一个逻辑的表空间中,这个表空间就像黑盒一样由 InnoDB 存储引擎自身来管理。从 MySQL 4.1(包括 4.1)版本开始,可以将每个 InnoDB 存储引擎的 表单独存放到一个独立的 ibd 文件中。此外,InnoDB 存储引擎支持将裸设备(row disk)用 于建立其表空间。 InnoDB 通过使用多版本并发控制(MVCC)来获得高并发性,并且实现了 SQL 标准 的 4 种隔离级别,默认为 REPEATABLE 级别,同时使用一种称为 netx-key locking 的策略来 避免幻读(phantom)现象的产生。除此之外,InnoDB 存储引擎还提供了插入缓冲(insert buffer)、二次写(double write)、自适应哈希索引(adaptive hash index)、预读(read ahead) 等高性能和高可用的功能。 对于表中数据的存储,InnoDB 存储引擎采用了聚集(clustered)的方式,每张表都是按 主键的顺序进行存储的,如果没有显式地在表定义时指定主键,InnoDB 存储引擎会为每一 行生成一个 6 字节的 ROWID,并以此作为主键。 InnoDB 存储引擎是 MySQL 数据库最为常用的一种引擎,Facebook、Google、Yahoo 等 公司的成功应用已经证明了 InnoDB 存储引擎具备高可用性、高性能以及高可扩展性。对其 底层实现的掌握和理解也需要时间和技术的积累。如果想深入了解 InnoDB 存储引擎的工作 原理、实现和应用,可以参考《MySQL 技术内幕:InnoDB 存储引擎》一书。 #MyISAM 存储引擎 不支持事务、表锁设计、支持全文索引,主要面向一些 OLAP 数 据库应用,在 MySQL 5.5.8 版本之前是默认的存储引擎(除 Windows 版本外)。数据库系统 与文件系统一个很大的不同在于对事务的支持,MyISAM 存储引擎是不支持事务的。究其根 本,这也并不难理解。用户在所有的应用中是否都需要事务呢?在数据仓库中,如果没有 ETL 这些操作,只是简单地通过报表查询还需要事务的支持吗?此外,MyISAM 存储引擎的 另一个与众不同的地方是,它的缓冲池只缓存(cache)索引文件,而不缓存数据文件,这与 大多数的数据库都不相同。 #NDB 存储引擎 2003 年,MySQL AB 公司从 Sony Ericsson 公司收购了 NDB 存储引擎。 NDB 存储引擎是一个集群存储引擎,类似于 Oracle 的 RAC 集群,不过与 Oracle RAC 的 share everything 结构不同的是,其结构是 share nothing 的集群架构,因此能提供更高级别的 高可用性。NDB 存储引擎的特点是数据全部放在内存中(从 5.1 版本开始,可以将非索引数 据放在磁盘上),因此主键查找(primary key lookups)的速度极快,并且能够在线添加 NDB 数据存储节点(data node)以便线性地提高数据库性能。由此可见,NDB 存储引擎是高可用、 高性能、高可扩展性的数据库集群系统,其面向的也是 OLTP 的数据库应用类型。 #Memory 存储引擎 正如其名,Memory 存储引擎中的数据都存放在内存中,数据库重 启或发生崩溃,表中的数据都将消失。它非常适合于存储 OLTP 数据库应用中临时数据的临时表,也可以作为 OLAP 数据库应用中数据仓库的维度表。Memory 存储引擎默认使用哈希 索引,而不是通常熟悉的 B+ 树索引。 #Infobright 存储引擎 第三方的存储引擎。其特点是存储是按照列而非行的,因此非常 适合 OLAP 的数据库应用。其官方网站是 http://www.infobright.org/,上面有不少成功的数据 仓库案例可供分析。 #NTSE 存储引擎 网易公司开发的面向其内部使用的存储引擎。目前的版本不支持事务, 但提供压缩、行级缓存等特性,不久的将来会实现面向内存的事务支持。 #BLACKHOLE 黑洞存储引擎,可以应用于主备复制中的分发主库。 MySQL 数据库还有很多其他存储引擎,上述只是列举了最为常用的一些引擎。如果 你喜欢,完全可以编写专属于自己的引擎,这就是开源赋予我们的能力,也是开源的魅 力所在。

二  表操作(文件)

1 表相关操作

操作前要先切换到一个数据库下:use db1

创建表

代码语言:javascript
复制
语法:
create table 表名(字段名1 类型[(宽度) 约束条件],字段名2 类型[(宽度) 约束条件]);

注意:
1. 在同一张表中,字段名是不能相同
2. 宽度和约束条件可选
3. 字段名和类型是必须的

如:

create table t1(id int, name varchar(50),sex enum('male','female'),age int(3));   创建表t1,其有两个id和name,sex,age四个字段,分别为int、varchar、enum、int类型

create table t2(id int,name char(10))engine=innodb default charset utf8;   创建t2并指定默认引擎和默认编码

查看表

show tables;      查看db1库下所有表名 show create table t1;  查看表t1的一些相关信息

desc t1;        查看表t1的结构

代码语言:javascript
复制
MariaDB [db1]> describe t1; #查看表结构,可简写为desc 表名
+-------+-----------------------+------+-----+---------+-------+
| Field | Type                  | Null | Key | Default | Extra |
+-------+-----------------------+------+-----+---------+-------+
| id    | int(11)               | YES  |     | NULL    |       |
| name  | varchar(50)           | YES  |     | NULL    |       |
| sex   | enum('male','female') | YES  |     | NULL    |       |
| age   | int(3)                | YES  |     | NULL    |       |
+-------+-----------------------+------+-----+---------+-------+


MariaDB [db1]> show create table t1\G; #查看表详细结构,可加\G

修改表

代码语言:javascript
复制
语法:
1. 修改表名
     alter table 表名 rename 新表名;

2. 增加字段
     alter table 表名 add 字段名  数据类型 [完整性约束条件…];  #新增加一个字段(默认增加在最后面)

     alter table 表名 add 字段名  数据类型 [完整性约束条件…],add 字段名   数据类型 [完整性约束条件…];  #增加多个字段

     alter table 表名 add 字段名1  数据类型 [完整性约束条件…] after 字段名2;   #将新增字段放在字段名2的后面
     alter table 表名 add 字段名1  数据类型 [完整性约束条件…] first;  #将新增字段放在所有字段的最前面
                            
   
                            
3. 删除字段
     alter table 表名 drop 字段名; 
                                  

4. 修改字段
     alter table 表名 modify  字段名 数据类型 [完整性约束条件…];    #修改字段数据类型
                          
     alter table 表名 change 旧字段名 新字段名 旧数据类型 [完整性约束条件…];        #修改字段名
                          
     alter table 表名 change 旧字段名 新字段名 新数据类型 [完整性约束条件…];      #修改字段名和数据类型
                        

示例:
1. 修改存储引擎
mysql> alter table service 
    -> engine=innodb;

2. 添加字段
mysql> alter table student10
    -> add name varchar(20) not null,
    -> add age int(3) not null default 22;
    
mysql> alter table student10
    -> add stu_num varchar(10) not null after name;                //添加name字段之后

mysql> alter table student10                        
    -> add sex enum('male','female') default 'male' first;          //添加到最前面

3. 删除字段
mysql> alter table student10
    -> drop sex;

mysql> alter table service
    -> drop mac;

4. 修改字段类型modify
mysql> alter table student10
    -> modify age int(3);
mysql> alter table student10
    -> modify id int(11) not null primary key auto_increment;    //修改为主键

5. 增加约束(针对已有的主键增加auto_increment)
mysql> alter table student10 modify id int(11) not null primary key auto_increment;
ERROR 1068 (42000): Multiple primary key defined

mysql> alter table student10 modify id int(11) not null auto_increment;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

6. 对已经存在的表增加复合主键
mysql> alter table service2
    -> add primary key(host_ip,port);        

7. 增加主键
mysql> alter table student1
    -> modify name varchar(10) not null primary key;

8. 增加主键和自动增长
mysql> alter table student1
    -> modify id int not null primary key auto_increment;

9. 删除主键
a. 删除自增约束
mysql> alter table student10 modify id int(11) not null; 

b. 删除主键
mysql> alter table student10                                 
    -> drop primary key;

alter table t1 add age int;            给表t1增加新字段age

alter table t1 modify name char(12);      将表t1的name字段的格式修改字符个数为12

alter table t1 rename t2;          将表t1名称修改为t2

删除表

drop table 表名;    

代码语言:javascript
复制
mysql> create database db1 charset latin1;
mysql> use db1;
mysql> create table t1(name varchar(20));
mysql> show create table t1; #查看表,发现表默认与数据db1的字符编码一致
mysql> insert into t1 values('林'); #插入中文出错,因为latin1不支持中文
ERROR 1366 (HY000): 
mysql> 

#解决方法一:删除库db1,重建db1,字符编码指定为utf8

#解决方法二:修改
mysql> alter table t1 charset utf8; #修改表t1的编码
mysql> insert into t1 values('林'); #虽然t1的编码改了,但是t1的字段name仍然是按照latin1编码创建的
ERROR 1366 (HY000): 
mysql> alter table t1 modify name varchar(20); #需要重新定义下字段name
mysql> insert into t1 values('林');
mysql> select * from t1;
+------+
| name |
+------+
| 林   |
+------+

ps:不要忘记将数据库编码也改成utf8,这样以后在该数据库下创建表时,都默认utf8编码了

#配置文件:http://blog.csdn.net/yipiankongbai/article/details/16937815
代码语言:javascript
复制
#1. 修改配置文件
[mysqld]
default-character-set=utf8 
[client]
default-character-set=utf8 
[mysql]
default-character-set=utf8

#mysql5.5以上:修改方式有所改动
    [mysqld]
    character-set-server=utf8
    collation-server=utf8_general_ci
    [client]
    default-character-set=utf8
    [mysql]
    default-character-set=utf8

#2. 重启服务
#3. 查看修改结果:
\s
show variables like '%char%'

复制表

代码语言:javascript
复制
复制表结构+记录 (key不会复制: 主键、外键和索引)
mysql> create table new_service select * from service;

只复制表结构
mysql> select * from t1 where 1=2;        //条件为假,查不到任何记录
Empty set (0.00 sec)

方法一:
mysql> create table t2 select * from t1 where 1=2;  
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

方法二:
mysql> create table t2 like t1;

2 表字段的数据类型

 http://www.cnblogs.com/huchong/p/7486467.html

3 表的约束性规则

 http://www.cnblogs.com/huchong/p/7486791.html

三  数据操作(记录)

一 插入数据insert

代码语言:javascript
复制
1. 插入完整数据(顺序插入)
    语法一:
    insert into 表名(字段1,字段2,字段3…字段n) values(值1,值2,值3…值n);

    语法二:
    insert into 表名 values (值1,值2,值3…值n);

2. 指定字段插入数据
    语法:
    insert into 表名(字段1,字段2,字段3…) values (值1,值2,值3…);

3. 插入多条记录
    语法:
    insert into 表名 values
        (值1,值2,值3…值n),
        (值1,值2,值3…值n),
        (值1,值2,值3…值n);
        

二 更新数据update

代码语言:javascript
复制
语法:
    update 表名 set
        字段1=值1,
        字段2=值2,
        where condition;

示例:
    update mysql.user set password=password(‘123’) 
        where user=’root’ and host=’localhost’;

三  删除数据delete

代码语言:javascript
复制
语法:
    delete from 表名 where CONITION;

示例:
    delete from mysql.user where password=’’;

四 查询数据select

单表查询:点击此处

多表查询:点击此处

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-09-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一 库操作(文件夹)
    • 1 数据库命名规则
      • 2 数据库相关操作
        • 创建库
        • 选择数据库
        • 查看库
        • 修改库
        • 删除库
      • 3 为mysql服务指定配置文件
      • 二  表操作(文件)
        • 1 表相关操作
          • 创建表
          • 查看表
          • 修改表
          • 删除表
          • 复制表
        • 2 表字段的数据类型
          • 3 表的约束性规则
          • 三  数据操作(记录)
            • 一 插入数据insert
              • 二 更新数据update
                • 三  删除数据delete
                  • 四 查询数据select
                  相关产品与服务
                  云数据库 SQL Server
                  腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档