mysql数据库知识总结-01

连接服务器

在命令行下输入:

mysql -h 127.0.0.1 -P 3306 -u root -p

注意:

  • 如果没有写 -h 127.0.0.1 默认是连接本地
  • 如果没有写 -P 3306 默认是连接3306端口号

1. 库/表的操作

创建数据库

语法:

CREATE DATABASE [IF NOT EXISTS] db_name 
[DEFAULT] CHARACTER SET charset_name 
[DEFAULT] COLLATE collation_name;

说明:

  • 大写的表示关键字
  • [] 是可选项
  • CHARACTER SET: 指定数据库采用的字符集
  • COLLATE: 指定数据库字符集的校验规则
  • 当我们创建数据库没有指定字符集和校验规则时,系统使用默认字符集:utf8,校验规则是:utf8_general_ ci

查看系统默认字符集以及校验规则

show variables like 'character_set_database'; 
show variables like 'collation_database';

查看数据库支持的字符集

show charset;
  • 字符集主要是控制用什么语言。比如utf8就可以使用中文。

查看数据库支持的字符集校验规则

show collation;

校验规则对数据库的影响

  • 不区分大小写,创建一个数据库,校验规则使用utf8_ general_ ci[不区分大小写]
  • 区分大小写,创建一个数据库,校验规则使用utf8_ bin[区分大小写]

使用数据库

use db_name;

创建数据库表

语法:

create table student( 
	id int, 
	name varchar(32), 
	gender varchar(2) 
)character set utf8 collate utf8_general_ci engine MyISAM;

说明:

  • character set 字符集,如果没有指定字符集,则以所在数据库的字符集为准
  • collate 校验规则,如果没有指定校验规则,则以所在数据库的校验规则为准

表中插入数据

insert into student (id, name, gender) values (1, '张三', '男'); 

查询表中的数据

select * from student;

结果排序

//根据name升序排序将student表排序输出
select * from student order by name;

查看表结构

desc 表名;

修改表

  • 现有如下一张users表
    在这里插入图片描述
  • 可以进行如下操作:
//在users表添加一个字段,用于保存图片路径
alter table users add assets varchar(100) comment '图片路径' after birthday;
//修改name,将其长度改成60
alter table users modify name varchar(60);
//删除password列
alter table users drop password;
//修改表名为employee
mysql> alter table users rename to employee;
//将name列修改为xingming
mysql> alter table employee change name xingming varchar(60); --新字段需要完整定义

删除表

DROP TABLE [IF EXISTS] tb_name;

查看数据库

show databases;

显示创建语句

show create database 数据库名;

修改数据库

语法:

ALTER DATABASE db_name 
[DEFAULT] CHARACTER SET charset_name 
[DEFAULT] COLLATE collation_name
  • 对数据库的修改主要指的是修改数据库的字符集,校验规则

数据库删除

DROP DATABASE [IF EXISTS] db_ name;

执行删除之后的结果:

  • 数据库内部看不到对应的数据库
  • 对应的数据库文件夹被删除,级联删除,里面的数据表全部被删

备份和恢复

备份 语法:

# mysqldump -P3306 -u root -p 密码 -B 数据库名 > 数据库备份存储的文件路径

还原:
在mysql程序中输入:

mysql> source 数据库备份存储的文件路径;

如何备份一张表?

# mysqldump -u root -p 数据库名 表名1 表名2 > 存放路径

如何同时备份多个数据库?

# mysqldump -u root -p -B 数据库名1 数据库名2 ... > 数据库存放路径

注意:

  • 如果备份一个数据库时,没有带上-B参数, 在恢复数据库时,需要先创建空数据库,然后再使用source来还原。

查看数据库连接情况

语法:

//可以告诉我们当前有哪些用户连接到我们的MySQL,
show processlist

2. 数据类型

数值类型

在这里插入图片描述

  • 整型可以指定是有符号的和无符号的,默认是有符号的。可以通过UNSIGNED来说明某个字段是无符号的。

小数类型

float

float[(m, d)] [unsigned] : M指定显示长度,d指定小数位数,占用空间4个字节
  • float(4,2)表示的范围是-99.99 ~ 99.99,MySQL在保存值时会进行四舍五入。

decimal

decimal(m, d) [unsigned] : 定点数m指定长度,d表示小数点的位数
  • decimal和float很像,但是有区别:
  • float和decimal表示的精度不一样
  • float表示的精度大约是7位
  • decimal整数最大位数m为65。支持小数最大位数d是30。如果d被省略,默认为0.如果m被省略,默认是10。
  • 如果希望小数的精度高,推荐使用decimal。

字符串类型

char

char(L): 固定长度字符串,L是可以存储的长度,单位为字符,最大长度值可以为255

varchar

varchar(L): 可变长度字符串,L表示字符长度,最大长度65535个字节
  • 关于varchar(len),len到底是多大,这个len值,和表的编码密切相关:
  • varchar长度可以指定为0到65535之间的值,但是有1 - 3 个字节用于记录数据大小,所以说有效字节数是65532。
  • 当我们的表的编码是utf8时,varchar(n)的参数n最大值是65532/3=21844[因为utf中,一个字符占用3个字节],如果编码是gbk,varchar(n)的参数n最大是65532/2=32766(因为gbk中,一个字符占用2字节)。

