首页 > 数据库 >Mysql学习笔记(连载中)

Mysql学习笔记(连载中)

时间:2023-04-06 10:02:44浏览次数:59  
标签:COMMENT NULL -- 数据库 笔记 DEFAULT Mysql TABLE 连载中

Mysql

01 使用CMD连接数据库

-- 在控制台连接数据库(需将位置切换到mysql所在地址)
mysql -u root -p
password:12345

-- 修改mysql账户密码及权限,安装配置完后慎用
update mysql.user set authentication_string = password('12345') where user = 'root' and Host = 'localhost';-- 修改用户密码
flush privileges; -- 刷新权限

--------------------------------------------------
-- 所有语句需要使用;作为结尾
show databases; -- 查看所有数据库

use test01; -- 切换数据库 use+数据库名

show tables; --查看数据库中所有的表
describe `user`; --显示某张表的信息

create database test01; -- 创建一个数据库

exit; -- 退出连接

-- 单行注释
-- 下面是多行注释
/*
hello
*/
  • 数据库xxx语言 CRUD 增删改查
    • DDL 定义
    • DML 操作
    • DQL 查询
    • DCL 控制

02 操作数据库

操作数据库>操作数据库中的表>操作数据库中表的数据

mysql关键字不区分大小写!!

2.1 操作数据库

  • 创建数据库
CREATE DATABASE test01; -- 创建数据库01
-- 但问题是如果test01存在,系统会报错
-- 所以一般会加入一个判断条件
CREATE DATABASE IF NOT EXISTS test01;
  • 删除数据库
DROP DATABASE IF EXISTS test01;
  • 使用数据库
-- tab键上方有一个``,如果数据库的表名或者字段名是一个特殊字符,就需要添加
USE `test01`;
  • 查询数据库
SHOW DATABASES; -- 查看所有数据库

2.2 数据库列数据类型

数字

2.3 数据库字段属性(重要)

  • unsigned:

    • 无符号的整数
    • 声明了该列不能填充负数
  • zerofill:

    • 0填充的
    • 不足位数在前面用0来填充,例如int(3),5-->005
  • 自增

    • 通常理解为自增,自动在上一条记录的基础上+1(默认)
    • 通常用来设计唯一的主键~index,必须是整数类型
    • 可以自定义自增步长
    • Navicat中Mysql自增设置在选项中

  • 非空 NULL not NULL
    • 假如设置为not null ,如果不给他赋值就会报错!
    • NULL,如果不填写值,默认就是NULL!
  • 默认:
    • 设置默认的值
    • 例如 sex,默认值为男性,如果没有特别指定该列的值,则会有默认的值!
    • 需要注意,在Navicat中,默认值设置,自增,无符号以及填充零都在下方

  • 拓展
/*每一个表都必须存在以下五个字段,未来做项目都有用,表示一个记录存在的意义
id 主键
is_delete 伪删除
gmt_create 创建时间
gmt_update 更新时间
*/

2.4 创建数据库表(重点)

-- 目标:创建一个school数据库
-- 创建学生表(列,字段) 使用SQL语句创建
-- 学号int 登陆密码varchar(20) 姓名 性别varchar(2) 出生日期(datetime) 家庭住址 email
-- 注意点,使用英文(),表的名称和字段尽可能使用``括起来
-- AUTO_INCREMENT 自增
-- 字符串使用单引号括起来;
-- 所有的语句后面加,(英文的),最后一个不用加
-- PRIMARY KEY 主键,一般一个表只有一个唯一的主键

CREATE TABLE IF NOT EXISTS `studentinformation`(
    `id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
		`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT'姓名',
		`pwd` VARCHAR(20) NOT NULL DEFAULT '12345' COMMENT'密码',
		`sex` VARCHAR(2) NOT NULL DEFAULT'男' COMMENT'性别',
		`birthday` DATETIME DEFAULT NULL COMMENT'出生日期',
		`address` VARCHAR(100) DEFAULT NULL COMMENT'家庭地址',
		`email` VARCHAR(50) DEFAULT NULL COMMENT'电子邮箱',
		PRIMARY KEY(`id`)
)ENGINE = INNODB DEFAULT CHARSET=utf8

格式

CREATE TABLE [IF NOT EXISTS] `表名`(
    `字段名` 列类型 [属性] [索引][注释],
    `字段名` 列类型 [属性] [索引][注释],
    ·······
    `字段名` 列类型 [属性] [索引][注释]
)[表类型][字符集设置][注释]

