mysql总结——(1)增删改

.


前言

这块的学习我使用的软件是DataGrip 2023.1.1,大家选择自己喜欢的就好。
使用的是mysql语句。


sql语句总结

软件的使用

安装配置mysql环境不在赘述,网络上的教程也很多了。但是大家一定要记住自己数据库的账号和密码。
我们首先创建一个数据库。
在这里插入图片描述

然后数据源选择MySQL
在这里插入图片描述
然后输入数据库的账号和密码就可以了。
点击左下角的Test Connection测试连接,成功的话就是说明连接成功了,然后创建就可以了。
在这里插入图片描述
然后就是创建数据库了
在这里插入图片描述
然后就可以创建成功了,当然也可以通过

create schema schema_name;

在consle创建数据库。
下面的所有语句都是在consle里面执行的sql语句。

sql简介

SQL是结构化查询语言(Structured Query Language)的缩写,是一种用于管理关系数据库的标准计算机语言。


sql分类

SQL语言按照功能可分为五种:

DDL语句(数据定义语言)CreateAlterDropDeclareTruncate

DQL语句(数据查询语言)Select

DML语句(数据操作语言)InsertUpdateDeleteMerge

DTL语句(事务控制语句)CommitRollbackSavepoint

DCL语句(数据控制语言)GrantRevoke


sql特点

SQL的特点有以下几个 :

  • 综合统一:SQL语言集数据定义语言DDL、数据操纵语言DML、数据控制语言DCL的功能于一体,语言风格统一,可以独立完成数据库生命周期中的全部活动。
  • 高度非过程化:非关系数据模型的数据操纵语言是面向过程的语言,用其完成某项请求,必须指定存取路径。而用SQL语言进行数据操作,用户只需提出“做什么”,而不必指明“怎么做”,因此用户无需了解存取路径,存取路径的选择以及SQL语句的操作过程由系统自动完成。
  • 易学易用:SQL是一种非过程性语言,易于学习和使用。
  • 可移植性:SQL具有较好的可移植性,可以在不同的数据库系统中运行。

数据类型

在数据库中存储数据,创建表的时候就应该表明对应的数据类型。

常用的数据类型

这里列举了一些比较常用的数据类型,并不包含全部。

  • 字符数据类型

字符类型分为两种:一种是定长的,一种不定长。

数据类型说明
Char1~255个字符的定长串,它的长度必须在创建时指定,否则MySQL假定为CHAR(1)
Varchar可变长度,最多不超过255字节,如在创建时指定VARCHAR(n),则可存储0~n个字符的变长串

两种字符串数据类型的选择,可以通过要求进行选择,比如像是身份证、性别、生日等都是定长的,因为长度是确认的,而像评论,留言等不确定的信息就可以使用varchar。

  • 数值数据类型
类型说明存储需求取值范围
int4字节有符号值:-2147683648 到2147683647(- 231 到231- 1)
无符号值:0到4294967295(0 到232 – 1)
double8字节最小非零值:±2.2250738585072014e –308

mysql提供了五种整型,取值范围不同,整数列可以定义为unsigned,表示禁用负值。

浮点型与整型不同,浮点型不能是unsigned的,取值范围也不同。

对于浮点值,double占用float的两倍空间。除非特别需要高精度或范围极大的值,一般应使用只用一半存储代价的float型来表示数据。

  • 日期类型
数据类型存储字节数取值范围
Date41000-01-01–9999-12-31
Time3-838:59:59–838:59:59
Datetime81000-01-01 00:00:00–9999-12-31 23:59:59
Timestamp41970-01-01 08:00:01 – 2038-01-19 11:14:07
Year11901–2155
  • 二进制数据类型
数据类型说明
Tityblob最大长度为255字节
Blob最大长度为64KB
Mediumblob最大长度为16MB
Longblob最大长度为4GB

sql语句——DDL

创建表

SQL CREATE TABLE语句用于创建数据库中的表。表由行和列组成,每个表都必须有个表名。SQL CREATE TABLE语法如下:

CREATE TABLE 表名称 (
  列名称1 数据类型,
  列名称2 数据类型,
  列名称3 数据类型,
 ....
);

例:

CREATE TABLE user (
    username VARCHAR(255) NOT NULL,
    password VARCHAR(255) NOT NULL,
    sex CHAR(1),
    email VARCHAR(255),
    age INT
);

创建了一个用户表,一共五列,username,password,gender,email,age。其中username和password不为空,也就是添加数据时,必须包括名字和密码。没有必要要求的列是可以为空的。

上面所创建的用户表,是不包含主键的。

在MYSQL中,主键不是必要的,但没有主键的表是难以管理的,因为没有主键时就无法对表中的记录进行标识。

CREATE TABLE user (
	id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(255) NOT NULL,
    password VARCHAR(255) NOT NULL,
    gender VARCHAR(255),
    email VARCHAR(255),
    age INT
);

