相关教程
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数据类型
-
数值类型
类型 大小 范围(有符号) 范围(无符号) 用途 TINYINT 1 字节 (-128,127) (0,255) 小整数值 SMALLINT 2 字节 (-32 768,32 767) (0,65 535) 大整数值 MEDIUMINT 3 字节 (-8 388 608,8 388 607) (0,16 777 215) 大整数值 INT或INTEGER 4 字节 (-2 147 483 648,2 147 483 647) (0,4 294 967 295) 大整数值 BIGINT 8 字节 (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615) 极大整数值 FLOAT 4 字节 (-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) 单精度 浮点数值 DOUBLE 8 字节 (-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的值 小数值 -
日期和时间类型
类型 大小 (字节) 范围 格式 用途 DATE 3 1000-01-01/9999-12-31 YYYY-MM-DD 日期值 TIME 3 ‘-838:59:59’/‘838:59:59’ HH:MM:SS 时间值或持续时间 YEAR 1 1901/2155 YYYY 年份值 DATETIME 8 1000-01-01 00:00:00/9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合日期和时间值 TIMESTAMP 4 1970-01-01 00:00:00/2038结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07 YYYYMMDD HHMMSS 混合日期和时间值,时间戳 -
字符串类型
类型 大小 用途 CHAR 0-255字节 定长字符串 VARCHAR 0-65535 字节 变长字符串 TINYBLOB 0-255字节 不超过 255 个字符的二进制字符串 TINYTEXT 0-255字节 短文本字符串 BLOB 0-65 535字节 二进制形式的长文本数据 TEXT 0-65 535字节 长文本数据 MEDIUMBLOB 0-16 777 215字节 二进制形式的中等长度文本数据 MEDIUMTEXT 0-16 777 215字节 中等长度文本数据 LONGBLOB 0-4 294 967 295字节 二进制形式的极大文本数据 LONGTEXT 0-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) );
-
联合主键
多个主键联合形成一个主键组合
-
复合主键
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)右连接
(3)完全外连接
-
MySQL不支持full join
-
select * from student left join course on student.ID=course.ID;
MySQL事务
1、用 BEGIN, ROLLBACK, COMMIT来实现
- BEGIN ,start 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(可串行化)
最强的隔离级别,通过给事务中每次读取的行加锁,写加写锁,保证不产生幻读问题,但是会导致大量超时以及锁争用问题。