• MySQL:库操作 | 表操作



    全文约 4732 字,预计阅读时长: 14分钟


    启动与停止

    启动

    service mysqld start 		#使用linux命令service 启动
    
    /etc/inint.d/mysqld start	#使用 mysqld 脚本启动
    
    safe_mysqld&  				#使用 safe_mysqld 启动
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    停止

    service mysqld stop
    
    /etc/inint.d/mysqld stop
    
    mysqladmin shutdown
    
    • 1
    • 2
    • 3
    • 4
    • 5

    库的操作

    创建数据库

    • 只要在/etc/my.cnf配置过相关,就不用特别设置字符集和检验规则。

    创建数据库语法

    # CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [, create_specification] ...]
    
    # create_specification://创建规格
    	[DEFAULT] CHARACTER SET charset_name
    	[DEFAULT] COLLATE collation_name
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 说明:
      • CREATE DATABASE:大写的表示关键字;小写也可以。
      • [] 是可选项
      • CHARACTER SET: 指定数据库采用的字符集。数据的编码格式。
      • COLLATE: 指定数据库字符集的校验规则。比如有的规则搜索数据时,查询结果不区分大小写;有的则区分。

    创建数据库案例。说明:当我们创建数据库没有指定字符集和校验规则时,系统使用默认字符集:utf8,校验规则是:utf8_general_ ci。

    //创建名为 db1 的数据库
    # create database db1;
    
    //创建一个使用utf8字符集的 db2 数据库
    # create database db2 charset=utf8;
    
    //创建一个使用utf字符集,并带校对规则的 db3 数据库。
    # create database db3 charset=utf8 collate utf8_general_ci;
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 查看系统默认字符集以及校验规则
    # show variables like 'character_set_database';
    # show variables like 'collation_database';
    
    • 1
    • 2
    • 查看数据库支持的字符集:show charset;

    • 查看数据库支持的字符集校验规则:show collation;


    操纵数据库

    • 查看数据库:show databases;
    • 显示创建语句:show create database 数据库名;
      • MySQL 建议我们关键字使用大写,但是不是必须的。
      • 数据库名字的反引号,是为了防止使用的数据库名刚好是关键字。
      • /*!40100 default.... */ 这个不是注释,表示当前mysql版本大于4.01版本,就执行这句话。

    修改数据库

    • 对数据库的修改主要指的是修改数据库的字符集,校验规则。
    #  ALTER DATABASE db_name //语法
    [alter_spacification [,alter_spacification]...]
    
    # alter_spacification:
    	[DEFAULT] CHARACTER SET charset_name
    	[DEFAULT] COLLATE collation_name
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 实例:将 mytest 数据库字符集改成 gbk
    # mysql> alter database mytest charset=gbk;
    Query OK, 1 row affected (0.00 sec)
    # mysql> show create database mytest;
    +----------+----------------------------------------------------------------+
    | Database | Create Database |
    +----------+----------------------------------------------------------------+
    | mytest | CREATE DATABASE `mytest` /*!40100 DEFAULT CHARACTER SET gbk */ |
    +----------+----------------------------------------------------------------+
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    数据库删除

    • DROP DATABASE [IF EXISTS] db_ name;,执行以后:数据库内部看不到对应的数据库;对应的数据库文件夹被删除,级联删除,里面的数据表全部被删;不要随意删除数据库。

    备份和恢复

    备份

    # mysqldump -P3306 -u root -p 密码 -B 数据库名 > 数据库备份存储的文件路径 //语法
    
    # mysqldump -P3306 -u root -p123456 -B mytest > D:/mytest.sql //将mytest库备份到文件(退出连接)
    
    
    • 1
    • 2
    • 3
    • 4

    还原

    # mysql> source D:/mysql-5.7.22/mytest.sql;
    
    • 1

    备份一个数据库中的一个表

    # mysqldump -u root -p 数据库名 表名1 表名2 > D:/mytest.sql
    
    • 1

    同时备份多个数据库

    # mysqldump -u root -p -B 数据库名1 数据库名2 ... > 数据库存放路径
    
    //如果备份一个数据库时,没有带上-B参数, 在恢复数据库时,需要先创建空数据库,然后使用数据库,再使用source来还原。
    
    • 1
    • 2
    • 3

    查看连接情况

    # show processlist; //语法
    
    //示例:
    # mysql> show processlist;
    +----+------+-----------+------+---------+------+-------+------------------+
    | Id | User | Host | db | Command | Time | State | Info |
    +----+------+-----------+------+---------+------+-------+------------------+
    | 2 | root | localhost | test | Sleep | 1386 | | NULL |
    | 3 | root | localhost | NULL | Query | 0 | NULL | show processlist |
    +----+------+-----------+------+---------+------+-------+------------------+
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 可以告诉我们当前有哪些用户连接到我们的MySQL,如果查出某个用户不是你正常登陆的,很有可能你的数据库被人入侵了。以后发现自己数据库比较慢时,可以用这个指令来查看数据库连接情况。

    表的操作

    • 为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据。

    创建表

    //语法:
    # CREATE TABLE table_name (
    	field1 datatype,
    	field2 datatype,
    	field3 datatype
    ) character set 字符集 collate 校验规则 engine 存储引擎;
    
    //说明:
    # field12... 表示列名
    # datatype 表示列的类型
    # character set 字符集,如果没有指定字符集,则以所在数据库的字符集为准
    # collate 校验规则,如果没有指定校验规则,则以所在数据库的校验规则为准
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    创建表案例

    # create table users (
    	id int,
    	name varchar(20) comment '用户名',
    	password char(32) comment '密码是32位的md5值',
    	birthday date comment '生日'
    ) character set utf8 engine MyISAM; 
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 不同的存储引擎,创建表的文件不一样。users 表存储引擎是 MyISAM ,在数据目中有三个不同的文件,分别是:
      • users.frm:表结构
      • users.MYD:表数据
      • users.MYI:表索引
    • 创建一个engineinnodb的数据库,linux下,通过MySQL 默认的数据库存储目录/var/lib/mysql观察表文件。

    查看表结构

    • desc 表名;
      在这里插入图片描述
    # show create table 表名\G 
    //查看注册表结构时在每个类型后面的注释
    
    • 1
    • 2

    修改表

    在项目实际开发中,经常修改某个表的结构,比如字段名字,字段大小,字段类型,表的字符集类型,表的存储引擎等等。我们还有需求,添加字段,删除字段等等。这时我们就需要修改表。

    # ALTER TABLE tablename ADD (column datatype [DEFAULT expr][,column datatype]...);
    
    # ALTER TABLE tablename MODIfy (column datatype [DEFAULT expr][,column datatype]...);
    
    # ALTER TABLE tablename DROP (column);
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    添加记录、添加字段

    • 添加记录:在users表添加二条记录;
    • 添加字段:在users表添加一个字段,用于保存图片路径。插入新字段后,对原来表中的数据没有影响。
    
    # mysql> insert into users values(1,'a','b','1982-01-04'),(2,'b','c','1984-01-04');
    
    # mysql> alter table 表名 add 新增字段名 新增字段类型 comment '图片路径' after birthday;
    
    //结果展示:
    # mysql> desc users;
    +----------+--------------+------+-----+---------+-------+
    | Field | Type 		  | Null | Key  | Default| Extra |
    +----------+--------------+------+-----+---------+-------+
    | id 	| 	int(11)   | YES	 | 		 | NULL | 	 |
    | name  | varchar(20) | YES  | 		 | NULL | 	 |
    | password | char(32) | YES  |		 | NULL |	 |
    | birthday | date 	  |  YES |		 | NULL | 	 |
    | assets | varchar(100) | YES | 	 | NULL | 	 |
    +----------+--------------+------+-----+---------+-------+
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    修改字段类型:name,将其长度改成60。

    # mysql> alter table 表名 modify 要修改的字段名字 字段类型;
    
    # mysql> alter table users modify name varchar(60);
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    删除列:password列。注意:删除字段一定要小心,删除字段及其对应的列数据都没了。

    # mysql> alter table 表名 drop 要删除的列;
    
    # mysql> alter table users drop password;
    # mysql> desc users;
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    修改表名:修改为employee。

    # mysql> alter table 源表名 rename to 新表名;//to:可以省掉
    
    # mysql> alter table users rename to employee;
    # mysql> select * from employee;
    +------+------+------------+-------+
    | id | name | birthday | assets |
    +------+------+------------+-------+
    | 1 | a | 1982-01-04 | NULL |
    | 2 | b | 1984-01-04 | NULL |
    +------+------+------------+-------+
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    修改字段名字:将name列修改为xingming。–新字段需要完整定义

    # mysql> alter table 表名 change 原字段名字 新字段名字 字段类型; 
    
    # mysql> alter table employee change name xingming varchar(60); //--新字段需要完整定义
    
    # mysql> desc employee;
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述


    删除表

    # DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name] ...//语法
    
    # drop table t1;//示例
    
    • 1
    • 2
    • 3
    • 表的结构应该在动手创建以前就应该想好怎么设计,提前沟通好。不然当有大量用户时随意修改,严重影响上层的业务逻辑

    总结

    在这里插入图片描述

  • 相关阅读:
    逐字节讲解 Redis 持久化(RDB 和 AOF)的文件格式
    迎接“全全闪”时代 星辰天合发布星海架构和星飞产品
    17.Table Api基础概念讲解
    376. 机器任务
    Django与Ajax
    优漫动游设计解决了哪些问题
    【PPT】NET Conf China 2022,主题:C#在iNeuOS工业互联网操作系统的开发及应用
    记一次冲突:JsonSerialize注解标注的字段返回两次的错误
    程序人生:从小公司到一线大厂,薪资翻倍,我做到了...
    C++11的weak_ptr弱引用的智能指针
  • 原文地址:https://blog.csdn.net/WTFamer/article/details/126662363