MySQL简明笔记

相关教程

一天学会MySQL数据库

MySQL基本操作

查看所有数据库
show databases;

创建数据库
create database 数据库名;

操作数据库
use 数据库名

删除数据库
drop database 数据库名;

退出
exit;
查看所有数据表
show tables;

创建表
CREATE TABLE t1(
    id int not null,
    name char(20)
);

查看表的结构
describe t1;
表中添加数据
INSERT INTO t1
VALUES(1,'李红');

表中删除数据
delete from t1 where id=1;

表中修改数据
update student set Sname='李红' where Sno=201215123;

表中查询数据
select * from 表名;

特定条件查询
select * from student where Sage=19;
添加主键约束
alter table user4 add primary key(id);

删除主键约束
alter table user4 drop primary key(id);

使用modify修改字段,添加约束
alter table user4 modify id int primary key;

MySQL数据类型

  • 数值类型

    类型大小范围(有符号)范围(无符号)用途
    TINYINT1 字节(-128,127)(0,255)小整数值
    SMALLINT2 字节(-32 768,32 767)(0,65 535)大整数值
    MEDIUMINT3 字节(-8 388 608,8 388 607)(0,16 777 215)大整数值
    INT或INTEGER4 字节(-2 147 483 648,2 147 483 647)(0,4 294 967 295)大整数值
    BIGINT8 字节(-9,223,372,036,854,775,808,9 223 372 036 854 775 807)(0,18 446 744 073 709 551 615)极大整数值
    FLOAT4 字节(-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38)0,(1.175 494 351 E-38,3.402 823 466 E+38)单精度 浮点数值
    DOUBLE8 字节(-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)双精度 浮点数值
    DECIMAL对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2依赖于M和D的值依赖于M和D的值小数值
  • 日期和时间类型

    类型大小 (字节)范围格式用途
    DATE31000-01-01/9999-12-31YYYY-MM-DD日期值
    TIME3‘-838:59:59’/‘838:59:59’HH:MM:SS时间值或持续时间
    YEAR11901/2155YYYY年份值
    DATETIME81000-01-01 00:00:00/9999-12-31 23:59:59YYYY-MM-DD HH:MM:SS混合日期和时间值
    TIMESTAMP41970-01-01 00:00:00/2038结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07YYYYMMDD HHMMSS混合日期和时间值,时间戳
  • 字符串类型

    类型大小用途
    CHAR0-255字节定长字符串
    VARCHAR0-65535 字节变长字符串
    TINYBLOB0-255字节不超过 255 个字符的二进制字符串
    TINYTEXT0-255字节短文本字符串
    BLOB0-65 535字节二进制形式的长文本数据
    TEXT0-65 535字节长文本数据
    MEDIUMBLOB0-16 777 215字节二进制形式的中等长度文本数据
    MEDIUMTEXT0-16 777 215字节中等长度文本数据
    LONGBLOB0-4 294 967 295字节二进制形式的极大文本数据
    LONGTEXT0-4 294 967 295字节极大文本数据

MySQL约束

  • 主键约束(primary key)

     create table test_dept(
      deptno varchar2(20) primary key,
      dname varchar2(20),
      loc varchar2(20) unique
     );
    
    CREATE TABLE Persons
    (
    Id_P int NOT NULL,
    LastName varchar(255) NOT NULL,
    PRIMARY KEY (Id_P)
    );
    
  1. 联合主键

    多个主键联合形成一个主键组合

  2. 复合主键

    create table test 
    ( 
       name varchar(19), 
       id number, 
       value varchar(10), 
       primary key (name,id) 
    );
    
  • 自增约束

    CREATE TABLE student (
    	id INT PRIMARY KEY AUTO_INCREMENT,
    	NAME VARCHAR(20),
    	age INT
    );
    
  • 唯一约束

    CREATE TABLE Persons
    (
    P_Id int NOT NULL,
    UNIQUE (P_Id)
    );
    
    
  • 非空约束

    createtable t_user(
    id int(10),
    name varchar(32) not null,        email varchar(128)
    );
    
    
  • 默认约束

    create table dbo.t1 (
    	id	INT  DEFAULT 5
    );
    
    
  • 外键约束

    CREATE TABLE Orders
    (
    O_Id int NOT NULL,
    P_Id int,
    PRIMARY KEY (O_Id),
    FOREIGN KEY (P_Id) REFERENCES Persons(P_Id)
    );
    
    

MySQL范式

  • 第一范式

    属性具有原子性,不可再分解

  • 第二范式

    记录有惟一标识,即实体的惟一性,不存在部分依赖

  • 第三范式

    任何字段不能由其他字段派生出来,它要求字段没有冗余,即不存在传递依赖

MySQL查询

  • 查询所有记录

    select * from student;
    
    
  • 查询特定记录

    select Sname,Sno from student;
    
    
  • distinct 排除重复

    select distinct Sage from student;
    
    
  • 查询区间

    select * from score where degree between 60 and 80;
    
    
  • 查询或者关系

    select * from score where degree in(85,86,88);
    
    
  • 升序,降序

    desc–降序

    asc–升序(默认)

    select * from score order by degree desc,Cno asc;
    
    
  • 统计count()

    select count(*) from student where class='1704';
    
    
  • 最高分:max(),最低分:min()

  • limit 0,1–从第零条到第一条记录

  • 平均成绩:avg()

  • 分组:group by

  • having(group by 后面)

    SELECT * FROM COMPANY GROUP BY name HAVING count(name) < 2;
    
    
  • 多表查询

    select Sname,Cno,degree from student,score
    where student.Sno=score.Sno;
    
    
  • 至少大于其中一个any()

  • 连接查询

    1. 内连接

    2. 外连接

      (1)左连接

      (2)右连接

      (3)完全外连接

    3. MySQL不支持full join

select * from student left join course on student.ID=course.ID;

MySQL事务

1、用 BEGIN, ROLLBACK, COMMIT来实现

  • BEGINstart transaction 开始一个事务
  • ROLLBACK 事务回滚
  • COMMIT 事务确认

2、直接用 SET 来改变 MySQL 的自动提交模式:

  • SET AUTOCOMMIT=0 禁止自动提交
  • SET AUTOCOMMIT=1 开启自动提交

查询自动提交是否开启

select @@autocommit;

提交事务

commit;

事务的四大特征:

原子性:一个事务必须保证其中的操作要么全部执行,要么全部回滚

一致性:数据必须保证从一种一致性的状态转换为另一种一致性状态

隔离性:在一个事务未执行完毕时,通常会保证其他Session无法看到这个事务的执行结果

持久性:事务一旦commit,则数据就会保存下来,即使提交完之后系统崩溃,数据也不会丢失

隔离级别

查看系统隔离级别:
select @@global.tx_isolation;

查看当前会话隔离级别
select @@tx_isolation;

设置当前会话隔离级别
SET session TRANSACTION ISOLATION LEVEL serializable;

设置全局系统隔离级别
SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

READ UNCOMMITTED(未提交读,可脏读)

事务中的修改,即使没有提交,对其他会话也是可见的。

READ COMMITTED(提交读或不可重复读,幻读)

一个事务如果没有完全成功(commit执行完),事务中的操作对其他会话是不可见的。

REPEATABLE READ(可重复读)

一个事务中多次执行同一读,SQL,返回结果一样.

SERIALIZABLE(可串行化)

最强的隔离级别,通过给事务中每次读取的行加锁,写加写锁,保证不产生幻读问题,但是会导致大量超时以及锁争用问题。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值