前言

MySQL被设计为一个可移植的数据库,具有性价比高,使用灵活,支持良好和应用广泛的特点。本篇面向MySQL数据库管理系统初学者,介绍了MySQL中最常用的内容。

目录

操作数据库和数据表

数据库

数据表

约束

数据类型和运算符

数据类型

运算符

算术运算符

比较运算符

逻辑运算符

位运算符

运算符的优先级

总结


操作数据库和数据表

数据库

  1. 创建数据库 :create database 数据库名;
  2. 查看数据库:
    show database;-- 查看所有数据库
    show create database 数据库名;-- 查看指定数据库
  3. 删除数据库:drop database 数据库名;
  4. 备份数据库:
    1.备份数据库(在DOS执行)命令行:mysqldump -u 用户名 -p -B数据库1 数据库2 数据库n >文件名.sql
    2.恢复数据库(在SQLyog执行):Source 文件名.sql
#创建一个名称为db01的数据库
-- 1.右键创建数据库(数据库名+utf8+utf8_general_ci)
-- 2.使用指令创建数据库-- 创建数据库指令
CREATE DATABASE db01
-- 创建一个使用utf8字符集的db02的数据库
CREATE DATABASE db02 CHARACTER SET utf8
-- 创建一个使用utf8字符集,并带校对规则的db03数据库
CREATE DATABASE db03 CHARACTER SET utf8 COLLATE utf8_bin
-- 校对规则 utf8_bin区分大小写 默认utf8_general_ci不区分大小写# 查看数据库
-- 查看所有数据库
SHOW DATABASE
-- 查看指定的数据库(db01)
SHOW CREATE DATABASE db01#删除前面创建的db01数据库
DROP DATABASE db01#备份数据库
-- 要在Dos下执行mysqldump指令(在mysql安装目录\bin)
mysqldump -u root -p -B db02 db03 > d:\\bak.sql
-- 备份库的表
mysqldump -u 用户名 -p密码 数据库 表1 表2 表n > d:\\文件名.sql#恢复数据库
-- (注:进入Mysql命令行再执行)
-- 方法1.命令行:mysql -u root -p=》source d:\\bak.sql
sorce d:\\bak.sql
-- 方法2.新建一个表,建备份.sql的内容全部复制到查询编辑器中全选执行# 注:给数据库,表等取名时,可使用`反引号`来规避关键字

数据表

创建数据表之前,需要使用“USER <数据库名>”指定操作在哪个数据库,没有选择会抛错。

创建表:create table <表名>{字段名1,数据类型[列约束条件][默认值],... ... [表约束条件]}

#指令创建表
-- 创建数据库
CREATE DATABASE db01;
USE db01;-- 使用该数据库
-- 创建表
CREATE TABLE `user`(id INT,`name` VARCHAR(255),`password` VARCHAR(255),`birthday` DATE)CHARACTER SET utf8 COLLATE utf8_bin ENGINE INNODB;
-- character set字符集 collate校对规则 engine存储引擎
-- field指定列表 datatype指定列类型(字段类型)
-- character set如不指定则为所在数据库字符集
-- collate如不指定则为所在数据库校对规则
-- engine引擎

查看表:DESC 表名;

-- 查看表基本结构
DESCRIBE `user`;
DESC `user`;-- 查看表详细结构
SHOW CREATE TABLE `user`;
# 在命令终端中,表名后加‘\G’参数会让显示结果更加直观,易于查看

修改表:alter table <旧表名> rename [to] <新表名>;

# 修改-- 修改表名
ALTER TABLE `user` RENAME TO tb1;
-- 修改字段的数据类型
ALTER TABLE tb1 MODIFY `name` CHAR(30);-- 修改字段名
ALTER TABLE tb1 CHANGE `name` users VARCHAR(20);-- 添加字段名
-- alter table 表名 add 字段名 数据类型 [约束条件][first |after 已存在字段名]
ALTER TABLE tb1 ADD class INT AFTER users;-- 删除字段
ALTER TABLE tb1 DROP class
-- 修改字段的排列位置
ALTER TABLE tb1 MODIFY users VARCHAR(20) FIRST;-- 更改表的存储引擎
ALTER TABLE db1 ENGINE=INNODB;

删除表:drop table[IF EXISTS] 表1,表2....;

DROP TABLE `user`;

注意:删除的时候要考虑清楚,一经删除,所有数据都没了。。。

约束

主键约束:用于唯一的标识表行的数据,当定义主键约束后,该列不能重复

