版权声明:本文为博主原创文章,遵循 CC 4.0 BY 版权协议,转载请附上原文出处链接和本声明。
数据库
创建数据库
格式:
* create database 数据库名;
* create database 数据库名 character set 字符集;
查看数据库:
* show databases;
切换数据库:
* use 数据库名;
删除数据库:
* drop database 数据库名称;
创建表:
create table 表名(
字段名 类型(长度) [约束],
字段名 类型(长度) [约束],
...
);
类型:
varchar(n) 字符串
int 整形
double 浮点
date 时间
timestamp 时间戳
查看数据库中的所有表:
show tables;
查看表结构:
格式:desc 表名;
例如:desc sort;
修改表结构:
alter table 表名 add 列名 类型(长度) [约束];
作用:添加列.
alter table 表名 modify 列名 类型(长度) [约束];
作用:修改表修改列的类型长度及约束.
alter table 表名 change 旧列名 新列名 类型(长度) [约束];
作用:修改列名.
alter table 表名 drop 列名;
作用:删除列.
alter table 表名 rename to 新表名;
作用:修改表名
alter table 表名 character set 字符集;
作用:修改表的字符集
删除表:
格式:drop table 表名;
插入表记录:
-- 向表中插入某些字段
insert into 表 (字段1,字段2,字段3..) values (值1,值2,值3..);
--向表中插入所有字段,字段的顺序为创建表时的顺序
insert into 表 values (值1,值2,值3..);
更新表记录:
--更新所有记录的指定字段
update 表名 set 字段名=值,字段名=值,...;
--更新符号条件记录的指定字段
update 表名 set 字段名=值,字段名=值,... where 条件;
删除记录:
delete from 表名 [where 条件];
或者
truncate table 表名;
删除表中所有记录使用delete from 表名; 还是用truncate table 表名;
删除方式:delete 一条一条删除,不清空auto_increment记录数。
truncate 直接将表删除,重新建表,auto_increment将置为零,从新开始。
条件查询
比较运算符
> < <= >= = <> != 大于、小于、大于(小于)等于、不等于
BETWEEN ...AND... 显示在某一区间的值(含头含尾)
IN(set) 显示在in列表中的值,例:in(100,200)
LIKE ‘张pattern’ 模糊查询,Like语句中,%代表零个或多个任意字符,_代表一个字符,例如:first_name like ‘_a%’;
IS NULL 判断是否为空
逻辑运算符
and 多个条件同时成立
or 多个条件任一成立
not 不成立,例:where not(salary>100);
去除重复关键字:distinct
CASE WHEN
方式一:
SELECT CASE WHEN result > 90 THEN 'A'
WHEN result > 80 THEN 'B'
WHEN result > 60 THEN 'C'
WHEN result > 30 THEN 'D'
ELSE 'E' END grade
FROM student WHERE id = #{id}
方式二:
SELECT SUM(population), CASE country
WHEN '中国' THEN '亚洲'
WHEN '加拿大' THEN '北美洲' '
ELSE '其他' END
MYSQL数据类型
日期类型:
字符串二进制文本类型:
DOS操作数据乱码解决:
查看MySQL内部设置的编码
show variables like 'character%'; 查看所有mysql的编码
修改client、connection、results的编码一致(GBK编码)
client connetion result 和客户端保持一致,都为GBK
将客户端编码修改为gbk.
#方式1:单独设置
set character_set_client=gbk;
set character_set_connection=gbk;
set character_set_results=gbk;
#方式2:快捷设置
set names gbk;
添加主键约束
方式一:创建表时,在字段描述处,声明指定字段为主键:
CREATE TABLE Persons
(
Id_P int PRIMARY KEY,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
方式二:创建表时,在constraint约束区域,声明指定字段为主键:
格式:[constraint 名称] primary key (字段列表)
关键字constraint可以省略,如果需要为主键命名,constraint不能省略,主键名称一般没用。
字段列表需要使用小括号括住,如果有多字段需要使用逗号分隔。声明两个以上字段为主键,我们称为联合主键。
CREATE TABLE Persons
(
FirstName varchar(255),
LastName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT pk_PersonID PRIMARY KEY (FirstName,LastName)
或
CREATE TABLE Persons
(
FirstName varchar(255),
LastName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (FirstName)
)
方式三:创建表之后,通过修改表结构,声明指定字段为主键:
ALTER TABLE Persons ADD [CONSTRAINT 名称] PRIMARY KEY (字段列表)
CREATE TABLE Persons
(
FirstName varchar(255),
LastName varchar(255),
Address varchar(255),
City varchar(255)
)
ALTER TABLE Persons ADD PRIMARY KEY (FirstName)
删除主键约束
ALTER TABLE Persons DROP PRIMARY KEY
自动增长列
CREATE TABLE Persons
(
P_Id int PRIMARY KEY AUTO_INCREMENT,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
默认地,AUTO_INCREMENT 的开始值是 1,如果希望修改起始值,请使用下列 SQL 语法:
ALTER TABLE Persons AUTO_INCREMENT=100
非空约束
方式一:创建表,下面的 SQL 语句强制 "Id_P" 列和 "LastName" 列不接受 NULL 值:
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
方式二:修改表结构
添加非空约束 ALTER TABLE student MODIFY LastName varchar(255) NOT NULL
删除非空约束 ALTER TABLE student MODIFY LastName varchar(255)
唯一约束
方式1:创建表时,在字段描述处,声明唯一:
CREATE TABLE Persons
(
Id_P int UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
方式2:创建表时,在约束区域,声明唯一:
CREATE TABLE Persons
(
Id_P int,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT 名称UNIQUE (Id_P)
)
方式3:创建表后,修改表结构,声明字段唯一:
ALTER TABLE Persons ADD [CONSTRAINT 名称] UNIQUE (Id_P)
删除唯一约束
ALTER TABLE Persons DROP INDEX名称
如果添加唯一约束时,没有设置约束名称,默认是当前字段的字段名。
默认约束
方式一: 创建表,字段处声明
CREATE TABLE Persons
(
Id_P int,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255) DEFAULT '北京',
City varchar(255)
)
方式二: 修改表结构
ALTER TABLE Persons MODIFY Address VARCHAR(255) DEFAULT '北京'
删除默认约束ALTER TABLE Persons MODIFY Address VARCHAR(255)
内连接查询:
隐式内连接:select * from A,B where 条件;
显示内连接:select * from A inner join B on 条件;
左外连接查询:
select * from A left outer join B on 条件;
右外连接查询:
select * from A right outer join B on 条件;
From 表名 把数据从硬盘加载到内存中形成一张伪表
On 条件 根据on条件对伪表及其他表进行扫描拼接,拼接成一张完整的新伪表
事务
我们来看看在不同的隔离级别下,事务A会有哪些不同的返回结果,也就是图里面V1、V2、V3的返回值分别是什么。
若隔离级别是“读未提交”, 则V1的值就是2。这时候事务B虽然还没有提交,但是结果已经被A看到了。因此,V2、V3也都是2。
若隔离级别是“读提交”,则V1是1,V2的值是2。事务B的更新在提交后才能被A看到。所以, V3的值也是2。
若隔离级别是“可重复读”,则V1、V2是1,V3是2。之所以V2还是1,遵循的就是这个要求:事务在执行期间看到的数据前后必须是一致的。
若隔离级别是“串行化”,则在事务B执行“将1改成2”的时候,会被锁住。直到事务A提交后,事务B才可以继续执行。所以从A的角度看, V1、V2值是1,V3的值是2。