学习:黑马

MySQL 基础

DDL基本操作

基础

1
2
3
4
5
6
7
8
9
10
11
12
-- 查看数据库
show databases;
-- 创建数据库
create database name; ( create schema name)
-- 使用
use dataname;
-- 创建表
create table if not exists tablename(
a int,
b varchar(20),
c date
);

表结构的常用操作

1
2
3
4
5
6
7
8
-- 查看所有表
show tables;
-- 查看指定某个表的创建语句
show create table tablename;
-- 查看表结构
desc tablename;
-- 删除表
drop table tablename;

插入数据

1
2
3
4
5
insert into tablename
-> (a,b,c) -- 字段(列)
-> values -- 属性(值)
-> (18,"fuck",now() -- 插入内容
-> );

读取数据表

1
2
3
select column_name from runoob_tbl;
-- column_name 列名,字段名
select * from table_name;

修改表结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
create table if not exists student(
-> side int unsigned,
-> name varchar(20),
-> gender varchar(10),
-> age int,
-> birth date,
-> score double
-> );

-- 添加列
alter table 表名 add 列名 类型(长度) [约束];
alter table student add dept varchar(20);

-- 修改列名和类型
alter table 表名 change 旧列名 新列名 类型(长度) [约束];
alter table student change dept department varchar(30);

-- 删除列
alter table 表名 drop 列名;
alter table student drop department;

-- 修改表名(注意是表名)
rename table 旧表名 to 新表名;
rename table student to stu;

DML基本操作

插入 insert

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
-- 插入数据
-- 方法一(数据类型一一对应)
insert into stu(side,name,gender,age,birth,score)
-> values(
-> 1001,'李白','男',28,'2021-02-03',99.5
-> );

-- 方法二(向表中插入所有列)
insert into stu values(
-> 1010,'王昭君','女',18,'2020-02-03',92.4
-> );

-- 多列插入
insert into stuinfo values
-> (NULL,'CARRA','N',29,'AAAs',75.3),
-> (NULL,'CAA','N',29,'AA23As',75.2),
-> (NULL,'CuAA','N',29,'AA23As',75.2);

删除 delete

1
2
3
4
5
6
7
8
-- 格式1:delete from 表名 【where 条件】
-- 格式2:truncate table 表名 【truncate 表名】
-- 删除符合条件的数据
delete from stu where side=1002;
-- 删除所有数据(只删除内容)
delete from stu;
-- 清空表数据(更彻底,“删除表,再创建新表”)
truncate stu;

更新 update

1
2
3
4
5
6
-- 修改表结构
-- 格式1 update 表名 set 字段名 = 值,字段名=值....;
-- 格式2 update 表名 set 字段名 =值,字段名=值...where 条件;
update stu set side=1002;
update stu set side=1003 where side>1002;
update stu set age=10 where name = 'Marry'; -- 字符型加引号

复制表

1
2
3
4
-- 只复制表结构
create table book like 图书表;
-- 复制表结构和数据
create table book2 as (select * from 图书表);

MySQL约束

创建主键

1
2
3
4
5
6
7
8
9
10
11
12
-- 在create table语句中,通过PRIMARY KEY关键字来指定主键。
-- 一在定义字段的同时指定主键,语法格式如下:
create table表名(
<字段名> <数据类型>primary key
...
)

-- 方式2
-- 在定义字段之后再指定主键,语法格式如下:
create table表名(
[constraint <约束名>] primary key[字段名]
)
1
2
3
4
5
6
7
8
9
10
11
12
13
create table QQ(
-> name varchar(20),
-> id int primary key, -- 设置主键
-> addr varchar(20)
-> );

create table QQ(
-> id int,
-> name varchar(20),
-> addr int,
-> primary key(id) -- 设置主键(可以设置联合主键)
-> );

1
2
3
4
5
6
7
8
9
-- 通过修改表结构添加主键
-- 主键约束不仅可以在创建表的同时创建,也可以在修改表时添加。
-- 语法:
create table表名(
...
);
table<表名>add primary key(字段列表);

alter table stu add primary key(side);

删除主键

1
2
--  alter table <表名> drop primary key;
alter table stu drop primary key;

MySQL约束-自增长约束(auto_increment)

◆概念

在MySQL中,当主键定义为自增长后,这个主键的值就不再需要用户输入数据了,而由数据库系统根据定义自动赋值。
每增加一条记录,主键会自动以相同的步长进行增长。
通过给字段添加auto_increment属性来实现主键自增长