2.5 数据表的类型

-- 关于数据库引擎
/*
INNODB 默认使用~
MYISAM 早些年使用
*/
MYISAM INNODB
事务支持 不支持 支持
数据行锁定(同步) 不支持 支持
外键约束 不支持 支持
全文索引 支持 不支持
表空间大小 较小 较大,约为前者2倍

常规使用操作:

  • MYISAM 节约空间,速度较快
  • INNODB 安全性高,事务的处理,多表多用户操作

在物理空间的位置

所有的数据库文件都存在data目录下

所以数据库的本质还是文件的存储

Mysql引擎在物理文件上的区别

  • InnoDB在数据库表中只有一个*.frm文件,以及上级目录下的ibdata1文件
  • MYISAM对应文件
    • *.frm 表结构的定义文件
    • *.MYD 数据文件(data)
    • *.MYI 索引文件(index)
  • 这里有必要提到的是,MySQL8开始删除了原来的frm文件,并采用 Serialized Dictionary Information (SDI), 是MySQL8.0重新设计数据词典后引入的新产物,并开始已经统一使用InnoDB存储引擎来存储表的元数据信息。SDI信息源记录保存在ibd文件中。
    如何可以查看表结构信息,官方提供了一个工具叫做ibd2sdi,在安装目录下可以找到,可以离线的将ibd文件中的冗余存储的sdi信息提取出来,并以json的格式输出到终端。可参考一篇CSDN博客。https://blog.csdn.net/philipslu/article/details/102499234

设置数据库表的字符集编码

CHARSET = utf8

也可以采取在数据库安装目录下新建一个ini文件的方式进行默认设置。不如不单独设置,系统会默认为一个latin字符集,我的ini文件格式如下:

#设置3306端口
port=3306
#设置mysql的安装目录   ----------是你的文件路径-------------
basedir=E:\WorkappPackage\Mysql\mysql-8.0.32-winx64
#设置mysql数据库的数据的存放目录  ---------是你的文件路径data文件夹自行创建
#datadir=E:\WorkappPackage\Mysql\mysql-8.0.32-winx64\data
#允许最大连接数
max_connections=200
#允许连接失败的次数。
max_connect_errors=10
#服务端使用的字符集默认为utf8mb4
character-set-server=utf8mb4
#创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
#默认使用“mysql_native_password”插件认证
#mysql_native_password
default_authentication_plugin=mysql_native_password
[mysql]
#设置mysql客户端默认字符集
default-character-set=utf8mb4
[client]
#设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8mb4

2.6 修改删除表

修改

-- 修改表名:ALTER TABLE 旧表名 RENAME AS 新表名
ALTER TABLE test01 Rename AS test02

-- 增加表的字段:ALTER TABLE 表名 ADD 字段名 列属性
ALTER TABLE test02 ADD age INT(10)

-- 修改表的字段(重命名,修改约束)
-- ALTER TABLE 表名 MODIFY 字段名 列属性[]
ALTER TABLE test02 MODIFY age VARCHAR(10)
-- ALTER TABLE 表名 CHANGE 旧名字 新名字 列属性[]
ALTER TABLE test01 CHANGE age age1 INT(1) -- 字段重命名

-- 删除表的字段
ALTER TABLE test01 DROP age1
  • 可以观察到,所有对于表的修改都是以ALTER开头的

删除

-- 删除表(加入判断条件,如果存在再删除)
DROP TABLE IF EXISTS test01
  • 需要注意,所有的创建和删除尽量加上判断,以免出现报错

03 MySQL数据管理

3.1 数据库级别外键(了解)

方式一:在创建表的时候,增加外键语句和关联语句等约束(比较复杂)