char和varcahr比较
在这里插入图片描述

  • 根据需求选择适合的类型,数据长度确定选择char,长度有变化选择varchar。
  • 定长的磁盘空间比较浪费,但是效率高。
  • 变长的磁盘空间比较节省,但是效率低。

日期和时间类型

常用的日期有如下三个:

  • datetime 时间日期格式 ‘yyyy-mm-dd HH:ii:ss’ 表示范围从1000到9999,占用八字节
  • date:日期 ‘yyyy-mm-dd’,占用三字节
  • timestamp:时间戳,从1970年开始的 yyyy-mm-dd HH:ii:ss格式和datetime完全一致,占用四字节

注意:

  • 添加数据时,时间戳自动补上当前
  • 更新该表任何数据时,所有时间戳都会更新成当前时间

enum和set

  • enum:枚举,“单选”类型;
  • 该设定只是提供了若干个选项的值,最终一个单元格中,实际只存储了其中一个值;而且出于效率考虑,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,3,…最多65535个;当我们添加枚举值时,也可以添加对应的数字编号。
  • set:集合,“多选”类型;
  • 该设定只是提供了若干个选项的值,最终一个单元格中,设计可存储了其中任意多个值;而且出于效率考虑,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,4,8,16,32,… 最多64个。
  • 例如创建votes表
create table votes( 
	username varchar(30), 
	hobby set('登山','游泳','篮球','武术'),
	gender enum('男','女')
);
  • 插入数据,特别需要注意set的插入
insert into votes values('雷锋', '登山,武术', '男'); 
insert into votes values('Juse','登山,武术',2);
  • 如果想查找所有喜欢登山的人
//此代码只能找到只喜欢登山的,而不能找出所有喜欢登山的
select * from votes where hobby='登山';
  • 此时需要使用集合查询函数:find_ in_ set
//这样才能找出所有喜欢登山的
select * from votes where find_in_set('登山', hobby);

3. 表的约束

(1)空属性

  • null(默认的)
  • not null(不为空)

(2)默认值

  • 语法:default 对应类型的默认值

(3)列描述

  • 语法:comment ‘xxx’
  • 列描述:comment,没有实际含义,专门用来描述字段,会根据表创建语句保存,用来给程序员或DBA来进行了解。
  • 通过desc是看不见注释信息的
  • 通过show create table tb_name; 是可以看见的

(4)zerofill

  • 语法: zerofill
  • 通过show create table tb_name; 命令可以看出来int的默认打印宽度为10
  • 设置zerofill属性后,如果宽度小于设定的宽度,自动填充0。
  • 要注意的是,这只是最后显示的结果,在MySQL中实际存储的并没有变,只是一种格式化输出而已。

(5)主键

  • primary key用来唯一的约束该字段里面的数据,不能重复,不能为空,一张表中最多只能有一个主键;主键所在的列通常是整数类型。

  • 创建表的时候直接在字段上指定主键

  • 也可以在所有字段之后,使用primary key(主键字段列表)来创建主键,如果有多个字段作为主键,可以使用复合主键。

  • 当表创建好以后,如果没有主键可以再次追加主键

alter table 表名 add primary key(字段列表)
  • 删除主键(只是删除字段的主键属性,并不会删除该字段)
alter table 表名 drop primary key;

(6)自增长

  • auto_increment:当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值+1操作,得到一个新的不同的值。通常和主键搭配使用,作为逻辑主键。
  • 自增长的特点:
    • 任何一个字段要做自增长,前提是本身是一个索引(key一栏有值)
    • 自增长字段必须是整数
    • 一张表最多只能有一个自增长
    • 例如:
mysql> create table tt21( 
	-> id int unsigned primary key auto_increment, 
	-> name varchar(10) not null default '' 
	-> ); 

mysql> insert into tt21(name) values('a'); 

mysql> insert into tt21(name) values('b'); 

mysql> select * from tt21; 
+----+------+ 
| id | name | 
+----+------+ 
|  1 | a    |  
|  2 | b    | 
+----+------+
  • 在插入后获取上次插入的AUTO_INCREMENT 的值(批量插入获取的是第一个值)
mysql > select last_insert_id(); 
+------------------+ 
| last_insert_id() | 
+------------------+ 
|                1 | 
+------------------+

(7)唯一键

  • 语法:unique
  • 一张表中有往往有很多字段需要唯一性,数据不能重复,但是一张表中只能有一个主键:唯一键就可以解决表中有多个字段需要唯一性约束的问题。
  • 唯一键的本质和主键差不多,唯一键允许为空,而且可以多个为空,空字段不做唯一性比较。

(8)外键

  • 外键用于定义主表和从表之间的关系:外键约束主要定义在从表上,主表则必须是有主键约束或unique约束。当定义外键后,要求外键列数据必须在主表的主键列存在或为null。
  • 语法:
foreign key (字段名) references 主表()
发布了161 篇原创文章 · 获赞 52 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/qq_42837885/article/details/103671506
今日推荐