这张表中就包含了主键id,并且设置了AUTO_INCREMENT,主键自增。

因为主键是标识作用的,所有主键具有唯一性。比如上面的user表中不会出现id相同的数据,但是表中的其他数据都有很大的可能会重复。

在DataGrip中,都是可以通过Modify生成的,但我们是为了学习sql语句,所以下面正常篇幅都是通过自己编写sql语句创建生成的。
在这里插入图片描述

复制表

可以通过一个已有数据表创建一个新的数据表,并且将选择需要的数据插入到新的数据表中。

语法:

create table 表名 as select语句;

上面的语句会自动创建表,并将符合查询条件的数据复制到新创建的表中。

例1:

create table user1	as(select username,age,email from user)

我们按照user表创建了一个新的表user2,并且将user表中username,age,emai三列的数据,插入到了新表中。因为复制的user表中的三行数据,所以新创建的user1表中就会包含对应的表结构和数据。

例2:

create table user2	as(select username,age,email from user where age>20)

我们创建user3表,并且要求年龄大于二十,进行一次筛选,只有大于二十岁的才会被复制到新的表中。

例3:

create table user3	as(select username,age,email from user where 1=2)

当where条件不成立时,只创建新表,不插入任何数据

例4:

create table user3	as(select username,age,email from user where 1=1)

当where条件成立时,创建新表,并且插入全部数据。

注意:create复制表,主键,唯一键,索引等是不会被复制的!!!

删除表

删除表中数据

TRUNCATE TABLE user;

这个语句可以删除user表中的所有数据并且重置自增主键的操作。

那么下次我们在user表中增加数据时,他的主键是重新从1开始的。

注意,这个表的删除速度快,但不能撤销,谨慎使用。

ddl语句是无法回滚的,在开启事务之后,dml是可以回滚的。

删除整张表

drop table 表名;

这个语句可以把整张表删掉,也是无法撤销,速度很快。

修改表

alter可以修改表名和表的注释,也可以修改字段的信息。

例1,修改表名:

alter table user rename to students;

例2,修改表注释:

alter table students comment '学生信息表';

例3,修改字段类型和备注:

alter table students modify column username varchar(20) COMMENT '学生姓名';

其他不再做举例,自己可以试试。

最后还差一个Declare,声明游标的,在后面解释。


sql语句——DML

1、新增数据

使用SQL的INSERT INTO语句可以将新数据插入到表中。语法如下:

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

例如,要在名为“user”的表中添加一条记录,可以使用以下命令:

INSERT INTO user (username,password, age, gender) VALUES ('张三', '123456',20, '男');
INSERT INTO user VALUES ('张三', '123456','男','1234@xx.com',20);

如果有些列的值为空可以采取第一种写法,表明列和对应的值。

如果是整个user表,可以省略前面括号内的列名,但是每一列的值要和顺序对应上。

由于字段的数据类型不同,在书写字段值时需要注意格式.

数值型字段,可以直接写值.

字符型字段,值左右两边需加单引号.

日期型字段, 值上要加单引号,同时还要注意年、月、日的排列顺序

注意:列名与要插入的值要一一对应,字符型和日期型要加单引号,非空列必须有值.values中数值的顺序和建表时字段的顺序和数量是一致的。

增加多行数据

语法

insert into 数据表(字段名1,字段名2,......)
values (字段名1的值,字段名2的值,......),(字段名1的值,字段名2的值,......),(字段名1的值,字段名2的值,......)

例:

INSERT INTO user (username,password, age, gender) VALUES ('张三','123465', 20, '男'),('李四','666666',21,'男');

复制数据

语法:

insert into 数据表(字段名1,字段名2,......)
(select (字段名1或运算,字段名2或运算,......)
from 数据表 where 条件)

例:

insert into user1(id,name,age)
(select userId,name,age from user where age>=18)

2、删除数据

使用SQL的DELETE语句可以从表中删除数据。语法如下:

DELETE FROM 表名称 WHERE 条件;

例如,要从名为“user”的表中删除所有未成年的用户信息,可以使用以下命令:

DELETE FROM user WHERE age < 18;

如果只想删除特定用户的信息,则可以在WHERE子句中指定条件:

DELETE FROM user WHERE name = '张三';

使用delete命令可以删除数据,使用truncate命令可以删除整张表里所有的数据。

删除记录

语法:

delete from 数据表 where 条件

删除李四的用户信息:

delete from user where username ='李四'

username为李四的那一行的所有数据就会被删除。

删除年龄小于十八岁的的用户信息:

delete from user where age < 18

整表数据删除

在SQL编辑窗口中执行:

truncate table user

truncate table命令将快速删除数据表中的所有记录,但保留数据表结构。

这种快速删除与delete from 数据表的删除全部数据记录不一样。

