文章目录
建库:create database test;
删库:drop database test;
选择数据库:use test;
数据类型:
数值类型 | 大小 | 说明 |
---|---|---|
tinyint | 1字节 | 小整数 |
smallint | 2字节 | |
mediumint | 3字节 | |
int 或者 integer | 4字节 | 整数 |
bigint | 8字节 | 极大整数 |
float | 4字节 | 单精度浮点值 |
double | 8字节 | 双精度浮点值 |
decimal(M,D) 如果M>D,为M+2,否则D+2,常用(10,2) 小数值(金额常用)
日期时间类型 | 大小 | 范围 | 格式 | 用途 |
---|---|---|---|---|
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 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 |
timestamp | 4 | 1970.01.01 – 2038 | YYYYMMDD HHMMSS | 混合日期和时间值,常用来做时间戳 |
字符串类型 | 大小 | 说明 |
---|---|---|
char | 0 - 255 | 定长字符串 |
varchar | 0 - 65535(216 - 1) | 变长字符串 |
tinytext | 0 - 255 | 短文本字符串 |
text | 0 - 65535 | 长文本数据 |
mediumtext | 0 - 16777215(224 - 1) | 中等长度文本数据 |
longtext | 0 - 4294967295(232 - 1) | 极大文本数据 |
建表:
CREATE TABLE IF NOT EXITS `table_name`(
`id` INT UNSIGNED AUTO_INCREMENT,
`name` VARCHAR(100) NOT NULL,
`time` DATETIME,
PRIMARY KEY (`id`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
- 注释:
- UNSIGNED:将数字类型无符号化;
- AUTO_INCREMENT:定义该列为自增的属性;
- PRIMARY KEY:设置主键,可以使用多列来定义主键,列间以逗号分隔;
- ENGINE:设置存储引擎,CHARSET:设置编码。
删表:
- 不需要该表时:
drop table test;
- 需要保留表,但是想清空记录:
truncate teble test;
- 删除部分记录:
delete from table_name where name = '张三';
插入数据:
insert into table_name (id,name) values (value1,value2);
查询数据:
select id,name from table_name1[,table_name2] [where clause] [limit n] [offset m]
- 可从一个表或者多个表查询
- limit n:设定返回的记录数n
- offset m:偏移量,可跳过m条数据,(不可单独使用)
limit n,m
:相当于 limit m offset n:从第n条记录开始,返回M条记录。
Where语句:
- 实例分析
- 按由高到低的顺序显示个人平均分在70分以上的学生姓名和平均分,为了尽可能地提高平均分,在计算平均分前不包括分数在60分以下的成绩,并且也不计算小明(ming)的成绩。
-
显式学生姓名和平均分
select name,avg(scorc) from tb_student
-
就算平均分不包括60分以下的成绩,也不包括小明的
where score > 60 and name != 'ming'
-
显式个人平均分,同一个学生考了多门科目,因此按姓名分组
group by name
-
显式个人平均分70分以上的
having avg(score) >= 70
-
由高到低排序
order by avg(score) desc
-
slect name,avg(score) from tb_student where score > 60 and name != 'ming' group by name having avg(score) >= 70 order by avg(score) desc;
更新:
update table_name set name = 1,age = 20 where id = 15;
- 可以同时更新一个或多个字段
- 可以在where中制定任何条件
删除
delete from tb_student where id = 1;
- delete:根据条件删除数据,可回滚,
- truncate:清空表中的数据
- drop: 清空表数据和表结构
关键字
like 子句
-
select * from books where name like '%java';
%java
:查询以 java结尾 的信息;java%
:查询以 java开始 的信息;%java%
:查询含有a的数据;_a_
:查询三位且中间字母是a的a_
:查询两位且 a 开头的_a
:查询两位且 a结束的
union[all | distanct ]
- 用于连接两个以上的
select
语句的结果组合到一个结果集中。 - 多个 select 语句会删除重复的数据,所以 distinct 不用添加
- all:可选,返回所有结果集,包含重复数据。
order by
- 可设置多个字段作为排序条件
- 默认升序,可以使用ASC(升序)或者DESC(降序)来设置排序
group by
-
根据一个或多个列对结果集进行分组
-
举个例子
id name date singin 1 小明 2016-04-22 15:25:33 1 2 小王 2016-04-20 15:25:47 3 3 小丽 2016-04-19 15:26:02 2 4 小王 2016-04-07 15:26:14 4 5 小明 2016-04-11 15:26:40 4 6 小明 2016-04-04 15:26:54 2 -
SELECT name, COUNT(*) FROM employee_tbl GROUP BY name;
-
结果
name COUNT(*) 小丽 1 小明 3 小王 2
join 连接
-
inner join(内连接,或等值连接):获取两个表中字段匹配关系的记录
-
left join(左连接):获取左表所有记录,即使右表没有对应匹配的记录
-
right join(右连接):与left join相反
NULL
- is null
- is not null
alter
-
修改表名或修改数据表字段。
-
举个栗子
create teble test ( i int, c char(1) );
-
alter table test DROP i
:删除 test 表的 i 字段 -
alter table test ADD i INT
:为 test 表添加 i 字段,并定义 数据类型
(自动添加到数据库字段的末尾) -
alter table test MODIFY c char(10)
: 修改 c 类型从 char(1) 改为 char(10) -
alter table test CHANGE i j tinyint
: 使用 change 关键字, 后面需要紧跟修改的字段名,然后指定新字段名和类型 -
alter table test RENAME TO tt_name
: 修改表名称
索引
-
//测试表 create table test( id int not null, name varchar(16) not null, )
添加
- 普通索引:
alter table test add index index_name(name)
- 唯一索引:
alter table test add unique index_name(name)
- 主键索引:
alter table test add primary key(name)
主键默认不为空
临时表
- MySQL 临时表在我们需要保存一些临时数据时是非常有用的。临时表只在当前连接可见,关闭连接时,MySQL会自动删除表并释放所有空间。
复制表
- 完全复制一个数据表的结构,索引,默认值等
show create table test
:获取数据表 test 的 完整结构- 修改SQL 语句的数据表名称,执行 SQL 语句
- 拷贝数据:`insert into 新表 select * from 旧表
事务
- 事务隔离级别
- 读未提交:存在脏读、不可重复读、幻读问题。
- 读已提交:解决了脏读问题;但依旧存在不可重复读、幻读的问题。
- 可重复读:解决了脏读、不可重复读的问题;存在幻读的。
- 可串行化:解决了以上三种问题。
- 脏读: 当前事务读取了另一事务未提交的数据
- 不可重复读:在同一个事务中,对某个数据多次查询,发现其值不是一致的(原因是,在查询间隔其被另一个事务修改并提交了)
- 幻读:(更侧重于 select 结果的状态)比如:select 某记录是否存在,不存在,准备插入,但是在执行insert的时候发现存在了,无法插入。(当然了,也可以这么理解:select某记录是否存在,存在,准备修改其属性值,但是在执行update的时候,发现其不存在了,无法修改)