.
文章目录
前言
这块的学习我使用的软件是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语句(数据定义语言)Create、Alter、 Drop、Declare、Truncate
DQL语句(数据查询语言)Select
DML语句(数据操作语言)Insert、Update、Delete、Merge
DTL语句(事务控制语句)Commit、Rollback、Savepoint
DCL语句(数据控制语言)Grant、Revoke
sql特点
SQL的特点有以下几个 :
- 综合统一:SQL语言集数据定义语言DDL、数据操纵语言DML、数据控制语言DCL的功能于一体,语言风格统一,可以独立完成数据库生命周期中的全部活动。
- 高度非过程化:非关系数据模型的数据操纵语言是面向过程的语言,用其完成某项请求,必须指定存取路径。而用SQL语言进行数据操作,用户只需提出“做什么”,而不必指明“怎么做”,因此用户无需了解存取路径,存取路径的选择以及SQL语句的操作过程由系统自动完成。
- 易学易用:SQL是一种非过程性语言,易于学习和使用。
- 可移植性:SQL具有较好的可移植性,可以在不同的数据库系统中运行。
数据类型
在数据库中存储数据,创建表的时候就应该表明对应的数据类型。
常用的数据类型
这里列举了一些比较常用的数据类型,并不包含全部。
- 字符数据类型
字符类型分为两种:一种是定长的,一种不定长。
数据类型 | 说明 |
---|---|
Char | 1~255个字符的定长串,它的长度必须在创建时指定,否则MySQL假定为CHAR(1) |
Varchar | 可变长度,最多不超过255字节,如在创建时指定VARCHAR(n),则可存储0~n个字符的变长串 |
两种字符串数据类型的选择,可以通过要求进行选择,比如像是身份证、性别、生日等都是定长的,因为长度是确认的,而像评论,留言等不确定的信息就可以使用varchar。
- 数值数据类型
类型说明 | 存储需求 | 取值范围 |
---|---|---|
int | 4字节 | 有符号值:-2147683648 到2147683647(- 231 到231- 1) 无符号值:0到4294967295(0 到232 – 1) |
double | 8字节 | 最小非零值:±2.2250738585072014e –308 |
mysql提供了五种整型,取值范围不同,整数列可以定义为unsigned
,表示禁用负值。
浮点型与整型不同,浮点型不能是unsigned的,取值范围也不同。
对于浮点值,double占用float的两倍空间。除非特别需要高精度或范围极大的值,一般应使用只用一半存储代价的float型来表示数据。
- 日期类型
数据类型 | 存储字节数 | 取值范围 |
---|---|---|
Date | 4 | 1000-01-01–9999-12-31 |
Time | 3 | -838:59:59–838:59:59 |
Datetime | 8 | 1000-01-01 00:00:00–9999-12-31 23:59:59 |
Timestamp | 4 | 1970-01-01 08:00:01 – 2038-01-19 11:14:07 |
Year | 1 | 1901–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 2,2
delete from students where sex ='男' order by age limit 2
3、修改数据
使用SQL的UPDATE语句可以更新表中的现有数据。语法如下:
UPDATE 表名称 SET 列1 = 值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。