MySQL这样学才叫了解!【2】
五、MySQL列的常用类型
5.1、最常用的类型
MsSQL | Java |
---|---|
INT | int |
BIGINT | long |
DECIMAL | BigDecimal |
DATE/DATETIME | java.util.Date |
VARCHAR | String |
5.2、整数类型
整数类型有宽度指示器,作用是指定位宽。
例如:某字段类型为 INT(3),保证少于3个值,从数据库检索出来时能够自动地用 0 填充,需设置填充,默认不填充。
宽度指示器不影响列存值得范围。一般不指定位宽。
.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、表的约束
约束是为了保证表中的数据的合法性、有效性和完整性,我们一般对表会有约束。
- 非空约束:NOT NULL,不允许某列的内容为空。
- 设置列的默认值:DEFAULT。
- 唯一约束:UNIQUE,在该表中,该列的内容必须唯一。
- 主键约束:PRIMARY KEY, 非空且唯一。
- 主键自增长:AUTO_INCREMENT,从 1 开始,步长为 1。
- 外键约束:FOREIGN KEY,A表中的外键列. A表中的外键列的值必须参照于B表中的某一列(B表主
键)。
6.5.1、主键约束
主键值是这行记录在这张表中的唯一标识,就如同身份证号。一张表的主键约束只能有一个。
主键约束(primary key)不能重复且不能为NULL。
6.5.1.1、主键的分类
- 业务主键:使用有业务含义的列作为主键 (不推荐使用);
- 自然主键:使用没有业务含义的列作为主键 (推荐使用);
6.5.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表,即人和身份证。这种情况需要找出主从关系,即谁是主表,谁是从表。人可以没有身份证,但身份证必须要有人才行,所以人是主表,而身份证是从表。设计从表可以有两种方案:
-
在t_card表中添加外键列(相对t_user表),并且给外键添加唯一约束;
-
给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 表名
SET 列1 = 值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、注意
- 如果省略了条件,那么整张表的数据都会被修改,所以一般都会带上条件
- 修改语句没有
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、注意
-
FROM
不能写成FORM
-
如果省略了 WHERE 子句,则全表的数据都会被删除
- 点赞
- 收藏
- 关注作者
评论(0)