MySQL

数据类型

  • 数值:注意数值类型范围
  • 日期时间
  • 字符串

终端操作

  • 登录数据库服务器:
mysql -uusername -ppassword
  • 退出登录:
exit;
  • 查看数据服务器里面有的数据库:
show databases;
  • 创建数据库:
create database [数据库名];
  • 删除数据库
drop database [数据库名];
  • 选中要操作的数据库:
use [数据库名];
  • 查看数据库中的表:
show tables;
  • 创建表:
create table [表名] ([字段名] 字段类型(字段值长度) , [字段名] [ 字段类型 [(字段值长度)] ]);
  • 查看表的信息,表结构,字段信息等
describe [表名];
desc [表名];
  • 删除表
drop table [表名];
  • 增加数据:
insert into [表名] [(字段表)] values([字段值表]);
  • 删除数据:
delete from [表名] where [字段名]=[字段值];
  • 修改数据:
update [表名] set [字段名]=[字段值];
  • 查询数据:
select * from [表名] [where [字段名]=[字段值]];

  查询特定字段

select [字段名] from [表名];

  查询特定字段排重

select distinct [字段名] from [表名];

  与查询

select * from [表名] where [字段名] between [1] and [2];
select * from [表名] where [字段名] > [1] and [字段名] < [2];

  或查询

select * from [表名] where [字段名] in([1],[2],[3]);
select * from [表名] where [字段名1]=[1] or [字段名2]=[2];

  排序

#升序
select * from [表名] order by [字段名] asc;
#降序
select * from [表名] order by [字段名] desc;

  统计个数

select count(*) from [表名] where [字段名]=[字段值];

  获取最大最小值

select [字段名] from [表名] where [字段名]=(select max([字段名]) from [表名]);
#最大max
#最小min

  分组取平均值

select avg([字段名]) from [表名] group by [字段名];

  分组

group by [字段名];

  模糊查询

like 'a%'
not like 'a%'

  多表查询

select [1.字段],[2.字段] from [表名1],[表名2] where [从表.外键]=[主表.被关联字段];

  取并集

union

  至少,任意一个

any

  所有

all

  别名

as

sql的连接查询

  • 内连接:查询两张表相关的数据
    inner join 或者 join
select * from [1] inner join [2] on [1.字段1]=[2.字段2];
  • 外连接
  1. 左连接:left join 或者 left outer join
select * from [1] left join [2] on [1.字段1]=[2.字段2];
  1. 右连接:right join 或者 right outer join
select * from [1] right join [2] on [1.字段1]=[2.字段2];
  1. 完全外连接:full join 或者 full outer join
    MySQL不支持full join可以用左连接 union 右连接代替
select * from [1] full join [2] on [1.字段1]=[2.字段2];

MySQL约束

  1. 创建表的时候添加约束(注意联合约束)
  2. alter table [表名] add [约束]( [字段名] );
  3. alter table [表名] modify [字段名] [字段类型] [约束];
  4. 删除使用alter table [表名] drop ...;
  • 主键约束
    唯一确定表中的一条记录,不重复且不能为空。
create tsble [表名](
	id int primary key,
	name varchar(20)
);

  联合主键

create tsble [表名](
	id int,
	name varchar(20),
	password varchar(20),
	primary key(id,name)
);

  注意:联合主键只要多个主键不同时重复也可以。
  如果建表的时候忘记设置主键

alter table [表名] add primary key([字段名]);

  删除主键

alter table [表名] drop primary key;

  通过修改字段的方式添加主键

alter table [表名] modify [字段名] [字段类型] primary key;
  • 自增约束
create table [表名](
	id int primary key auto_increment;
	name varchar(20)
);

  设置为自增约束的字段可以不传值,配合主键使用。

  • 唯一约束
      约束字段值不可重复
create table [表名](
	id int unique,
	name varchar(20)
);

  注意:下面这种方式同时设置多个字段时是联合的,不能同时重复

create table [表名](
	id int,
	name varchar(20),
	unique(id,name)
);
alter table [表名] add unique([字段名]);
alter table [表名] modify [字段名] [字段类型] unique;

  删除唯一约束

alter table [表名] drop index [字段名];
  • 非空约束
      修饰的字段不能为空
create table [表名](
	id int,
	name varchar(20) not null
);
  • 默认约束
      添加字段的时候没有传值就使用默认值
create table [表名](
	id int,
	name varchar(20),
	age int default 18
);
  • 外键约束
      涉及联合表:主表,从表
create table classes(
	id int primary key,
	name varchar(20)
);

create table students(
	id int primary key,
	name varchar(20),
	class_id int,
	foreign key(class_id) references classes(id)
);

  主表中没有的数据值,在从表里是不能用的;
  主表中被从表引用的数据不能被删除。

数据库设计的三大范式

  1. 第一范式:数据表中的所有字段都是不可分割的原子值;
      拆分的越细越容易操作,但不一定都是好处。
  2. 第二范式:满足第一范式的前提下,除主键的每个字段都必须完全依赖于主键;
      如果出现不完全依赖,只可能发生在联合主键的情况下。这时候就要拆表。
  3. 第三范式:满足第二范式的前提下,除主键外其他字段不能有传递依赖。

MySQL事务
  不可分割的最小工作单元,保证一个业务的完整性。
  MySQL默认开启事务(自动提交)

select @@autocommit;

  结果

+--------------+
| @@autocommit |
+--------------+
|            1 |
+--------------+

  关闭自动提交

set autocommit=0;

  关闭自动提交后可以回滚,提交的话需要手动提交

事务的四大特征

  • A 原子性:事务是最小单位,不可分割;
  • C 一致性:同一事务中的sql 语句,必须同时成功或者同时失败;
  • I 隔离性:事务1和事务2之间是具有隔离性的;
  • D 持久性:事务一旦结束,就不可返回。

事务开启

  • 自动开启
  • 手动开启
begin;
#或者
start transaction;

事务提交

  • 自动提交
  • 手动提交
commit;

事务回滚

rollback;

事务的隔离级别

  1. read uncommitted;:读未提交的(脏读)

  2. read committed;:读已经提交的(不可重复读,前后不一致)

  3. repeatable read;:(默认的)可以重复读(幻读)

  4. serializable:串行化(性能差)

  • 查看隔离级别
#MySQL 8.0 以上
select @@global.transaction_isolation;#系统级别
select @@transaction_isolation;#会话级别

#MySQL 8.0 以下
select @@global.tx_isolation;#系统级别
select @@tx_isolation;#会话级别
  • 修改隔离级别
#MySQL 8.0 以上
set global.transaction_isolation level [隔离级别];#系统级别
set transaction_isolation level [隔离级别];#会话级别

#MySQL 8.0 以下
set global.tx_isolation level [隔离级别];#系统级别
set tx_isolation level [隔离级别];#会话级别
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值