基本语法:字段名 字段类型 primary key

使用细节:
1. primary key 不能重复并且不能为null;
2.一张表中最多只能由一个主键,但可以是复合主键

# 方式一:
CREATE TABLE t1(id INT PRIMARY KEY,-- 表示id列是主键`name` VARCHAR(32),email VARCHAR(32))
#方式二:
CREATE TABLE t3(id INT,`name` VARCHAR(32)PRIMARY KEY,emial VARCHAR(32)PRIMARY KEY(`name`))

外键约束:外键是用来在两个表的数据之间建立链接,可以是一行,也可以是多列。

基本语法:
[constraint<外键名>]foreign key 字段名1[,字段名2,...]
references <主表名>主键列1[主键列2,...]

使用细节:

  1. 外键指向的表的字段要求是primary key或unique;
  2. 表的类型是innodb才支持外键;
  3. 外键字段的类型必须要和主键字段的类型一致(长度可以不同)
  4. 外键字段的值必须在主键字段中出现过,或者为null(前提是外键字段允许为null);
  5. 一旦建立主外键的关系,数据不能随意删除;
#foreign key(外键)
-- 创建 主表 class
CREATE TABLE class(
id INT PRIMARY KEY, -- 班级编号
name VARCHAR(32) NOT NULL DEFAULT '')-- 创建 从表 stu
CREATE TABLE stu(
id INT PRIMARY KEY, -- 学生编号
name VARCHAR(32) NOT NULL DEFAULT '',
class_id INT,
-- 指定外键关系
FOREIGN KEY (class_id) REFERENCES class(id))INSERT INTO class
VALUES(100,'java'),(200,'C++')
SELECT * FROM classINSERT INTO stu
VALUES(1,'tom',100),(2,'jack',200)
SELECT * FROM stuINSERT INTO stu(3,'john',300)-- Error,300在主表中不存在

非空约束:如果在列上定义了not null,插入数据时必须为列提供数据;

基本语法:字段名 字段类型 not null

唯一约束:当定义了唯一约束后,该列值是不能重复的

基本语法:字段名 字段类型 unique

使用细节:
1.没有指定not null,则unique可以有多个null(unique not null使用效果类似于主键primary key)
2. 一张表可以有多个unique字段

默认约束:指定某列是默认值

基本语法:字段名  数据类型  default 默认值

CREATE TABLE t22(id INT UNIQUE, -- 表示id列不能重复`name` VARCHAR(32) NOT NULL,-- 表示name列不能为空class INT DEFAULT 1 -- 表示class默认为1)
INSERT INTO t22(id,`name`) VALUES(1,'mary')SELECT * FROM t22

check

用于强制行数据必须满足的条件

使用细节:Oracle和sql server均支持check ,但是mysql5.7目前还不支持check,只做语法校验,但不会生效

设置表的属性值自动增长

基本语法:字段名 数据类型 auto_increment;

使用细节:

  • 自增长一般和primary key配合使用,单独使用需要配合unique
  • 自增长默认从1开始,通过alter命令可修改
CREATE TABLE t3(id INT PRIMARY KEY AUTO_INCREMENT,-- 自增长`name` VARCHAR(32),sex VARCHAR(6) CHECK (sex IN('boy','girl')),sal DOUBLE CHECK(sal>3000 AND sal<4000))INSERT(1,'jack','mid',1)-- Error,第三个参数必须是boy或girlINSERT INTO t3 (`name`,sex,sal)VALUES('jack','boy',2500) -- id 默认为1,下次插入数据,id将自动+1

数据类型和运算符

数据类型

MySQL支持多种数据类型,主要有数值类型,日期/时间类型和字符串类型

MySQL数据类型

 数值类型

# 演示整型
-- tinyint演示范围 有符号-128~127,没有符号0~255
-- 没有指定unsigned,则TINYINT默认有符号
CREATE TABLE t4(id TINYINT UNSIGNED); -- 无符号
CREATE TABLE t3(id TINYINT,num INT(11)); -- int后面的11表示该数据类型指定的显示宽度,插入位数小于显示宽度以空格填充

二进制类型

#数值型(bit)的使用
-- bit(m) m在1-64,显示为二进制
-- 查询时仍然按照十进制数来查询
CREATE TABLE t1 (num BIT(8));
INSERT INTO t1 VALUES(255);
SELECT * FROM t1 WHERE num=255;

字符串类型

使用细节:

  1. 存放的数据是指字符,表示字节。
  2. char(size)是固定的长度,会造成空间浪费,但是查询速度快
  3. varchar(size)是变长,空间大小是实际占用空间分配(实际数据大小+存放内容长度1-3个字节)
