数据库层面的操作
查询
## 显示当前mysql中的数据库列表
show databases;
## 显示指定名称的数据的创建的SQL指令
show create database <dbName>
创建
## 创建数据库 dbName表示创建的数据库名称,可以⾃定义
create database <dbName>;
## 创建数据库,当指定名称的数据库不存在时执⾏创建
create database if not exists <dbName>;
## 在创建数据库的同时指定数据库的字符集(字符集:数据存储在数据库中采⽤的编码格式utf8 gbk)
create database <dbName> character set utf8;
修改
## 修改数据库的字符集
alter database <dbName> character set utf8; # utf8 gbk
删除
## 删除数据库
drop database <dbName>;
## 如果数据库存在则删除数据库
drop database is exists <dbName>
使用
use <dbName>
数据表
创建
create table students(
stu_num char(8) not null unique,
stu_name varchar(20) not null,
stu_gender char(2) not null,
stu_age int not null,
stu_tel char(11) not null unique,
stu_qq varchar(11) unique
);
查询数据表
show tables;
查询表结构
desc <tableName>
删除
# 删除数据表drop table <tableName>;## 当数据表存在时删除数据表drop table if exists <tableName>;
修改(alter)
## 修改表名alter table <tableName> rename to <newTableName>;## 数据表也是有字符集的,默认字符集和数据库⼀致alter table <tableName> character set utf8;## 添加列(字段)alter table <tableName> add <columnName> varchar(200);## 修改列(字段)的列表和类型alter table <tableName> change <oldColumnName> <newCloumnName> <type>;## 只修改列(字段)类型alter table <tableName> modify <columnName> <newType>;## 删除列(字段)alter table stus drop <columnName>;
修改DML(insert、delete、update)
insert
语法:
insert into <tableName>(columnName,columnName....)values(value1,value2....);
## 向数据表中指定的列添加数据(不允许为空的列必须提供数据)insert into stus(stu_num,stu_name,stu_gender,stu_age,stu_tel)values('20210101','张三','男',21,'13030303300');## 数据表名后的字段名列表顺序可以不与表中⼀致,但是values中值的顺序必须与表名后字段名顺序对应insert into stus(stu_num,stu_name,stu_age,stu_tel,stu_gender)values('20210103','王五',20,'13030303302','⼥');## 当要向表中的所有列添加数据时,数据表名后⾯的字段列表可以省略,但是values中的值的顺序要与数据表定义的字段保持⼀致;insert into stus values('20210105','琦','男',21,'13030303304','666666');## 不过在项⽬开发中,即使要向所有列添加数据,也建议将列名的列表显式写出来(增强SQL的稳定性)insert into stus(stu_num,stu_name,stu_gender,stu_age,stu_tel,stu_qq)values('20210105','孙琦','男',21,'13030303304','666666');
delete
语法:
delete from <tableName> [where conditions];
示例:
## 删除学号为20210102的学⽣信息delete from stus where stu_num='20210102';## 删除年龄⼤于20岁的学⽣信息(如果满⾜where⼦句的记录有多条,则删除多条记录)delete from stus where stu_age>20;## 如果删除语句没有where⼦句,则表示删除当前数据表中的所有记录(敏感操作)delete from stus;
update
语法:
update <tableName> set columnName=value [where conditions]
示例:
## 将学号为20210105的学⽣姓名修改为“孙七”(只修改⼀列)update stus set stu_name='孙七' where stu_num='20210105';## 将学号为20210103的学⽣ 性别修改为“男”,同时将QQ修改为 777777(修改多列)update stus set stu_gender='男',stu_qq='777777' wherestu_num='20210103';## 根据主键修改其他所有列update stus set stu_name='韩梅梅',stu_gender='⼥',stu_age=18,stu_tel='13131313311' ,stu_qq='999999'where stu_num='20210102';## 如果update语句没有where⼦句,则表示修改当前表中所有⾏(记录)update stus set stu_name='Tom';
DQL查询(单表多表)
select
## select 关键字后指定要显示查询到的记录的哪些列select colnumName1[,colnumName2,colnumName3...] from <tableName> [whereconditions];## 如果要显示查询到的记录的所有列,则可以使⽤ * 替代字段名列表 (在项⽬开发中不建议使⽤*)select * from stus;
例如:
select stu_num from stus where stu_age<100;
这个示例就会展示所有stu_age小于100的人的stu_num
也可以使用select来进行
where(运算符)
条件子句
用的多了
看看运算符:
# = 等于select * from stus where stu_num = '20210101';## != <> 不等于select * from stus where stu_num != '20210101';select * from stus where stu_num <> '20210101';## > ⼤于select * from stus where stu_age>18;## < ⼩于select * from stus where stu_age<20;## >= ⼤于等于select * from stus where stu_age>=20;## <= ⼩于等于select * from stus where stu_age<=20;## between and 区间查询 between v1 and v2 [v1,v2]select * from stus where stu_age between 18 and 20;
between
逻辑运算符(and、or、not)
# = 等于select * from stus where stu_num = '20210101';## != <> 不等于select * from stus where stu_num != '20210101';select * from stus where stu_num <> '20210101';## > ⼤于select * from stus where stu_age>18;## < ⼩于select * from stus where stu_age<20;## >= ⼤于等于select * from stus where stu_age>=20;## <= ⼩于等于select * from stus where stu_age<=20;## between and 区间查询 between v1 and v2 [v1,v2]select * from stus where stu_age between 18 and 20;
like(模糊查询)
在like关键字后的reg表达式中 :
- % 表示任意多个字符 【 %o% 包含字⺟o】
- _ 表示任意⼀个字符 【 _o% 第⼆个字⺟为o】
示例:
# 查询学⽣姓名包含字⺟o的学⽣信息select * from stus where stu_name like '%o%';# 查询学⽣姓名第⼀个字为`张`的学⽣信息select * from stus where stu_name like '张%';# 查询学⽣姓名最后⼀个字⺟为o的学⽣信息select * from stus where stu_name like '%o';# 查询学⽣姓名中第⼆个字⺟为o的学⽣信息select * from stus where stu_name like '_o%';
数据类型
基本数据类型
字符串类型
字段约束
not null;uniqueprimary key ##not null and uniqueforeign key
1.约束操作
1.1删除主键约束
alter table books drop primary key;
1.2创建表之后添加主键约束
## 创建表时没有添加主键约束create table books( book_isbn char(4), book_name varchar(10) not null, book_author varchar(6));## 创建表之后添加主键约束alter table books modify book_isbn char(4) primary key;
1.3主键自动增长
定义int类型字段自动增长:
auto_increment
例如:
create table types( type_id int primary key auto_increment, type_name varchar(20) not null, type_remark varchar(100));
注意:⾃动增⻓从1开始,每添加⼀条记录,⾃动的增⻓的列会⾃定+1,当我们把某条记录删除之后再添加数据,⾃动增⻓的数据也不会重复⽣成(⾃动增⻓只保证唯⼀性、不保证连续性
1.4 定义联合主键
定义:联合主键——将数据表中的多列组合在⼀起设置为表的主键
create table grades( stu_num char(8), course_id int, score int, primary key(stu_num,course_id));
[外链图片转存中…(img-0pQ3S7oB-1636288927032)]
(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20211106163658996.png)]