delete命令删除的数据将保存在系统回滚段中,需要的时候,数据可以回滚回复,而truncate 命令不可以。

级联删除

例:删除学生id为10的上课记录和选课记录

第1步:创建三个表

CREATE TABLE student (
  student_id INT PRIMARY KEY AUTO_INCREMENT,
  student_name VARCHAR(100) NOT NULL,
  student_age INT,
  student_gender VARCHAR(10),
  student_major VARCHAR(100)
);

CREATE TABLE course (
  course_id INT PRIMARY KEY AUTO_INCREMENT,
  course_name VARCHAR(100) NOT NULL,
  course_teacher VARCHAR(100),
  course_credit INT
);

CREATE TABLE score (
  score_id INT PRIMARY KEY AUTO_INCREMENT,
  student_id INT,
  course_id INT,
  score_value FLOAT,
  FOREIGN KEY (student_id) REFERENCES student(student_id),
  FOREIGN KEY (course_id) REFERENCES course(course_id)
);

创建了三个表,学生信息表,课程信息表和成绩表,并且其中的成绩表是和另外两个表有关联的。

外键 关联其他表的主键或唯一键:

FOREIGN KEY (student_id) REFERENCES student(student_id);

这条语句就是将student表中的student_id作为外键,将两个表连接起来。

第二步:

在表中添加一些数据

INSERT INTO student (student_name, student_age, student_gender, student_major)
VALUES ('Alice', 20, 'Female', 'Computer Science'),
       ('Bob', 19, 'Male', 'Engineering'),
       ('Cathy', 21, 'Female', 'Mathematics'),
       ('David', 22, 'Male', 'English');
INSERT INTO course (course_name, course_teacher, course_credit)
VALUES ('Math', 'Professor Smith', 3),
       ('Physics', 'Professor Johnson', 4),
       ('History', 'Professor Brown', 3),
       ('English', 'Professor Davis', 2);
INSERT INTO score (student_id, course_id, score_value)
VALUES (1, 1, 85),
       (1, 2, 92),
       (2, 1, 78),
       (2, 3, 88),
       (3, 2, 90),
       (3, 4, 95),
       (4, 3, 86),
       (4, 4, 78);

删除外键:

alter table 表名 drop foreign key 外键名;

这里要注意的是外键名不是列名,是创建外键的时候生成的名字,可以自己设置也可以默认生成。

创建表之后再新增外键:

alter  table  表名  add  constraint  外键名 foreign  key(本表字段列表)  references  主表名(字段列表);

此处可以自己设置外键的名字。

级联删除:删除主键表中的数据,由数据库自动删除外键表中的相关数据,也可以进行以下设置:

no action 不允许删除

set null 置空

cascade 级联,一起删

alter  table  score  add  constraint  student_id foreign  key(student_id) references student(student_id) on delete cascade;

这里我们设置了级联删除。

RESTRICT、NO ACTION表示子级有数据改变是父级数据不更新

SET NULL 表示父级在更新或者删除时将子记录列的值设为null

ON DELETE CASCADE 表示父记录删除时子记录对应的列数据也删除

ON UPDATE CASCADE 表示父记录更新时子记录对应的列数据也更新。

第三步:

我们在student表中执行:

DELETE FROM student WHERE student_id = 1;

我们就会发现score里相对应的课程分数也会被删除,也就是删除学生信息后,其他和他有关的信息也被删除了。

但在实际应用中,我们还是要看要求使用外键。

限制删除条数

delete from students where sex ='男' limit 22

delete from students where sex ='男' order by age limit 2

3、修改数据

使用SQL的UPDATE语句可以更新表中的现有数据。语法如下:

UPDATE 表名称 SET1 =1,2 =2, ... WHERE 条件;

例如,要将名为“students”的表中所有学生的年龄增加1岁,可以使用以下命令:

UPDATE students SET age = age + 1;

如果只想更新特定学生的信息,则可以在WHERE子句中指定条件:

UPDATE students SET age = age + 1 WHERE name = 'Tom';   

修改一条数据

修改数据使用的命令是update。

语法:

update 数据表
set 字段名1=新的值,字段名2=新的值,...... where  条件

修改张三的用户信息

update user 
set gender='女', password='123456',email='1237@xx.com' 
where  name='张三'

修改多条数据

例1:将所有未成年人的年龄+1

update user 
set age = age + 1
where  age<18

嵌套修改

语法

update 数据表 
set 字段名1=(select 字段列表 from 数据表 where 条件),
字段名2=(select 字段列表 from 数据表 where 条件),...
where  条件

注意此时嵌套的数据表和外面要修改的数据表不能是一样的,否则会报错。


总结

今天现总结到这里了,查询打算整个整理好之后再发上来,所以这篇就先到这里了b( ̄▽ ̄)d。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qiulaizhiwo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值