#CHAR固定长度字符串 最大255字符
#VARCHAR(size) 0~65535字节,可变长度字符串 最大65532字节
#表的编码是utf8 varchar(size) size=(65535-3)/3=21844
CREATE TABLE t5(`name`CHAR(255));
CREATE TABLE t6(`name` VARCHAR(21844))

日期类型

#演示时间相关的类型
CREATE TABLE t7(birthday DATE , -- 生日job_time DATETIME , -- 记录年月日 时分秒login_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP); -- 登录时间(自动更新)

enum类型 【只能取单个值】
(字符串对象)语法格式(字段名 enum(’值1’,’值2’….))

set类型【可取多个值】
与enum类型相同,插入重复set列值就会自动删除重复的值

CREATE TABLE t9( enm ENUM('first','second','third'));
INSERT INTO t9 VALUES('first');CREATE TABLE t10( s SET('a','b','c','d'));
INSERT INTO t10 VALUES('a'),('a,b,c'),('c,a,d');

运算符

算术运算符

算术运算符用于各类数值运算,包括:加(+)减(-)乘(*)除(/)求余(%)。

注:数学运算中除数为0是无意义的,故返回结果的是NULL。

比较运算符

一个比较运算符的结果总是1、0或NULL,比较运算符经常在SELECT的查询条件子句中使用,用来查询满足条件的记录。

运算符

作用
= 等于
<=> 安全的等于(区别:可以判断NULL值)
<>  (!=) 不等于
<= 小于等于
>= 大于等于
> 大于
IS NULL 判断一个值是否为NULL
IS NOT NULL 判断一个值是否不为NULL
LEAST 在有两个或多个参数时,返回最小值
GREATEST 当有两个或多个参数时,返回最大值
BETWEEN AND 判断一个值是否落在两个值之间
ISNULL 与 IS NULL的作用相同
IN 判断一个值是IN列表中的任意一个值
NOT IN 判断一个值不是IN列表中的任意一个值
LIKE 通配符匹配【%:匹配任何数目的字符;_:只能匹配一个字符】
REGEXP 正则表达式匹配

逻辑运算符

在SQL中,所有逻辑运算符的求值所得结果均为TRUE、FALSE或NULL。

运算符 作用
NOT或者! 逻辑非[0→1;非零值→0;NULL→NULL]
AND或者&& 逻辑与[均为不为NULL的非零值→1;一个或多个操作数为0→0;其余为NULL]
OR或者|| 逻辑或[非NULL且任一个非零值→1,否则为0;一个为NULL,另一个非零→1,否则为NULL;两个均为NULL→NULL]
XOR 逻辑异或[任一为NULL→NULL;非NULL:均为非零值或零值→ 0;一零值一非零:1]

位运算符

位运算符是在二进制数上进行计算的运算符。位运算符会先将操作数编程二进制数,然后进行位运算,最后将计算结果从二进制转成十进制数。

运算符 作用
| 位或
& 位与
^ 位异或
<< 位左移
>> 位右移
~ 位取反,反转所有比特

运算符的优先级

运算符按优先级由低到高排列
优先级 运算符
最低 =(赋值运算符)、:=
||、OR
XOR
&&、AND
NOT
BETWEEN、CASE、WHEN、THEN、ELSE
=(比较运算符)、<=>、>=、>、<=、<、<>、!=、IS、LIKE、REGEXP、IN
|
&
<<、>>
-、+
*、/(DIV)、%(MOD)
-(负号)、~(位取反)
最高

无法确定优先级的情况下,可以使用圆括号“()”来改变优先级。

总结

本篇详细介绍了MySQL数据库的创建、查看、删除、备份;数据表的创建、查看、修改、删除、以及数据表的约束;几种数据类型以及运算符。感谢您垂阅此文,敬请斧正。

