MySQL-class
1.数据库和SQL概念
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它的产生距今已有六十多年。随着信息技术和市场的发展,数据库变的无处不在:它在电子商务、银行系统等众多领域都被广泛使用,且成为其系统的重要组成部分。
数据库用于记录数据,使用数据库记录数据可以表现出各种数据间的联系,也可以很方便地对数据进行增、删、改、查等操作
结构化查询语言(Structured Query Language)简称SQL,是上世纪70年代由 IBM 公司开发,用于对数据进行操作的语言,更详细说,SQL是一种数据库查询和程序设计语言,用于存储数据以及查询、更新和管理关系数据库系统,同时也是数据库脚本文件的拓展名。
2.MySQL 安装
2.1安装之前先检查
先要检查系统是否已经安装了 MySQL,输入命令尝试打开 MySQL服务:
sudo service mysql start
输入后如果出现Failed to start mysql.service:Unit mysql.service not found
则说明系统中没有安装 MySQl,则需要继续安装。
2.2Ubuntu Linux 安装配置 MySQL
在 Ubuntu 上安装MySQL,最简单的方式是在线安装,只需要几行简单的命令:
安装MySQL服务端、核心程序
sudo apt-get install mysql-server
安装MySQL客户端
sudo apt-get install mysql-client
在安装的过程中会提示确认输入 YES ,输入 root 用户密码,安装结束后,用命令验证是否安装并启动成功:
sudo nerstat -tap z| grep mysql
也可以根据自己的需求,用vi/vim 修改MySQL的配置文件(my.cmf),使用命令:
sudo vi /etc/mysql/my.cnf
2.3尝试打开 MySQL
使用以下命令打开 MySQL 服务并使用 root 用户登录:
启动 MySQL 服务
sudo service mysql start
使用root用户登录,输入密码
mysql -u root -p
执行成功,输入密码进入
使用命令 show databases
;,查看数据库(分号不能漏掉)
连接数据库语句格式为:use <数据库名>
3.MySQL 数据库管理
3.1 创建数据库
在MySQL中,创建数据库的语法格式如下:
CREATE DATABASE | SCHEMA [IF NOT EXISTS] db_name
[[DAFAULT] CHARACTER SET charset_name]
[[DEFAULT] COLLATE collation_name];
CREATE DATABASE | SCHEMA
是创建数据库的命令。在 MySQL 中,SCHEMA 也指数据库IF NOT EXISTS
的作用是创建的数据库名已经存在时,会给出错误信息。创建数据库时,为了避免和已有的数据库重名,可以加上IF NOT EXISTS
db_name
是数据库名[DAFAULT] CHARACTER SET charset_name]
是指为数据库设置默认字符集,其中"charset_name"可以替换为数据库名[DEFAULT] COLLATE collation_name]
是指为数据库的默认字符集设置默认的校对规则。
如果在创建数据库时,省略了上述字符集和校对规则的设置,MySQL 将采用当前服务器在数据库级别上的默认字符集和默认校对规则。
3.2 查看数据库
查看数据库的语法格式:
SHOW CREATE DATABASE db_name;
3.3 修改数据库
数据库创建后,用户可以根据需要修改数据库的参数。如果MySQL的默认引擎是 InnoDB ,则无法修改数据库名,只能修改字符集和校对规则。
修改数据库的语法格式:
ALTER DATABASE | SCHEMA db_name
[DEFAULT] CHARACTER SET charset_name
[DEFAULT] COLLATE collation_name;
注意:用户必须由修改数据库的权限,才能使用 ALTER DATABASE
命令修改数据库。
修改数据库之后,可以通过 SHOW CREATE DATABASE
命令来查看修改之后的相关信息。
3.4 删除数据库
删除数据库是指在数据库系统中删除已经存在的数据库,删除成功之后,原本分配的空间会被收回。删除数据库的语法:
DROP DATABASE [IF EXISTS] db_name;
4. MySQL 数据表管理
用SQL命令在teaching数据库中建立学生表s
CREATE TABLE `student` (
`sno` char(10) COLLATE utf8_bin NOT NULL COMMENT '学号',
`sn` varchar(45) COLLATE utf8_bin NOT NULL COMMENT '姓名',
`sex` enum('男','女') COLLATE utf8_bin NOT NULL DEFAULT '男' COMMENT '性别',
`age` int NOT NULL COMMENT '年龄',
`maj` varchar(45) COLLATE utf8_bin NOT NULL COMMENT '专业',
`dep` varchar(45) COLLATE utf8_bin NOT NULL COMMENT '院系',
PRIMARY KEY (`sno`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin COMMENT='学生信息表';
4.1 定义表约束
4.1.1 NULL/NOT NULL 约束(非空约束)
NULL:允许为空,表示"不知道""不确定"
NOT NULL:不允许为空,表示字段中不允许出现空值。当某一字段一定要输入值才能有意义时,可以设置此字段为 NOT NULL。语法如下
<字段名> <数据类型> [NULL | NOT NULL]
4.1.2 UNIQUE
UNIQUE 约束指所有记录中字段的值不能重复,用于保证数据在某一字段或多个字段的组合上取值唯一。定义列约束语法如下:
<字段名> <数据类型> UNIQUE
UNIQUE 用于定义表约束时,语法如下:
UNIQUE (<字段名>[{,<字段名>}])
说明:
- 一个表中可以允许有多个 UNIQUE 约束,UNIQUE 约束可以定义在多个字段上
- 使用 UNIQUE 约束的字段允许 NULL 值
- UNIQUE 约束用于强制在指定字段上创建一个 UNIQUE 索引,默认为非聚集索引
4.1.3 PRIMARY KEY 约束(主键约束)
PRIMARY KEY 约束用于定义基本表的主码,起唯一标识作用,保证数据表中记录的唯一性。其值不能为 NULL、不能重复,以此来保证实体的完整性。一张表只能有一个 PRIMARY KEY 约束,且其可以作用于一字字段,也可与作用于多个字段的组合。
PRIMARY KEY 既可以约束列,又可以约束表。PRIMARY KEY 用于定义列约束时,语法:<字段名> <数据类型> PRIMARY KEY
;PRIMARY KEY 用于定义表约束时,即将某一些字段的组合定义为主码时,语法: [CONSTRAINT <约束名>] PRIMARY KEY (<字段名> [{,字段名}])
说明:PRIMARY KEY 约束与 UNIQUE 约束类似,通过建立唯一索引来保证基本表在主码字段取值的唯一性;区别:
- 在一个基本表中只能定义一个 PRIMARY KEY 约束,但可以定义多个 UNIQUE 约束
- 对于指定为 PRIMARY KEY 的一个字段或多个字段的组合,其实任何一个字段都不能出现 NULL 值,而对于 UNIQUE 所约束的唯一码,允许为 NULL,但是只能有一个 NULL 值
- 不能为同一个字段或一组字段,既定义 UNIQUE 约束,又定义 PRIMARY KEY 约束
4.1.4 FOREIGN KEY 约束(外码约束)
FOREIGN KEY 约束用于在两个数据表 A 和 B 之间建立连接。指定 A 表中某一个字段或几个字段作为外码,取其值是 B 表中某一个主码值或唯一码值,或取空值。语法格式如下:
[CONSTAINT <约束名> ] FOREIGN KEY (<从表A中字段名>[{,<从表A中字段名>}])
REFERENCES <主表B表名> (<主表B中的字段名>[{,<主表B中字段名>}])
[ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION}]
[ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION}]
4.1.5 CHECK 约束(检查约束)
CHECK 约束用来检查数据表中字段值所允许的范围,如月份只能输入整数,而且是限定在1~12的整数。CHECK 约束通过限制输入值强制域的完整性,在更新表中数据的时候,系统会检查更新后的数据是否满足CHECK 约束中的限定条件
CREATE TABLE 'sc_check'(
'sno' CHAR(10) NOT NULL,
'cno' CHAR(10) NOT NULL,
'score' DECTMAL(5,2) CHECK(score>=0 AND score<=100),
PRIMARY KEY('sno','cno')
)ENGINE=InnoDB DEFAULT CHARSET=UTF8mb4;
4.2 修改数据表
4.2.1 ADD
ADD 用于增加新字段和完整性约束,其语法格式如下:
ALTER TABLE <表名> ADD [<新字段名> <数据类型>] [<完整性约束定义>] [FIRST | AFTER 已有字段];
其中,"FIRST" 为可选项,若使用,则将新添加的字段设置为表的第一个字段; "AFTER" 为可选项,若使用,则将新添加的字段添加到指定的"已有字段名" 只有
例如:在学生表中增加一个班号class_no
字段
ALTER TABLE student ADD class_no VARCHAR(6);
在学生表中,在年龄age
字段后增加一个家庭住址 address 字段
ALTER TABLE student ADD address VARCHAR(20) AFTER age;
4.2.2 RENAME
RENAME 用于修改表名,其语法格式如下:
ALTER TABLE <旧表名> RENAME [TO] <新表名>
例如:把学生表s的名称改为student
ALTER TABLE S RENAME student;
4.2.3 CHANGE
CHANGE 用于修改字段名,其语法格式如下:
ALTER TABLE <表名> CHANGE <旧字段名> <新字段名> <新数据类型>
例如:把学生表 student 中的字段名 sn 改成 sname
ALTER TABLE student CHANGE sn sname VARCHAR(50);
4.2.4 MODIFY
MODIFY 可用于修改字段数据类型和字段排序,其语法格式如下:
ALTER TABLE <表名> MODIFY <字段名1><数据类型> [FIEST|AFTER 字段名2];
其中,修改字段数据类型时,"<数据类型>"指修改后字段的新数据类型。在修改字段排序时,若使用 FIRST ,则将"字段名1"修改为表的第一个字段;若使用 AFTER ,则将"字段名1"插入"字段名2"后
例如:把学生表 student 中姓名 sn 的数据类型由 VARCHAR(45) 改成 CHAR(30)
ALTER TABLE student MODIFY sn CHAR(30);
把学生表 student 中的年龄 age 插入到性别 sex 之前
ALTER TABLE student MODIFY sex ENUM('男','女') AFTER age;
4.2.5 ENGINE
ENGIEN 用于修改表的存储引擎,其语法格式如下:
ALTER TABLE <表名> ENGINE=<修改后存储引擎名>
例如:把学生表 student 的存储引擎改为 MYISAM
ALTER TABLE student ENGINE=MyISAM;
4.2.6 DROP
DROP 用于修改字段和完整性约束
删除字段的语法格式如下:
ALTER TABLE <旧表名> DROP <字段名>
例如:删除学生表 student 中新添加的字段 class_no 和 address
ALTER TABLE student DROP class_no,DROP address;
删除完整性的约束语法如下
ALTER TABLE <表名> DROP CONSTRAINT <约束名>
例如:删除学生表 student 中的 CHECK 约束 s_chk
ALTER TABLE student DROP CONSTRAINT s_chk;
4.3 删除数据表
在 MySQL
中,使用SQL
中的 DROP TABLE
语句可以删除一个或多个表,语法格式如下:
DROP TABLE [IF EXISTS] <表名>
其中 IF EXISTS
为可选项,用于删除前判断被删除的表是否存在,若不存在,DROP TABLE
语句可以顺利执行,但会发出警告。若不加 IF EXISTS
,且被删除的别不存在,则 MySQL
会报错
例如:删除学生表 student
DROP TABLE IF EXISTS student;
4.4 查看数据表
4.4.1 查看已创建的数据表
创建好数据表之后,可以通过 SHOW TABLES
语句来查看数据库中已经创建的数据表
4.4.2 查看数据表结构
使用 SHOW CREATE TABLE
语句可以查看表的详细信息
5. 数据表中数据的操纵
5.1 向数据表中添加数据
在数据表中添加一条记录的语法格式如下:
INSERT|REPLACE INTO <表名> [(<字段1>[,<字段2>...])] VALUES (<值>);
其中,<表名>是指要添加新纪录的表;<字段n>是可选项,指定待添加数据的字段; VALUES
字句指定待添加数据的具体位值。
例如:分为使用 INSERT 和 REPLACE 语句在学生表中 student 添加一条学生记录(学号为"s9",姓名为"郑东",性别为"女",年龄为"21",专业为"计算机",院系为"信息学院")
INSERT|REPLACE INTO student(sno,sn,age,sex,maj,dept) VALUE('s9','郑东',21,'女','计算机','信息学院');
5.2 修改数据表中数据
使用 SQL
语句修改数据表中数据的语法格式如下:
UPDATE <表名> SET <字段名>=<表达式>...WHERE <条件>
其中<表名>指要修改的表; SET
字句给出要修改的字段及其修改后的值; WHERE
字句指定待修改的记录应当满足的条件, WHERE
字句省略时,修改表中的所有记录
例如:把刘洋老师转到工学院
UPDATE student SET dep='工学院' WHERE tn='刘洋';
5.3 删除数据表中数据
使用 SQL
语句删除数据表中数据的语法格式如下:
DELETE FROM <表名> [WHERE <条件>]
其中,<表名>指要删除数据的表; WHERE
字句指定待删除的记录应当满足的条件, WHERE
字句省略时,数据库系统会删除表中所有记录
例如:删除成绩为90.5分的记录
DELETE FROM student WHERE score=90.5;
MySQL-class的更多相关文章
- Hadoop 中利用 mapreduce 读写 mysql 数据
Hadoop 中利用 mapreduce 读写 mysql 数据 有时候我们在项目中会遇到输入结果集很大,但是输出结果很小,比如一些 pv.uv 数据,然后为了实时查询的需求,或者一些 OLAP ...
- mysql每秒最多能插入多少条数据 ? 死磕性能压测
前段时间搞优化,最后瓶颈发现都在数据库单点上. 问DBA,给我的写入答案是在1W(机械硬盘)左右. 联想起前几天infoQ上一篇文章说他们最好的硬件写入速度在2W后也无法提高(SSD硬盘) 但这东西感 ...
- LINUX篇,设置MYSQL远程访问实用版
每次设置root和远程访问都容易出现问题, 总结了个通用方法, 关键在于实用 step1: # mysql -u root mysql mysql> Grant all privileges o ...
- nodejs进阶(6)—连接MySQL数据库
1. 建库连库 连接MySQL数据库需要安装支持 npm install mysql 我们需要提前安装按mysql sever端 建一个数据库mydb1 mysql> CREATE DATABA ...
- MySQL高级知识- MySQL的架构介绍
[TOC] 1.MySQL 简介 概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而 ...
- 闰秒导致MySQL服务器的CPU sys过高
今天,有个哥们碰到一个问题,他有一个从库,只要是启动MySQL,CPU使用率就非常高,其中sys占比也比较高,具体可见下图. 注意:他的生产环境是物理机,单个CPU,4个Core. 于是,他抓取了CP ...
- 我的MYSQL学习心得(一) 简单语法
我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...
- Entity Framework Core 实现MySQL 的TimeStamp/RowVersion 并发控制
将通用的序列号生成器库 从SQL Server迁移到Mysql 遇到的一个问题,就是TimeStamp/RowVersion并发控制类型在非Microsoft SQL Server数据库中的实现.SQ ...
- Docker笔记一:基于Docker容器构建并运行 nginx + php + mysql ( mariadb ) 服务环境
首先为什么要自己编写Dockerfile来构建 nginx.php.mariadb这三个镜像呢?一是希望更深入了解Dockerfile的使用,也就能初步了解docker镜像是如何被构建的:二是希望将来 ...
- 当忘记mysql数据库密码时如何进行修改
因为长时间没有使用数据库了,或者把密码改完之后就忘了数据库密码,不能正常进入数据库,也无法修改密码,有一个简单的常用修改密码方式: 1.首先找到和打开mysql.exe和mysqld.exe所在的文件 ...
随机推荐
- Redis事件机制(未写完)
Redis服务器是一个事件驱动程序,服务器需要处理以下两类事件: 文件事件:Redis通过套接字与客户端连接,文件事件是服务器对套接字操作的抽象. 时间事件:Redis服务器中的一些操作需要给定的时间 ...
- 《HelloTester》第3期
1.前言 读了之前的简历篇和投递篇,你应该开始准备迎接面试了,那么,在面试前,我们都需要准备些什么呢?是要默默的去背诵那些理论知识,还是熟悉一下自己的技能?又或者去看看公司要求的那些技术呢?接下来这篇 ...
- NotionAI - 文档领域的ChatGPT,一款 AI 加持的在线文档编辑和管理工具
简介 NotionAI - 文档领域的ChatGPT,一款 AI 加持的在线文档编辑和管理工具 作为国际领先的在线文档编辑和管理工具,Notion受到了广大用户的欢迎,尤其是程序员们.它不仅支持笔记. ...
- es6数组相关操作
1. 获取两个数组中某个属性值相等的项 let a=[{name:1},{name:4},{name:3}] let b=[{name:5},{name:4},{name:2}] let index ...
- 谁能真正替代你?AI辅助编码工具深度对比(chatGPT/Copilot/Cursor/New Bing)
写在开头 这几个月AI相关新闻的火爆程度大家都已经看见了,作为一个被裹挟在AI时代浪潮中的程序员,在这几个月里我也是异常兴奋和焦虑.甚至都兴奋的不想拖更了.不仅仅兴奋于AI对于我们生产力的全面提升,也 ...
- 全网最详细中英文ChatGPT-GPT-4示例文档-智能AI写作从0到1快速入门——官网推荐的48种最佳应用场景(附python/node.js/curl命令源代码,小白也能学)
目录 Introduce 简介 setting 设置 Prompt 提示 Sample response 回复样本 API request 接口请求 python接口请求示例 node.js接口请求示 ...
- python自动化测试pyautogui,pywinauto和pywin32组合使用初级
1 前言PC 端自动化测试使用到的 python 模块主要有 pywinauto.win32gui.pyautogui,主要功能如下: pywinauto:主要使用到 Application 类,用于 ...
- w32模块模拟鼠标键盘操作
win32api.keybd_event 该函数原型:keybd_event(bVk, bScan, dwFlags, dwExtraInfo) 第一个参数:虚拟键码(键盘键码对照表见附录): 第二个 ...
- .NET Exceptionless 本地部署踩坑记录
仅已此文记录 Exceptionless 本地部署所遇到的问题 1.安装ElasticSearch文本 执行elasticsearch目录中的elasticsearch.bat 没有执行成功. 使用命 ...
- 在.NET 6.0中自定义接口路由
大家好,我是张飞洪,感谢您的阅读,我会不定期和你分享学习心得,希望我的文章能成为你成长路上的垫脚石,让我们一起精进. 在本文中,我们将讨论ASP.NET Core中的新路由.我们将了解什么是接口(en ...