CREATE TABLE IF NOT EXISTS `studentinformation`(
    `id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
		`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT'姓名',
		`pwd` VARCHAR(20) NOT NULL DEFAULT '12345' COMMENT'密码',
		`sex` VARCHAR(2) NOT NULL DEFAULT'男' COMMENT'性别',
		`birthday` DATETIME DEFAULT NULL COMMENT'出生日期',
		`gradeid` INT(3) NOT NULL COMMENT'年级id',
		`address` VARCHAR(100) DEFAULT NULL COMMENT'家庭地址',
		`email` VARCHAR(50) DEFAULT NULL COMMENT'电子邮箱',
		PRIMARY KEY(`id`),
		KEY `FK_gradeid`(`gradeid`), -- 外键名称设置
		CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade`(`gradeid`) -- 关联约束设置
)ENGINE = INNODB DEFAULT CHARSET=utf8


CREATE TABLE IF NOT EXISTS `grade`(
    `gradeid` INT(3) NOT NULL COMMENT'年级id',
		`gradename` VARCHAR(10) NOT NULL COMMENT'年级名称',
		PRIMARY KEY(`gradeid`)
)ENGINE = INNODB DEFAULT CHARSET=utf8
  • 运行结果如下

  • 可以看到此时由于外键关联关系的存在,原表在删除以及对某些字段内容进行修改时都收到了约束
  • 删除时需要先删除引用的表,然后再回来删除被引用的表

方法二:正如上面所示,可以在外键部分手动添加,这里不做展开,与上面运行结果类似即可

方法三:

CREATE TABLE IF NOT EXISTS `grade`(
    `gradeid` INT(3) NOT NULL COMMENT'年级id',
		`gradename` VARCHAR(10) NOT NULL COMMENT'年级名称',
		PRIMARY KEY(`gradeid`)
)ENGINE = INNODB DEFAULT CHARSET=utf8


-- 外部创建外键约束
CREATE TABLE IF NOT EXISTS `studentinformation`(
    `id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
		`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT'姓名',
		`pwd` VARCHAR(20) NOT NULL DEFAULT '12345' COMMENT'密码',
		`sex` VARCHAR(2) NOT NULL DEFAULT'男' COMMENT'性别',
		`birthday` DATETIME DEFAULT NULL COMMENT'出生日期',
		`gradeid` INT(3) NOT NULL COMMENT'年级id',
		`address` VARCHAR(100) DEFAULT NULL COMMENT'家庭地址',
		`email` VARCHAR(50) DEFAULT NULL COMMENT'电子邮箱',
		PRIMARY KEY(`id`)
)ENGINE = INNODB DEFAULT CHARSET=utf8

-- 创建表的时候没有外键关系
-- 外部添加外键约束
ALTER TABLE `studentinformation`
ADD CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade`(`gradeid`)

-- 结构
ALTER TABLE 表
ADD CONSTRAINT 约束名 FOREIGN KEY(`作为外键的列`)
  • 但需要注意的是,以上的操作均为物理外键,是在数据库级别进行操作的外键,一般不推荐使用。(避免数据库过多造成困扰)

最佳实践

  • 数据库就是单纯的表,只用来存数据,只有行(数据)和列(字段)
  • 如果想使用多张表的关联操作,即使用外键(在程序中实现)

参考文章:https://www.cnblogs.com/rjzheng/p/9907304.html

3.2 DML语言(需要全部记住)

数据库意义:数据存储、数据管理

DML语言:数据操作语言

  • INSERT
  • UPDATE
  • DELETE

3.3 添加INSERT

格式

-- 插入语句(添加)
-- INSERT INTO 表名 (`字段名1`,`字段名2`,`字段名3`) VALUES('第一条数据字段1数据','第一条数据字段2数据','第一条数据字段3数据'),('第二条数据字段1数据','第二条数据字段2数据','第二条数据字段3数据')····

-- 例:
INSERT INTO `grade`(`gradename`)VALUES('大一')
-- 需注意的是,跟在表名后面的括号内容可以选择表中的部分字段,但是需要观察表结构,那些非空且没有默认值的或者没设置自增的字段必须包括在内,否则会报错。还需注意,选定了括号内容后,VALUES后面的括号内的结构需与前面保持一致。如果想一次性添加多条数据,需要在括号中间用“,”隔开。

-- 错误示例:
INSERT INTO `grade` VALUES('大二')
-- 此处在表名`grade`后面没有括号,因此Mysql就会默认格式为全部字段。依照上面所述,数据库会对VALUES后面数据进行匹配。因此会报错。
-- 正确示例:
INSERT INTO `grade` VALUES(2,'大二')

-- 插入多条数据
INSERT INTO `grade`(`gradename`)
VALUES ('大三'),('大四')
  • 再次强调,必须注意标点符号的中英文格式!

注意事项:

  • 字段和字段之间用英文逗号隔开
  • 字段是可以省略的,但是后面括号内的值需要一一对应,不能少
  • 可以同时插入多条数据,VALUES后面的值,需要使用隔开即可

3.4 修改UPDATE

3.5 删除DELET

标签:COMMENT,NULL,--,数据库,笔记,DEFAULT,Mysql,TABLE,连载中
From: https://www.cnblogs.com/wutong666/p/17291722.html

相关文章

  • 学习笔记292—docker api是什么
    dockerapi指的是docker的应用程序接口,是软件系统不同组成部分衔接的约定,docker主要有三大对外api:1、DockerRegistryAPI;2、DockerHubAPI;3、DockerRemoteAPI。本教程操作环境:linux5.9.8系统、docker-1.13.1版、DellG3电脑。一、什么是API1.API具体是什么?API这个词在......
  • 力扣620(MySQL)-有趣的电影(简单)
    题目:某城市开了一家新的电影院,吸引了很多人过来看电影。该电影院特别注意用户体验,专门有个LED显示板做电影推荐,上面公布着影评和相关电影描述。作为该电影院的信息部主管,您需要编写一个SQL查询,找出所有影片描述为非 boring (不无聊) 的并且id为奇数 的影片,结果请按等级......
  • 全网最详细中英文ChatGPT-GPT-4示例文档-会议笔记文档智能转摘要从0到1快速入门——官
    目录Introduce简介setting设置Prompt提示Sampleresponse回复样本APIrequest接口请求python接口请求示例node.js接口请求示例curl命令示例json格式示例其它资料下载ChatGPT是目前最先进的AI聊天机器人,它能够理解图片和文字,生成流畅和有趣的回答。如果你想跟上AI时代的潮流......
  • Linux 中知心mysql的sql文件
    1.连接mysql[root@hadoop4~]#mysql-uroot-p  2.创建库mysql>CREATEDATABASEspring; 3.查看并切换数据库mysql>showdatabases;mysql>usespring 3.执行sql文件(source/usr/user.sql) ......
  • Mysql数据库基础(2)
    一、关系  将实体与实体的关系,反应到最终数据库表的设计上来:  将关系分成三种:一对一一对多(多对一)多对多  所有的关系都是指的表与表之间的关系。1、一对一  一对一:一张表的一条记录一定只能与另外一张表的一条记录进行对应;反之亦然。  学生表:姓名,性别,年龄,身......
  • 群晖的docker设置MySQL从库功能
    群晖的docker设置MySQL从库功能主库与正常设置无区别,新建账号并授权拷贝binlog即可,注意密码强度,最好不要给任意IP访问权限;数据安全无小事以镜像为8.0.30为例在高级设置中添加环境变量即可MYSQL_ROOT_PASSWORD=e0a1021570daa600MYSQL_ALLOW_EMPTY_PASSWORD=no注意为方便修......
  • 力扣619(MySQL)-只出现一次的最大数字(简单)
    题目:MyNumbers 表:单一数字是在MyNumbers表中只出现一次的数字。请你编写一个SQL查询来报告最大的单一数字。如果不存在单一数字,查询需报告null。查询结果如下例所示。示例1: 示例2: 来源:力扣(LeetCode)链接:https://leetcode.cn/problems/biggest-single-num......
  • Spark学习笔记01
    1、spark程序开发完成后,打包成jar包。如何将jar包分发到spark集群?1、启动集群启动master./sbin/start-master.sh启动worker./bin/spark-classorg.apache.spark.deploy.worker.workerspark://localhost.localdomain:7077提交作业./bin/spark-s......
  • CSS笔记(待完善)
    CSS笔记css权重ID(100)>class(10)>element(1)css最高权重!important块元素(block)可以设置宽度和高度,独立成行。h1~h6、p、div、ul、li行内元素(内联元素、块级元素)(inline)不可以设置宽度和高度,不独立成行a、span行内块元素(inline-block)可以设置宽度和高度,不独立......
  • 力扣618(MySQL)-学生地理信息报告(困难)
    题目: 一所美国大学有来自亚洲、欧洲和美洲的学生,他们的地理信息存放在如下student表中该表没有主键。它可能包含重复的行。该表的每一行表示学生的名字和他们来自的大陆。一所学校有来自亚洲、欧洲和美洲的学生。示例:student: 写一个查询语句实现对大洲(continent)列的......