学会MySQL数据库【上】相关推荐

  1. B站《一天学会 MySQL 数据库》学习笔记

    B站<一天学会 MySQL 数据库>学习笔记 老司机带我飞 职场十字诀:思考.计划.行动.总结.反思 ​关注他 4 人赞同了该文章 登录和退出MySQL服务器 # 登录MySQL $ my ...

  2. 一个小时学会MySQL数据库

    致谢:一个小时学会MySQL数据库 一个小时学会MySQL数据库 目录 一.数据库概要 1.1.发展历史 1.1.1.人工处理阶段 1.1.2.文件系统 1.1.3.数据库管理系统 1.2.常见数据库 ...

  3. 一天学会MYSQL数据库_笔记

    视频是b站的: 一天学会MYSQL数据库 说是说一天,但我看了三四天,有点基础可能看的更加快.我直接从notepad中把自己做的笔记粘过来了~ 第一章 mysql建表约束 --mysql 学习笔记-- ...

  4. 【转载】一个小时学会MySQL数据库

    一个小时学会MySQL数据库 目录 一.数据库概要 1.1.发展历史 1.1.1.人工处理阶段 1.1.2.文件系统 1.1.3.数据库管理系统 1.2.常见数据库技术品牌.服务与架构 1.3.数据库 ...

  5. 在MySQL数据库上使用Quartz Scheduler入门

    这是一些简单的步骤,可帮助您使用Groovy在MySQL数据库上完全入门Quartz Scheduler. 以下脚本可让您使用外部文件快速尝试不同的Quartz配置设置. 第一步是使用表设置数据库. ...

  6. mysql管理数据 并上传至云端_怎样将MySQL数据库上传到服务器

    首先,需要将本地的数据库导出来,作为一个数据文件,以备稍后上传到服务器用,在本地登陆phpmyadmin控制面板: 登陆成功后,在左侧选择需要操作的数据库: 选择后,页面会自动刷新,然后再在右边点击[ ...

  7. mysql数据库上传ftp服务器中_备份部分mysql表并上传至指定ftp服务器目录中

    防伪码:忘情公子著 前几天领导安排了一个任务,让写一个脚本备份某mysql数据库中的部分表,并要将备份好的文件上传至某ftp服务器中,于是就有了以下的脚本 #!/bin/bash #Filename: ...

  8. mysql安全补丁如何处理_3分钟学会mysql数据库的逻辑架构原理

    这篇文章主要是从mysql数据库的逻辑架构来认识掌握mysql的原理.只要是稍微有一点计算机的相关知识相信都能看明白. 一.笼统的逻辑架构 先给出一张逻辑架构图,这张图是让你从宏观的角度来分析认识一下 ...

  9. 更换mysql_3分钟学会mysql数据库的逻辑架构原理

    这篇文章主要是从mysql数据库的逻辑架构来认识掌握mysql的原理.只要是稍微有一点计算机的相关知识相信都能看明白. 一.笼统的逻辑架构 先给出一张逻辑架构图,这张图是让你从宏观的角度来分析认识一下 ...

最新文章

  1. 关于page object(PO)模型的介绍
  2. oracle 10g em 乱码问题解决方法
  3. spring boot创建应用 端口冲突8080
  4. 这个瑞士的项目没法在今年三月申请,因为我需要护照并且这个项目在人文社科学员下面,886
  5. hiho一下 第六周 Hihocoder #1038 : 01背包
  6. GDCM:ReadSelectedTags的测试程序
  7. 分布式事务最终一致看这篇“大白话”的实践
  8. 每天五个java相关面试题(3)
  9. 如果去掉数学前后的空格_数学家们是怎么玩趣味拼图游戏的?
  10. 洛谷P1122最大子树和题解
  11. Hive之管理表 外部表 分区表
  12. matplotlib易混概念理解与画图详解
  13. 归并排序时间复杂度过程分析
  14. VS Code\unins000.exe创建报错解决方法
  15. MSN账号被盗,成功找回记
  16. dota2国服服务器延迟高,为何dota2国服经常崩溃 竟然是良心不分区的原因
  17. Deep Mind用AlphaZero开发国际象棋新规则-3!
  18. 用AI如何预测《权力的游戏》死亡名单?真是神了!
  19. 内外网隔离--网络准入控制系统有什么功能
  20. 串口调试助手使用说明

热门文章

  1. @value(“${}“)和@value(“#{}“)的区别
  2. java小球模拟平抛运动_实操项目跳跃的小球
  3. 天禾云,校园云盘内部结构安全性/权限设置的剖析
  4. ukey的密码学原理
  5. 改后缀名不能导致图片格式的转换,以.png后缀名的图片不一定是png图片
  6. C语言 怎样定义指针变量
  7. Chrome浏览器已开启自动保存密码,但仍无法自动保存密码的解决办法
  8. 怎样在计算机上进行高级搜索,怎么用中国知网的高级检索才能准确找到自己想要的文献?...
  9. 简要分析git作用及应公司业务要求分析,什么是响应式和虚拟dom面试题
  10. RFC3164 – BSD Syslog协议