MySQL这样学才叫了解!【2】

举报
XiaoLin_Java 发表于 2021/12/20 11:39:51 2021/12/20
【摘要】 五、MySQL列的常用类型 5.1、最常用的类型MsSQLJavaINTintBIGINTlongDECIMALBigDecimalDATE/DATETIMEjava.util.DateVARCHARString 5.2、整数类型    整数类型有宽度指示器,作用是指定位宽。    例如:某字段类型为 INT(3),保证少于3个值,从数据库检索出来时能够自动地用 0 填充,需设置填充,默认...

五、MySQL列的常用类型

5.1、最常用的类型

MsSQL Java
INT int
BIGINT long
DECIMAL BigDecimal
DATE/DATETIME java.util.Date
VARCHAR String

5.2、整数类型

    整数类型有宽度指示器,作用是指定位宽。

    例如:某字段类型为 INT(3),保证少于3个值,从数据库检索出来时能够自动地用 0 填充,需设置填充,默认不填充。

宽度指示器不影响列存值得范围。一般不指定位宽。
20201230114133531
.png)]

5.3、小数 类型

FLOAT[(s,p)]DOUBLE[(s,p)]: 小数类型,可存放实型和整型 ,精度 § 和范围 (s)。

DECIMAL : 高精度类型,金额货币优先选择。

在这里插入图片描述

5.4、字符类型

  • ​ char(size) : 定长字符,0 - 255字节,size 指 N 个字符数,若插入字符数超过设定长度,会被截取并警告。
  • ​ varchar(size): 变长字符,0 - 255字节,从 MySQL5 开始支持 65535 个字节,若插入字符数超过设定长度,在非严格模式下会被截取并警告。

在这里插入图片描述

    一般存储大量的字符串,比如文章的纯文本,可以选用 TEXT 系列类型,这个系列都是变长的。

    注意: 在 MySQL 中,字符类型必须指定长度,值要使用 单引号引起来。 相当于Java中字符(String,StringBuilder/StringBuffer);
在这里插入图片描述

5.5、日期类型

    常用日期和时间类型: DATE、DATETIME。

    注意: 在 MySQL 中,日期时间值使用单引号引起来。 相当于 Java中 Date,Calender。

在这里插入图片描述

5.6、二进制类型

    二进制类型主要用于存放图形、声音和影像,二进制对象,0-4GB。

    开发中,我们一般存储二进制文件保存路径,所以以上的类型非特殊需求不会使用。

    BIT,一般存储 0 或 1,存储是 Java 中的 boolean/Boolean 类型的值(需要使用)。

在这里插入图片描述

六、表的操作(DDL)

    表的操作主要是使用 DDL 来创建表和删除表等操作

6.1、创建表

6.1.1、语法

CREATE TABLE 表名 (
	列名1 列的类型 [约束],
	列名2 列的类型 [约束],
	....
	列名N 列的类型 约束
);
-- 注意:最后一行没有逗号

6.1.2、例子

    创建一张学生表(t_student) 有id、name、email、age。

CREATE TABLE t_student (
	id BIGINT,
	name VARCHAR(15),
	email VARCHAR(25),
	age INT
);

6.1.3、注意

    创建表时,不能使用 MySQL 的关键字、保留字。

    解决办法:

# 1. 尽量避免使用关键字,可以使用其他的单词或单词组合来代替。
# 2. 一般情况下,创建表的时候习惯使用 t_ 做表名的开头。
# 3. 使用反引号(``) 将表名括起来就 ok  (`order`)

6.2、删除表

6.2.1、语法

DROP TABLE 表名;

6.2.2、例子

-- 删除订单表
DROP TABLE `order`;