◆特点
  • 默认情况下,auto_increment的初始值是1,每新增一条记录,字段值自动加1。
  • 一个表中只能有一个字段使用auto increment约束,且该字段必须有唯一索引,以避免序号重复(即为主键或主键的一部分)。
  • auto_increment约束的字段必须具备NOT NULL属性
  • auto_increment约束的字段**只能是整数类型(**TINYINT、SMALLINT、INT、BIGINT等。
  • auto increment约束字段的最大值受该字段的数据类型约束,如果达到上限,auto_increment就会失效。
◆delete和truncate在删除后自增列的变化

delete 删除数据之后自动增长从断点开始

truncate 删除数据之后自动增长从默认起始值开始

◆语法
1
2
3
4
5
6
7
8
9
10
-- 字段名  数据类型  auto_increment

create table tablename(
id int primary key auto_increment,
name varchar(20)
)auto_increment=100;

alter table tablename auto_increment;

insert into tablename values(NULL,'张三')

MySQL约束-非空约束(not null)

◆概念

MySQL非空约束(not null)指字段的值不能为空。对于使用了非空约束的字段,如果用户在添加数据时没
有指定值,数据库系统就会报错。

◆语法
1
2
-- 方式1:<字段名> <数据类型> not nu11;
-- 方式2:alter table表名 modify 字段类型 not nul1;
◆添加非空约束-方式1
1
2
3
4
5
6
-- 方式1,创建表时指定
create table t user6()
id int,
name varchar(20) not null,
address varchar(20) not null
);
◆添加非空约束-方式2
1
2
3
4
5
6
7
8
-- 方式2,创建表之后指定
create table t user7(
id int
name varchar (20),
address varchar(20)
);
alter table t_user7 modify name varchar(20) not null;
alter table t_user7 modify address varchar(20) not null;
◆删除非空约束

重新定义表结构不加约束

1
2
3
-- alter table 表名 modify 字段类型
alter table t_user7 modify name varchar(20);
alter table t_user7 modify address varchar(20);

MySQL约束-唯一约束(unique)

唯一约束(Unique Key)是指所有记录中字段的值不能重复出现。例如,为id字段加上唯一性约束
后,每条记录的d值都是唯一的,不能出现重复的情况。

◆语法
1
2
方式1:<字段名><数据类型>unique
方式2:alter table表名add constraint约束名unique(列);
  • 添加唯一约束-方式1
1
2
3
4
5
6
7
-- 创建表时指定
create table t user8(
id int,
name varchar(20),
phone_number varchar(20) unique -- 指定唯一约束
-- 在MySQL中NULL和任何值都不相同
);
  • 添加唯一约束-方式2-创建表之后指定
1
2
3
4
5
6
7
-- 格式:alter table 表名 add constraint 约束名 unique (列);
create table t_user9(
id int,
name varchar(20),
phone_number varchar(20) -- 指定唯一约束
);
alter table t_user9 add constraint unique_pn unique(phone_number);
  • 删除唯一约束
1
2
3
-- 格式:alter table<表名>drop index <唯一约束名>;
-- 方式1创建约束,默认约束列的列名为约束名
alter table t_user9 drop index unique_pn;

DQL查询

WHERE 子句中的运算符

下面的运算符可以在 WHERE 子句中使用:

运算符描述
=等于
<>不等于。注释:在 SQL 的一些版本中,该操作符可被写成 !=
>大于
<小于
>=大于等于
<=小于等于
BETWEEN在某个范围内
LIKE搜索某种模式
IN指定针对某个列的多个可能值

数据库查询

定义别名
1
2
select 列名 as 别名 from stu;
select 列名 别名 from stu;
替换查询结果中的数据
1
2
3
4
5
select *,case
when age>=18 then '成年'
when age<18 then '未成年'
end as 状态
from stu;
消除结果集中的重复行
1
2
3
select distinct 列名 from 表名;

select distinct * from stu;

模式匹配

1
2
3
4
5
6
7
表达式 [not] like 表达式

select * from 图书表 where 书号 like 'A%';
select * from 图书表 where 书号 like '_3%';
-- 查找转义字符%
select * from 图书表 where 书号 like '#%%' escape '#';

通配符描述
%替代 0 个或多个字符
_替代一个字符
[charlist]字符列中的任何单一字符
[^charlist] 或 [!charlist]不在字符列中的任何单一字符
范围比较
1
2
3
4
5
6
7
8
9
select * from 图书表
where 单价 between 20 and 30;
select *from 图书表
where 单价>20 and 单价<30;
select * from 图书表
where 单价 not between 20 and 30;

select * from 图书表
where 单价 in(18.5,28,12,39);
空值比较
1
2
表达式 is [not] null;
select * from 图书表 where 单价 is null;
1
2
3
4
5
6
7
8
#include<iostream>
using name spacestd;
int main(){
int a;
int b;
cout<<a+b<<endl;
}

索引

image-20220813153008935

image-20220813153037128

image-20220813153224433

image-20220813153503238