入门mysql
#查询有多少数据库 指令 show DATABASES
show databases;
#创建数据库 指令 Create DATABASE 名字
create database measurement;
#创建好数据库想要显示数据库信息 show create database measurement
show create database measurement;#显示的是默认的编码格式没有指定具体格式如Utf-8
#展示数据库编码格式
SHOW VARIABLES LIKE 'character%';
#设置数据库编码格式为utf-8
alter database measurement DEFAULT character set utf8;
#删除数据库 指令drop database 数据库名字
drop database measuremennt;
#数据类型
#整数类型 Tinyint 1个字节 SmallInt 2个字节 MEDIUMINT 3个字节 Int 4个字节 BIGINT 8个字节
#浮点型数据 FLOAT 4个字节 Double 8个字节 Decimal(M,D) M表示数据长度 D表示小数点后面数据长度
#日期与时间类型 Year Date Time DATETIME TIMESTAMP
#字符串和二进制
#Char 固定长度的字符串 'a' 'abc' 都是储存4个字节 binary固定长度的二进制数据
#Varchaar 可变长度字符串 'a' 储存需要一个字节 'abc'需要储存3个字节 varbinary可变长度的二进制数据
#BLOB 表示二进制大数据 TEXT 大文本数据 ENUM 枚举数据类型 SET 字符串对象 BIG位字段类型
#创建数据库
/*
CREATE TABLE 表名(
字段名1,数据类型[完整性约束条件],
字段名1,数据类型[完整性约束条件],
字段名1,数据类型[完整性约束条件],
...
)
*/
Create database itcast;
use itcast;
create table tb_grade(
id int(11),
name varchar(20),
grade float
)
show tables;
#查看数据表 show create table 表的名字
show create table tb_grade;
show create table tb_grade\G;
#使用DESCRIBE查看数据表 DESCRIBE 表名 简称DESC 表名
Describe tb_grade;
#修改数据表名字 alter table 旧表名字 rename to 新表名字
alter table tb_grade rename to grade;
show tables;
#修改字段名 alter table 表名 change 字段名字 新的字段名字 数据类型
alter table grade change name username VARCHAR(20);
show create table grade;
DESC grade;
#修改字段的数据类型 alter table 表名 modify 字段名字 数据类型
alter table grade modify id int(20);
desc grade;
#添加字段 alter table 表名 add 字段 数据类型
alter table grade add age int(10);
desc grade;
#删除字段
alter table grade drop age;
desc grade;
#修改字段的排列位置 alter table 表名 modify 字段名字 数据类型 first/after (某个字段名字)
alter table grade modify username varchar(20) first;
desc grade;
alter table grade modify id int(20) after grade;
desc grade;
#删除数据库 Drop table 表名
Drop table grade;
Desc grade;
#多表查询 创建数据库chapter05
Create DataBase chapter05;
Use chapter05;
Create table grade(
id int(4) not null primary key,
name varchar(36)
)
create table student(
sid int(4) not null primary key,
sname varchar(36),
gid int(4) not NULL
);
#为表添加外键约束
/*
alter table 表名 add constraint FK_ID forign key(外键字段名字) references 表名1 (主键字段名字)
*/
select * from grade;
select * from student;
alter table student add CONSTRAINT FK_ID foreign key(gid) references grade(id);
desc grade;
desc student;
show create table student;
/*
在表添加外键约束时,有些地方需要注意
1.建立外键的时候需要注意表必须是InnDB型,不能是临时表。因为在MYSQL中只有InnDB类型的表才能支持外键。
2.定义外键名时,不能加引号,如constraint 'fk_id'
*/
#删除外键约束 alter table 表名 drop foreign key 外键名
alter table student drop foreign key FK_ID;
#操作关联表 多对一 多对多 一对一
#添加数据
alter table student add constraint FK_ID foreign key(gid) references grade(id);
show create table student;
show create table grade;
alter table grade character set utf8;
alter table student character set utf8;
alter table student convert to character set utf8 ;
alter table grade convert to character set utf8 ;
insert into grade(id,name)values(1,'软件1班');
insert into grade(id,name)values(2,'软件2班');
select * from grade;
insert into student values(1,'王红',1),(2,'李强',1),(3,'赵四',2),(4,'贺娟',2);
select * from grade where name='软件1班';
select sname from student where gid=1;
#连接查询
create table department(
did int not null primary key,
dname varchar(20)
) CHARACTER SET utf8 COLLATE utf8_general_ci;
create table employee(
id int not null PRIMARY key,
name varchar(36),
age int(2),
did int not NULL
)CHARACTER SET utf8 COLLATE utf8_general_ci;
insert into department(did,dname) values(1,'网络部'),(2,'媒体部'),(3,'研发部'),(5,'人事部');
insert into employee(id,name,age,did) values(1,'王红',20,1),(2,'李强',22,1),(3,'赵四',20,2),(4,'郝娟',20,4);
#交叉连接
select * from department cross join employee;
#内连接 它和where效果一样 需要注意的是,这两个语句的查询结果虽然一样,但是join on是
#内连接语句,wherre是判断语句,在where语句可以直接添加其他软件,而
select * from department join employee on department.did=employee.did;
select * from department,employee where department.did=employee.did;
#外连接分为左连接和右连接和全外连接
/*
select 所有字段 from 表1 LEFT|RIGHT [OUTER] JOIN 表2
ON 表1.关系字段=表2.关系字段 where 条件
*/
#左连接
select * from employee;
select * from department;
select department.did,department.dname,employee.name from department Left Join employee on department.did=employee.did;
select department.did,department.dname,employee.name from department Right Join employee on department.did=employee.did;
select employee.name,employee.age,department.dname from department Join employee on department.did=employee.did;
#带In关键字的子查询
select * from department where did in (select did from employee where age=20);
#事务和储存过程 #所谓的事务就是针对数据库的一组操作,它可以由一条或则n条SQL语句组成,同一个事务的操作具备同步的操作, #如果一条语句不通过,那么所有语句不通过 #开启事务 start transaction; #开启事务之后就可以执行SQL语句,SQL语句执行成功之后,需要想用相应语句提交事务 #提交事务的语句具体如下 commit; #如果不想提交当前事务还可以使用相关语句取消事务rollback create database chapter06; use chapter06; create table account( id int primary key auto_increment, name varchar(20), money FLOAT )CHARACTER SET utf8 COLLATE utf8_general_ci;#collate:指定数据字符集排序的规则,utf8默认的排序规则为utf8_general_ci
show create table account; insert into account(name,money) values('a',1000),('b',1000); select * from account; #通过update 语句将a账户的100元准给b最后提交事务 start transaction; update account set money=money-100 where name='a'; update account set money=money+100 where name='b'; commit; select * from account; #原子性 一致性 隔离性 持久性 update account set money=money+100 where name='a'; update account set money=money-100 where name='b'; commit; select * from account; start transaction; update account set money=money-100 where name='a'; update account set money=money+100 where name='b'; select * from account; ROLLBACK; select * from account; #事务的隔离级别 数据库是多线程并发访问的,所以很容易出现多个线程同时开启事务的情况, #这样就会出现脏读、重复读和幻读情况
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?