6.2.3、注意

    如果表名是数据库的关键字或保留字需要加上反引号 (`)

6.3、表的复制和批量插入

6.3.1、表的复制

    表的复制本质上是将查询结果当做表创建出来。

create table 表名 as select语句;

6.3.2、表的批量插入

    表的批量插入本质上是将查询结果插入到另一张表中。

insert into dept1 select * from dept;

6.5、表的约束

    约束是为了保证表中的数据的合法性、有效性和完整性,我们一般对表会有约束。

  1. 非空约束:NOT NULL,不允许某列的内容为空。
  2. 设置列的默认值:DEFAULT。
  3. 唯一约束:UNIQUE,在该表中,该列的内容必须唯一。
  4. 主键约束:PRIMARY KEY, 非空且唯一。
  5. 主键自增长:AUTO_INCREMENT,从 1 开始,步长为 1。
  6. 外键约束:FOREIGN KEY,A表中的外键列. A表中的外键列的值必须参照于B表中的某一列(B表主
    键)。

6.5.1、主键约束

    主键值是这行记录在这张表中的唯一标识,就如同身份证号。一张表的主键约束只能有一个。

主键约束(primary key)不能重复且不能为NULL。

6.5.1.1、主键的分类

  1. 业务主键:使用有业务含义的列作为主键 (不推荐使用);
  2. 自然主键:使用没有业务含义的列作为主键 (推荐使用);

6.5.1.2、如何设计主键

    对于主键,我们有以下两种的主键设计原则:

  1. 单字段主键,单列作为主键,建议使用。
  2. 复合主键,使用多列充当主键,不建议。

6.5.1.3、结论

    使用单字段的自然主键。

6.5.1.4、例子

    创建学生表,id为主键自增,name唯一,email不为空,age默认18。

-- 移除存在的表
DROP TABLE IF EXISTS `t_student`;
	CREATE TABLE t_student(
	id BIGINT PRIMARY KEY AUTO_INCREMENT,
	name VARCHAR(25) UNIQUE,
	email VARCHAR(25) NOT NULL,
	age INT DEFAULT 18
);

6.5.2、外键约束(foreign key)

    **外键是另一张表的主键。**例如员工表与部门表之间就存在关联关系,其中员工表中的部门编号字段就是外键,是相对部门表的外键。

    外键可以为NULL,且不一定是另一张的主键,但是必须具有唯一性,一般情况下会引用另一张表的主键。

create table t_student(
	sno it,
    sname varchar(255),
    classno ,int
    foreign key (classno) references t_class(no) -- 对t_student的classno字段添加外键约束,引用的是t_calss的no字段
);

6.5.3、唯一性约束(unique)

    唯一约束修饰的字段具有唯一性,不可以重复,但是可以为NULL,也可以同时为NULL。

create table t_user(
	id int,
    username varchar(255) unique,-- 列级约束
    pwd varchar(255)
)

    我们也可以同时给两个列或者多个列添加唯一约束。

-- 这样表示两个字段连起来不能重复,两个字段添加一个约束。表级约束
create table t_user(
	id,int,
    username varchar(255),
    pwd varchar(255),
    unique(username,pwd)
)
-- 这样表示两个字段都不能重复,两个字段加两个约束。
create table t_user(
	id,int,
    username varchar(255) unique,
    pwd varchar(255) unique
)

6.6、表与表之间的关系

6.6.1、一对一

    例如t_person表和t_card表,即人和身份证。这种情况需要找出主从关系,即谁是主表,谁是从表。人可以没有身份证,但身份证必须要有人才行,所以人是主表,而身份证是从表。设计从表可以有两种方案:

  1. 在t_card表中添加外键列(相对t_user表),并且给外键添加唯一约束;

  2. 给t_card表的主键添加外键约束(相对t_user表),即t_card表的主键也是外键。

6.6.2、一对多(多对一)

    一对多(多对一):最为常见的就是一对多!一对多和多对一,这是从哪个角度去看得出来的。t_user和t_section的关系,从t_user来看就是一对多,而从t_section的角度来看就是多对一!这种情况都是在多方创建外键!

6.6.3、多对多

    例如t_stu和t_teacher表,即一个学生可以有多个老师,而一个老师也可以有多个学生。这种情况通常需要创建中间表来处理多对多关系。例如再创建一张表t_stu_tea表,给出两个外键,一个相对t_stu表的外键,另一个相对t_teacher表的外键。

七、DML增删改操作

    DML是数据操作语句,用户对表的数据进行操作,所有的DML操作都有一个受影响的行,表示SQL执行,操作了多少行数据。

7.1、插入操作

7.1.1、语法

INSERT INTO 表名 (1,2,3...) VALUES(1,2,3...);

7.1.2、例子

-- 1.插入完整数据记录
INSERT INTO t_student(name,email,age) VALUES('xiaoming','xiao@',18);
-- 2.插入数据记录一部分
INSERT INTO t_student(name,age) VALUES('xiaodong',19);
-- 3.插入多条数据记录(MySQL特有)
INSERT INTO t_student(name,email,age) VALUES('xiaohong','hong@',17),
('xiaohong2','hong2@',17),('xiaohong3','hong@3',17)
-- 4.插入查询结果
INSERT INTO t_student(name,email,age) SELECT name,email,age FROM t_student

7.1.3、注意

    一次插入操作只插入一行,插入多条数据为 MySQL 特有语法(不推荐使用,Mybatis有循环来批量加入)

7.2、修改操作

7.2.1、语法

UPDATE 表名
SET1 =1,2 =2, column3 = value3...
WHERE [条件]

7.2.2、练习

-- 将张三改为西门吹水
UPDATE t_student SET name='西门吹水' WHERE name='张三';
-- 将 id 为3 的 name 改为叶孤城,email 改为ye@,age 改为100
UPDATE t_student SET name='叶孤城' WHERE id=3;

7.2.3、注意

  1. 如果省略了条件,那么整张表的数据都会被修改,所以一般都会带上条件
  2. 修改语句没有from关键字。

7.3、删除操作

7.3.1、语法

DELETE FROM 表名 WHERE [条件]

7.3.2、练习

-- 删除 id 为 2 的学生信息
DELETE FROM t_student WHERE id=2;
-- 删除叶孤城的所有信息
DELETE FROM t_student WHERE name='叶孤城'

7.3.3、注意

  1. FROM 不能写成 FORM

  2. 如果省略了 WHERE 子句,则全表的数据都会被删除

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。