MySQL数据库:SQL语言入门 【2】(学习笔记)
目录
2,DML —— 数据操作语言(Data Manipulation Language)
(1)insert 增加 数据
(2)delete 删除 数据 truncate 删除表和数据,再创建一个新表
(3)update 修改 数据
3,DDL —— 数据定义语言(Data Definition Language)
(1)create 创建 数据库对象
(2)drop 删除 数据库对象
(3)alter 修改 数据库对象
----- 修改表的结构:----- 增加一列:
----- 增加一列(放在最前面)
----- 增加一列(放在sex列的后面)
----- 删除一列:
----- 修改一列:
(4)字段类型
#1——整数类型 int
#2——浮点型 double(m,n)【m--一共的位数;n---小数点后的位数】
#3——字符串型 varchar(20)【对应Java的String型】
#4——时间日期 date/datetime 【时间】
(5)认识数据库表
(6)约束
#1——约束的使用场合
#2——约束的种类(7)
#3——根据DDL建表语句里约束代码的位置,可以分为【约束从作用上可以分为两类:】
列级约束:
表级约束:
#4——使用约束
(1)6种约束使用展示
(2)创建数据库表
(3)创建表后,添加外键约束
4,DCL —— 数据控制语言(Data Control Language)
(1)grant 授予用户某种权限
(2)revoke 回收授予的某种权限
2,DML —— 数据操作语言(Data Manipulation Language)
主要用于对数据库中的数据进行增加、修改和删除的操作。
(1)insert 增加 数据
insert into 表名(字段名,,,字段名)values(值,,,值)
insert into 表名 values(值,,,值)
- 一次添加1条:insert into 表 values(值,值,值)
- 一次添加n条:insert into 表 values(值,值,值),(值,值,值),(值,值,值)
------ 在t_student数据库表中插入数据
insert into t_student values (1,'张三','男',18,'2022-5-8','软件1班','123@126.com');
insert into t_student values (10010010,'张三','男',18,'2022-5-8','软件1班','123@126.com');
insert into t_student values (2,'张三','男',18,'2022.5.8','软件1班','123@126.com');
insert into t_student values (2,"张三",'男',18,'2022.5.8','软件1班','123@126.com');
insert into t_student values (7,"张三",'男',18,now(),'软件1班','123@126.com');
insert into t_student values (9,"易烊千玺",'男',18,now(),'软件1班','123@126.com');
insert into t_student (sno,sname,enterdate) values (10,'李四','2023-7-5');
(2)delete 删除 数据 truncate 删除表和数据,再创建一个新表
delete from 表名 where 条件 and/or 条件
delete from t_student 【慎用】
delete from t_student where sno = 2;
truncate table t_student;
- delete 和 truncate 的区别
- delete为数据操作语言DML;truncate为数据定义语言DDL。
- delete操作是将表中所有记录一条一条删除直到删除完;truncate操作则是保留了表的结构,重新创建了这个表,所有的状态都相当于新表。因此,truncate操作的效率更高。
- delete操作可以回滚;truncate操作会导致隐式提交,因此不能回滚(在第十章中会讲解事务的提交和回滚)。
- delete操作删除表中记录后,再次向表中添加新记录时,对于设置有自增约束字段的值会从删除前表中该字段的最大值加1开始自增;truncate操作则会重新从1开始自增。
- delete操作执行成功后会返回已删除的行数(如删除4行记录,则会显示“Affected rows:4”);截断操作不会返回已删除的行量,结果通常是“Affected rows:0”。
- 删除数据的三种方式 以及之间的区别
- delete from 表 === 只删除数据,保留表 ;可以回滚 ; 添加数据时,下标继续累加。【DML数据操作语言】
- truncate table 表 === 先把表以及表里的数据都删掉。然后再创建一个新表 ; 不能回滚 ;添加数据时,下标从新开始。【DDL数据定义语言】
- drop table 表 ===删除表以及表里的数据 ;【DDL数据定义语言】
(3)update 修改 数据
update 表名 set 字段=值,字段=值 where 条件 and/or 条件
update 表名 set 字段=值,字段=值 【慎用】
-----修改表中数据
update t_student set sex = '女' ;
update t_student set sex = '男' where sno = 10 ;
UPDATE T_STUDENT SET AGE = 21 WHERE SNO = 10;
update t_student set CLASSNAME = 'java01' where sno = 10 ;
update t_student set CLASSNAME = 'JAVA01' where sno = 9 ;
update t_student set age = 29 where classname = 'java01';
注意事项
- 关键字,表名,字段名不区分大小写
- 默认情况下,内容不区分大小写
- 删除操作from关键字不可缺少
- 修改,删除数据别忘记加限制条件
3,DDL —— 数据定义语言(Data Definition Language)
主要用针对是数据库对象(数据库、表、索引、视图、触发器、存储过程、函数)进行创
建、修改和删除操作。
(1)create 创建 数据库对象
create table '表名'(
'字段名' 类型(长度)约束 注释,
'字段名' 类型(长度)约束 注释,
'字段名' 类型(长度)约束 注释
);
创建表的时候,同时添加多条数据:
create table t_emp
as
select e.*,d.dname,d.loc
from emp e,dept d where e.deptno=d.deptno
-- 查看表的结构:展示表的字段详细信息
desc t_student;
-- 查看表中数据:
select * from t_student;
-- 查看建表语句:
show create table t_student;
(2)drop 删除 数据库对象
drop table '表名';
drop table t_student;
(3)alter 修改 数据库对象
alter table '表名';
----- 修改表的结构:
----- 增加一列:
alter table t_student add score double(5,2) ; -- 5:总位数 2:小数位数
update t_student set score = 123.5678 where sno = 1 ;
----- 增加一列(放在最前面)
alter table t_student add score double(5,2) first;
----- 增加一列(放在sex列的后面)
alter table t_student add score double(5,2) after sex;
----- 删除一列:
alter table t_student drop score;
----- 修改一列:
-- modify修改是列的类型的定义,但是不会改变列的名字
-- change修改列名和列的类型的定义
alter table t_student modify score float(4,1); -- modify修改是列的类型的定义,但是不会改变列的名字
alter table t_student change score score1 double(5,1); -- change修改列名和列的类型的定义
(4)字段类型
#1——整数类型 int
MySQL支持选择在该类型关键字后面的括号内指定整数值的显示宽度(例如,INT(4))。显示宽度并不限制可以在列内保存的值的范围,也不限制超过列的指定宽度的值的显示
主键自增:不使用序列,通过auto_increment,要求是整数类型
#2——浮点型 double(m,n)【m--一共的位数;n---小数点后的位数】
需要注意的是与整数类型不一样的是,浮点数类型的宽度不会自动扩充。 score double(4,1)
score double(4,1)--小数部分为1位,总宽度4位,并且不会自动扩充。
#3——字符串型 varchar(20)【对应Java的String型】
CHAR 和 VARCHA 类型相似,均用于存于较短的字符串,主要的不同之处在于存储方式。CHAR类型长度固定,VARCHAR类型的长度可变。
因为VARCHAR类型能够根据字符串的实际长度来动态改变所占字节的大小,所以在不能明确该字段具体需要多少字符时推荐使用VARCHAR类型,这样可以大大地节约磁盘空间、提高存储效率。
CHAR和VARCHAR表示的是字符的个数,而不是字节的个数 。
注意事项
- int 宽度是显示宽度,如果超过,可以自动增大宽度 int底层都是4个字节
- 时间的方式多样 '1256-12-23' "1256/12/23" "1256.12.23"
- 字符串不区分单引号和双引号
- 如何写入当前的时间 now() , sysdate() , CURRENT_DATE()
- char varchar 是字符的个数,不是字节的个数,可以使用binary,varbinary表示定长和不定长的字节个数。
- 如果不是全字段插入数据的话,需要加入字段的名字
#4——时间日期 date/datetime 【时间】
TIMESTEMP类型的数据指定方式与DATETIME基本相同,两者的不同之处在于以下几点:
(1) 数据的取值范围不同,TIMESTEMP类型的取值范围更小。
(2) 如果我们对TIMESTAMP类型的字段没有明确赋值,或是被赋与了NULL值,MySQL会自动将该字段赋值为系统当前的日期与时间。
(3) TIMESTEMP类型还可以使用CURRENT_TIMESTAMP来获取系统当前时间。
(4) TIMESTEMP类型有一个很大的特点,那就是时间是根据时区来显示的。例如,在东八区插入的TIMESTEMP数据为2017-07-11 16:43:25,在东七区显示时,时间部分就变成了15:43:25,在东九区显示时,时间部分就变成了17:43:25。
(5)认识数据库表
- 表(Table)是数据库中数据存储最常见和最简单的一种形式,
- 数据库可以将复杂的数据结构用较为简单的二维表来表示。
- 二维表是由行和列组成的,分别都包含着数据。如图
- 每个表都是由若干行和列组成的,在数据库中表中为记录的行被称为记录,表中的列被称为是这些记录的字段。
- 字段是表里的一列,用于保存每条记录的特定信息。如上表所示的学生信息表中的字段包括“学号”、“姓名”、“性别”和“年龄”。数据表的一列包含了某个特定字段的全部信息。
(6)约束
- 为防止不符合规范的数据存入数据库,在用户对数据进行插入、修改、删除等操作时,
- MySQL提供了一种机制来检查数据库中的数据是否满足规定的条件,以保证数据库中数据的准确性和一致性,这种机制就是完整性约束。
完整性----数据的准确性
#1——约束的使用场合
DDL建表语句里。
#2——约束的种类(7)
#3——根据DDL建表语句里约束代码的位置,可以分为【约束从作用上可以分为两类:】
列级约束:
- 约束代码直接写在 字段名后面
- 包含在列定义中,直接跟在该列的其它定义之后 ,用空格分隔;不必指定列名;
————非空,唯一,默认值,自增,检查
表级约束:
- 约束代码脱离字段,单独一行存在
- 可以约束表中任意一个或多个字段。与列定义相互独立,不包含在列定义中;与定义用‘,’分隔;必须指出要约束的列的名称;
————主键,外键,检查
缩写 | 约束条件 | 约束描述(作用) | 表级约束/列级约束 | |
---|---|---|---|---|
PK | 主键 | primary key | 约束字段的值可唯一地标识对应的记录 | 单字段主键的添加: 表级约束 列级约束; 多字段主键的添加: 表级约束 |
NK | 非空 | not null | 约束字段的值不能为空 | 单字段或多个字段非空约束的添加: 列级约束 (非空约束无表级约束) |
UK | 唯一 | unique | 约束字段的值是唯一的 | 单字段或多个字段唯一约束的添加: 表级约束 列级约束 |
检查 | check | 限制某个字段的取值范围 | 表级约束 列级约束 | |
默认值 | default | 约束字段的默认值 | 单字段或多个字段约束的添加: 列级约束 | |
自增 | auto_increment | 约束字段的值自动递增 | ||
外键 | foreign key | 约束表与表之间的关系 |
-
使用主键约束可以快速查找表中的记录。就像人的身份证、学生的学号等等,设置为主键的字段取值不能重复(唯一),也不能为空(非空),否则无法唯一标识一条记录。
-
设置了非空约束的字段,在插入的数据为NULL时,数据库会提示错误,导致数据无法插入。
- 一张表中只能有一个自增长字段,并且该字段必须定义了约束(该约束可以是主键约束、唯一约束以及外键约束),如果自增字段没有定义约束,数据库则会提示“Incorrect table definition; there can be only one auto column and it must be defined as a key”错误。
- 由于自增约束会自动生成唯一的ID,所以自增约束通常会配合主键使用,并且只适用于整数类型。一般情况下,设置为自增约束字段的值会从1开始,每增加一条记录,该字段的值加1
- 外键约束(FOREIGN KEY,缩写FK)是用来实现数据库表的参照完整性的。
- 外键约束可以使两张表紧密的结合起来,特别是针对修改或者删除的级联操作时,会保证数据的完整性。
- 外键是指表中某个字段的值依赖于另一张表中某个字段的值,而被依赖的字段必须具有主键约束或者唯一约束。被依赖的表我们通常称之为父表或者主表,设置外键约束的表称为子表或者从表。
#4——使用约束
(1)6种约束使用展示
create table t_student(sno int(6) primary key auto_increment, sname varchar(5) not null, sex char(1) default '男' check(sex='男' || sex='女'),age int(3) check(age>=18 and age<=50),enterdate date,classname varchar(10),email varchar(15) unique
);
(2)创建数据库表
——constraint 约束关键字
create table t_student(sno int(6) auto_increment, sname varchar(5) not null, sex char(1) default '男',age int(3),enterdate date,classname varchar(10),email varchar(15),constraint pk_stu primary key (sno), -- pk_stu 主键约束的名字constraint ck_stu_sex check (sex = '男' || sex = '女'),constraint ck_stu_age check (age >= 18 and age <= 50),constraint uq_stu_email unique (email)
—— 在创建表以后添加约束:
-- 创建数据库表:
create table t_student(sno int(6), sname varchar(5) not null, sex char(1) default '男',age int(3),enterdate date,classname varchar(10),email varchar(15)
);-- 在创建表以后添加约束:
alter table t_student add constraint pk_stu primary key (sno) ; -- 主键约束
alter table t_student modify sno int(6) auto_increment; -- 修改自增条件
alter table t_student add constraint ck_stu_sex check (sex = '男' || sex = '女');
alter table t_student add constraint ck_stu_age check (age >= 18 and age <= 50);
alter table t_student add constraint uq_stu_email unique (email);
(3)创建表后,添加外键约束
————前者关联后者
alter table emp add CONSTRAINT fk_emp_deptno FOREIGN key (deptno) REFERENCES dept(deptno)
4,DCL —— 数据控制语言(Data Control Language)
用来授予或回收访问 数据库的权限。