From 882c9803bd1f13a1e145d13ba2199e4ca107de1e Mon Sep 17 00:00:00 2001 From: 1 1 <2161737470@qq.com> Date: Sun, 19 Feb 2023 15:29:33 +0800 Subject: [PATCH] =?UTF-8?q?MySQL=E7=AC=AC=E4=B8=80=E6=AC=A1=E7=AC=94?= =?UTF-8?q?=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...344\270\216DML\347\254\224\350\256\260.md" | 389 ++++++++++++++++++ 1 file changed, 389 insertions(+) create mode 100644 "04 \346\235\216\346\230\216\345\201\245/20230219 DDL\344\270\216DML\347\254\224\350\256\260.md" diff --git "a/04 \346\235\216\346\230\216\345\201\245/20230219 DDL\344\270\216DML\347\254\224\350\256\260.md" "b/04 \346\235\216\346\230\216\345\201\245/20230219 DDL\344\270\216DML\347\254\224\350\256\260.md" new file mode 100644 index 0000000..61b03f4 --- /dev/null +++ "b/04 \346\235\216\346\230\216\345\201\245/20230219 DDL\344\270\216DML\347\254\224\350\256\260.md" @@ -0,0 +1,389 @@ +## MySQL数据库概述与用法 + +### 1. 基本概念 + +数据库是什么? + +​ 存储数据的地方 + +​ DB:数据库(Database) + +​ 早期分为:层次模型、网状模型、关系模型。 目前主要:关系型数据库、非关系型数据库两大类 + + + + 如何管理数据库? + +​ DBMS:数据库管理系统 ( DataBase Management System )是一种操纵和管理数据库的大型软件,例如建立、使用和维护数据库。 如:MySQL、Oracle、SqlServer + + + +SQL是什么? + +​ SQL:是结构化查询语言(Structure Query Language),专门用来操作/访问数据库的通用语言。 + + + +SQL的语法规则: + +​ 1.mysql的sql语法不区分大小写 + +​ 2.命名时:尽量使用26个英文字母大小写,数字0-9,下划线,不要使用其他符号 + +​ 3.建议不要使用mysql的关键字等来作为**表名、字段名、数据库**名等,如果不小心使用,请在SQL语句中使用`(飘号/反引号)引起来,说明 : 反引号用于区别MySQL保留字与普通字符而引入的 (键盘esc下面的键) + +​ 4.数据库和表名、字段名等对象名中间不要包含空格 + +​ 5.同一个mysql软件中,数据库不能同名,同一个库中,表不能重名,同一个表中,字段不能重名 + + + +使用cmd命令连接 + +​ cmd输入:mysql -h 主机名 -P 端口号 -u 用户名 -p密码** + + + +### 2. DDL-数据库操作 + +1 查询所有数据库 + +~~~ sql +show databases; +~~~ + +2 查询当前数据库 + +~~~ sql +select database(); +~~~ + +3 创建自己的数据库 + +~~~ sql +create database [if not exists]数据库名 charset utf8; + #如果不存在 +~~~ + +4 删除数据库 + +~~~ sql +drop database[if exists]数据库名; +~~~ + +5 使用自己的数据库 + +~~~ sql +use 数据库名; +~~~ + +### 3. DDL-表操作-查询 + +1 查询当前数据库所有表格 + +~~~ sql +show tables; #前提是要先进入所查询的数据库 +~~~ + +2 查询表结构 + +~~~ sql +desc 表名; +~~~ + +3 查询指定表的建表语句 + +~~~ sql +show create table 表名; +~~~ + +4 跳转查看其他数据库的表 + +~~~ sql +show tables from 数据库名; +~~~ + +### 4. DDL表操作-创建 + +~~~ sql +create table 表名( + 字段1 字段类型 comment '字段注释', #例;id int comment '编号', + 字段2 字段类型 comment '字段注释', + ... + 字段n 字段类型 comment '字段注释' +)comment 表注释; #例:comment '用户表' +~~~ + +### 5. 数据表 + +1 添加一条记录 + +~~~ sql +insert into 表名称 values(值列表); +~~~ + +2 添加两条记录到student表中 + +~~~ sql +insert into student values(1,'张三'); +insert into student values(2,'李四'); +~~~ + +3 查看一个表的数据 + +~~~ sql +select * from 表名称; +~~~ + +4 删除表 + +~~~ sql +drop table 表名称; +~~~ + +### 6. SQL脚本中如何加注释 + +​ 单行注释:#注释内容(mysql特有的) + +​ 单行注释:--空格注释内容 其中--后面的空格必须有 + +​ 多行注释:/* 注释内容 */ + +### 7. MySQL支持的数据类型 + +​ 数值类型:包括整数和小数,数值类型主要用来存储数字,不同的数值类型提供不同的取值范围,可以存储的值范围越大,所需要的存储空间也越大。 + +1 整数类型 + +​ 对于整数类型,MySQL还支持在类型名称后面加小括号(M),而小括号中的M表示显示宽度,M的取值范围是(0, 255)。int(M)这个M在字段的属性中指定了unsigned(无符号)和zerofill(零填充)的情况下才有意义。表示当整数值不够M位时,用0填充。如果整数值超过M位但是没有超过当前数据类型的 范围时,就按照实际位数存储。当M宽度超过当前数据类型可存储数值范围的最大宽度时,也是以实 际存储范围为准。 + +2 小数类型 + +​ MySQL中使用浮点数和定点数来表示小数。 + +​ 浮点数有两种类型:单精度浮点数(FLOAT)和双精度浮点数(DOUBLE),定点数只有DECIMAL。浮点数和定点数都可以用(M,D)来表示。 + +​ M是精度,表示该值总共显示M位,包括整数位和小数位,对于FLOAT和DOUBLE类型来说,M取值 范围为0~255,而对于DECIMAL来说,M取值范围为0~65。 + +​ D是标度,表示小数的位数,取值范围为0~30,同时必须<=M。 + +​ DECIMAL实际是以字符串形式存放的,在对精度要求比较高的时候(如货币、科学数据等)使用DECIMAL类型会比较好。浮点数相对于定点数的优点是在长度一定的情况下,浮点数能够表示更大的数据范围,它的缺点是会引起精度问题。 + +3 字符串类型 + +​ CHAR(M)为固定长度的字符串, M表示最多能存储的字符数,取值范围是0~255个字符,如果未指定(M)表示只能存储1个字符。例如CHAR(4)定义了一个固定长度的字符串列,其包含的字符个数最大为4,如果存储的值少于4个字符,右侧将用空格填充以达到指定的长度,当查询显示CHAR值时,尾部的空格将被删掉。 + +~~~ sql +create table temp( + c1 char, #默认为1 + c2 char(3) +); +~~~ + + + +VARCHAR(M)为可变长度的字符串,M表示最多能存储的字符数,最大范围由字符集及M共同决定。M不可缺省,必须指(M),否则报错。实际长度达不到M值时,以实际长度为准。VARBINARY类型的数据除了存储数据本身外,还需要1或2个字节来存储数据的字节数。 + +~~~ sql +create table temp( + name varchar(m) #最多不超过m个字符,这里的m不能不写 +); +~~~ + +4 日期时间类型 + +如果仅仅是表示年份信息,可以只使用YEAR类型,这样更节省空间,格式为“YYYY”,例如“2022”。YEAR允许的值范围是1901~2155。 + + 如果要表示年月日,可以使用DATE类型,格式为“YYYY-MM-DD”,例如“2022-02-04”。 + +如果要表示时分秒,可以使用TIME类型,格式为“HH:MM:SS”,例如“10:08:08”。 + +如果要表示年月日时分秒的完整日期时间,可以使用DATATIME类型,格式为“YYYY-MM-DD HH:MM:SS”,例如“2022-02-04 10:08:08”。 + +~~~ sql +create table temp( + d1 datetime, + d2 timestamp +); +insert into temp values('2021-9-2 14:45:52','2021-9-2 14:45:52'); +~~~ + +5 Enum和Set类型 + +无论是数值类型、日期类型、普通的文本类型,可取值的范围都非常大,但是有时候我们指定在固定的几个值范围内选择一个或多个,那么就需要使用ENUM枚举类型和SET集合类型了。 + +比如性别只有“男”或“女”;上下班交通方式可以有“地铁”、“公交”、“出租车”、“自行车”、“步行”等。 + +枚举和集合类型字段声明的语法格式如下: + +~~~ sql +reate table temp( + gender enum('男','女'), #字段名 ENUM('值1','值2',…'值n') 二选一 + hobby set('睡觉','打游戏','泡妞','写代码') #字段名 SET('值1','值2',…'值n') 可以选多个 +); +insert into temp values('男','睡觉,打游戏'); + +~~~ + +ENUM类型的字段在赋值时,只能在指定的枚举列表中取值,而且一次只能取一个。枚举列表最多可以有65535个成员。ENUM值在内部用整数表示,每个枚举值均有一个索引值, MySQL存储的就是这个索引编号。例如,定义ENUM类型的列(‘first’, ‘second’, ‘third’)。 + +6 数据字段属性 + +### unsigned + +- 无符号的 + +- 声明该数据列不允许负数 + + ### ZEROFILL + +- 0填充的 + +- 不足位数的用0来填充 , 如int(3),5则为005 + +**auto_increment** + +- 自动增长的 , 每添加一条数据 , 自动在上一个记录数上加 1(默认) +- 通常用于设置主键 , 且为整数类型 +- 可定义起始值和步长 + - 当前表设置步长(AUTO_INCREMENT=100) : 只影响当前表 + - SET @@auto_increment_increment=5 ; 影响所有使用自增的表(全局) + +**NULL 和 NOT NULL** + +- 默认为NULL , 即没有插入该列的数值 +- 如果设置为NOT NULL , 则该列必须有值 + +**DEFAULT** + +- 默认的 + +- 用于设置默认值 + +- 例如,性别字段,默认为"男" , 否则为 "女" ; 若无指定该列的值 , 则默认值为"男"的值 + +## 8. 修改 + +1 修改数据库字符集和校对规则 + +~~~ sql +alter database 数据库名称 charset 字符集名称 collate 字符集对应校对规则; +alter database mxdx charset utf8 collate utf8_general_ci; +~~~ + +2 修改数据表编码 + +~~~ sql +alter table 表名称 convert to character set utf8; +~~~ + +3 修改表结构:删除字段 + +~~~ sql +alter table 表名称 drop column 字段名称; +~~~ + +4 修改表结构:增加字段 + +~~~ sql +#添加一个字段 +alter table 表名称 add column 字段名称 数据类型; +#增加一个字段,称为第一个字段 +alter table 表名称 add column 字段名称 数据类型 first; +#在某个字段后面增加一个字段 +alter table 表名称 add column 字段名称 数据类型 after 另一个字段; +~~~ + +5 修改表结构:修改字段的数据类型 + +~~~ sql +alter table 表名称 modify column 字段名称 新的数据类型; +~~~ + +6 修改表结构:修改字段的名称 + +~~~ sql +alter table 表名称 change column 旧字段名称 新的字段名称 新的数据类型; +~~~ + +7 修改表结构:修改字段位置 + +~~~ sql +#把这个表的某个字段调到第一 +alter table 表名称 modify column 字段名称 数据类型 first; +#把这个表的字段1调整到字段2后面 +alter table 表名称 modify column 字段1 数据类型 after 字段2; +~~~ + +8 修改表名称(重命名表) + +~~~ sql +alter table 旧表名 rename to 新表名; +#把 旧表名称 重命名为 新表名称 +rename table 旧表名称 to 新表名称; +~~~ + +## 9. DML添加数据 + +1 给所有字段赋值 + +​ 这种情况要求(值列表)的每一个值的类型、顺序与表结构一一对应 +​ 表中有几个字段,(值列表)必须有几个值,不能多也不能少 +​ 值如果是字符串或日期类型,需要加单引号 + +~~~ sql +insert into 表名称 values(添加内容); +#例:(1,'张三','m','1998-7-8',15000.0,) 需按顺序添加 +~~~ + +2 给指定字段赋值 + +~~~ sql +insert into 表名称 (字段1,字段2) values(内容1,内容2); +#例:insert into teacher (id,name) values (2,'李四'); +~~~ + +3 添加多行信息 + +~~~ sql +insert into 表名称 (字段1,字段2) values(内容1,内容2),(内容1,内容2)...; +#例:insert into teacher (id,name) values + (3,'王五'), + (4,'宋鑫'), + (5,'赵志浩'), +~~~ + +4 修改语句 + +~~~ sql +update 表名称 set 字段名 = 值, 字段名 = 值; #给所有行修改 +#例:update teacher set salary = salary + 1000 ; +~~~ + +5 修改指定行 + +~~~ sql +update 表名称 set 字段名 = 值, 字段名 = 值 where 条件; #给满足条件的行修改 +#例:update teacher set salary = salary-5000 where tname = '天琪'; +#修改天琪的薪资降低5000 +~~~ + +6 删除部分行的数据 + +~~~ sql +delete from 表名称 where 条件; +#例:delete from teacher where tname = '天琪'; +~~~ + +7 删除整张表的数据,但表结构留下 + +~~~ sql +delete from 表名称; +~~~ + +8 截断表,清空表中的数据,只留有表结构 + +~~~ sql +truncate 表名称; +~~~ + -- Gitee