1.Create database 数据库名称
创建数据库
2.Show databases
查看所有数据库
3.Show create database 数据库名称
查看某个创建的数据库
4.Drop database 数据库名称
删除数据库
5.Alter database 数据库名称 character set gbk/utf8
修改某个数据库的编码
6.Create table 表名
创建表
7.Create table 新表名 like 就表名
创建一个和旧表一模一样的新表
8.Use 数据库名
使用某个数据库
9.Create table 表名(
字段名1,数据类型(宽度),
字段名2,数据类型(宽度),
字段名3,数据类型(宽度),
。。。。。。。。
字段名n,数据类型(宽度));
10.Show tables
查看库中的表
11.Show create table 表名
查看建表语句
12.Desc 表名
查看表结构
13.Alter table 表名 add 新字段1 类型(宽度)
新字段2 类型(宽度);
建表后添加新字段
14.Alter table 表名 add 新字段2 类型(宽度) first/after 旧字段名
建表后添加新字段(指定添加到某个字段的后面或者前面)
15.Alter table 表名 modify 旧字段 类型(宽度) first/after 旧字段名
修改旧字段 只改变类型宽度 和位置
16.Alter table 表名 change 旧字段 类型(宽度)
修改旧字段 字段 类型宽度都可以修改
17.Alter table 表名 drop 旧字段
删除旧字段
18.Alter table 表名 rename (to) 表名
修改表名
19.Set name gbk;
表中输入汉字
20.主键约束
字段名 数据类型(宽度) primary key
建表时单字段主键
Primary key(字段名1 数据类型(宽度) 字段名2 数据类型(宽度));
建表时多字段主键
Alter table 表名 add primary key (字段名);
建表后增加主键
Alter table 表名 drop primary key(字段名)
删除主键约束
21.非空约束
字段名 数据类型 not null
建表时加非空约束
Alter table 表 名 modify 旧字段 类型(宽度) not null;
建表后加非空约束
22.唯一约束
字段名 类型(宽度) unique
建表时加唯一约束
23.默认约束
字段名 类型(宽度) default “默认值”
建表时,添加默认约束
Alter table 表名 modify sex default “默认值”
建表后 添加默认约束
24.设置表的字段值自动增长
字段名 类型(宽度) primary key auto_increment;
建表时
Alter table 表名 modify 字段名 类型(宽度) auto_increment
建表后加自动增长列
25.Insert into 表名(字段名1,字段名2。。。。。。字段名n)
Values(值1,值2.。。。。。。。。。值n);
为表中所有字段添加字段
26.Insert into 表名 values(值1,值2,。。。。。值n);
不指定字段名添加多条记录
27.Insert into 表名(字段名1,字段名2。。。。。。字段名n)
Values(值1,值2.。。。。。。。。。值n),
(值1,值2.。。。。。。。。。值n),
(值1,值2.。。。。。。。。。值n);
同时添加多条记录
28.Select * from 表名
查看表
29.Update 表名 set 字段名1=值1[字段名2=值2] where 字段名=?;
更新表中记录
30.Delete from 表名 [where条件]
删除表中数据 记录日志 自动增长列从删除前数字往下加
31.Truncate 表名 不记录日志 快速删除表中记录
32.Select 字段1,字段2。。。。。。。from 表名
指定字段查询表中数据
33.Select 字段1,字段2。。。。。。。from 表名 where [条件表达式]
带运算符的查询 and 、not、or、 = ,<>不等于 >= <=
34.Select 字段1,字段2。。。。。。。from 表名 where 字段名 [not] in(元素1,元素2 ,元素3) ;
带in 关键字的查询
35. Select 字段1,字段2。。。。。。。from 表名 where 字段名 [not] between 值1 and 值2;
36. Select 字段1,字段2。。。。。。。from 表名 where 字段名 is [not] null
空值查询
37. Select distinct 字段1,字段2。。。。。。。from 表名
Distinct关键字后指定的多个字段值相同,才被认作是重复记录
38. Select 字段1,字段2。。。。。。。from 表名 where 字段名 [not] like “字符串”
(1)百分号通配符(%)
“%张%”包含张的字符串
“张%”以张开头的字符串
“%张”以张结尾的字符串
(2)下划线_通配符
可以匹配单个字符 匹配多个字符使用多个下划线通配符
39.聚合函数
(1)查看表中记录条数
Select count(*) from 表名 括号中可以是字段名
(2)查看表中去掉重复值的记录条数
Select count(distinct) from 表名
(3)求表中某个字段所有值的总和
Select sum(字段名) from 表名
(4)求某个字段的最大值
Select max(字段名) from 表名
40.对查询结果的排序
单个字段: select 字段名1,字段名2 form 表名 [where 条件] order by 字段名
多个字段:select 字段名1,字段名2 form 表名 [where 条件] order by 字段名1[asc,desc] 字段名2[asc,desc] ;
先按第一个字段排序,当一个字段值相同时,再按第二个字段排序
asc 升序 desc降序
41.分组查询
按分组的字段进行分类汇总,分组字段有几个值就有几组,也是分完组后有多少条记录,分组后查看的列可以包括分组字段和聚合函数
select 字段名1,字段名2 form 表名 group by 字段名1,字段名2
[having条件表达式];
注:having 关键字可以跟聚合函数,而where关键字不能。通常情况下having
关键字和group by 一起用,用对分组后的的结果进行过滤
42.外键
(1)建表时添加外键
Alter table 表名 add constraint fk_外键名 foreign key (外键字段)
References 参照表名(参照字段)
(2)建表时添加外键约束
Create table 表名 foreign key(外键字段名) references 参照表名(参照字段)
(3)删除外键约束
Alter table 表名 drop foreign key 外键名
注意:一定要先删除从表中的数据,然后在删除主表中的数据,否则会报错;
43.连接查询
(1)内连接
Select 查询字段 from 表1 join 表2
on 表1.关系字段=表2.关系字段
join 表3
on 表2.关系字段=表3.关系字段
(2)外连接
1.左连接
Left join
注意:如果左表的某条记录在右表中不存在,则右表中显示为空
2.右连接
Right join
注意::如果右表的某条记录在左表中不存在,则左表中显示为空
44.子查询
(1)首先会执行子查询中的语句,然后将返回的结果作为外层查询的过滤条件
Select * from 表名 where 字段名=(select 字段名 from 表名 where 字段名)
注意:如果内层查询得到的结果是多个值,这时不能使用等号 可以使用in.
(2)exists 关键字的子查询(exists后面的参数可以是任意的,一个子查询只返回true 或false)
Select * from 表名 where exists(select 字段名 from 表名 where 字段名 条件)
(3)any关键字的子查询
注意:只要满足内查询中的任意一个比较条件,就返回一个结果作为外层查询条件
Select * from 表名 where 字段名>、<、=any(select 字段 查询条件);
(4)带all关键字的子查询
Select * from 表名 where 字段名>、<all(select 字段 查询条件);
注意:子查询返回的结果 需要同时满足所有内层查询条件
45.聚合函数
Count 返回某列的行数 sum 求和 max 最大值
Min 最小值 avg 平均值
(1)Count 函数 使用
Select count (*) from 表名;
(2) sum 函数 使用
Select sum (字段名) from 表名;
(3)avg 函数 使用
Select avg(字段名) from 表名;
(4)max 函数 使用
Select max(字段名)from 表名;
(5)min 函数 使用
Select min(字段名) from 表名;
46.索引:
(1)Create table 表名 (字段名1 类型(宽度) [完整性约束],
字段名2 类型(宽度) [完整性约束]),
Unique/fulltext/spatial/ index|key [别名] (字段名1));
Unique/fulltext/spatial/ index|key [别名] (字段名,类型(宽度) asc|descs )
三者选一 二者选一
(2)在已存在的表上创建索引
Create [Unique |fulltext|spatial] index索引名 on 表名(字段名[(宽度)] [asc|desc])
Alter table 表名 add [Unique |fulltext|spatial] index 索引名 (字段[长度][asc|desc])
(3)删除索引:alter table 表名 drop index 索引名
普通索引:index(字段)
唯一索引:unique index unique_id(id)
全文索引:只能创建在char varhcar text 类型的字段上
多列索引:在表中的多个字段上创建索引,只有在查询条件中使用了这些字段之中的第一字段时,该索引才会被使用。
Show create table 表名\G \G将每个字段打印按行打印出来
查看表的结构
查看索引是否被使用
从上述执行结果可以看书,possible_keys和key的值都为id,说明id索引已经存在了,开始被使用了。
注意:索引字段最好不要为NULL,因为NULL会使索引、索引统计和值更加复杂,并且需要额外一个字节的存储空间
47.事务
(1)事务的特征:原子性(Atomicity),一致性(Consistency),隔离性(Isolation),持久性(Durability),俗称ACID准则。
原子性:指一个事务必须被视为一个不可分割的最小工作单元,只有事务中所有的数据库操作都执行成功,才算整个事务执行成功了,事务中如果有任何一个SQL语句执行失败,已经执行成功的SQL语句也必须撤销,数据库的状态退回到执行事务前的状态。
一致性:指事务将数据库从一种状态转变为下一种一致的状态。一旦所有事务动作完成, 事务就被提交. 数据和资源就处于一种满足业务规则的一致性状态中.例如:在表中有一个字段为姓名,具有唯一约束,即姓名不能重复,如果有一个事务对姓名进行了修改,使姓名变得不唯一了,这就破坏了事务的一致性要求,如果事务的某个动作失败了,系统可以自动撤销事务,返回初始化状态。
隔离性:数据库为每一个用户开启的事务,不能被其他事务得操作所干扰,多个并发事务之间要相互隔离。
持久性:事务一旦提交,其所做的修改就会永久的保存到数据库中,即使发生故障也不应该对其有任何影响。
(2)事务的隔离级别
事务的并发问题 脏读 不可重复读 幻读
1.read uncommitted
读未提交,是事务中最低的级别,该级别下的事务可以读取到另一个事务中未提交的数据,也被称为脏读。
2.read commtied
读提交,该级别下的事务只能读取其他事务已提交的内容,可以避免脏读,但不能避免重复读和幻读的情况
3.repeatable read
可重复读,是mysql默认的事务隔离级别,它可以避免脏读和和不可重复读(读提交)的问题,确保同一事务的多个实例 在并发读取数据时,会看到同样的数据行。在事务内重复读取了读取了别的线程已提交的数据,但两次读取的结果不一 致, 原因是查询过程中其他事物做了更新操作
幻读: 当一个事务A读取几行记录后,另一个并发事务B插入了一条记录时,幻读就发生了,在后来的查询中,第一个事务A就会发现一些原来没有额外记录。不过mysql的存储引擎通过多版本并发控制机制解决了该问题,因此该级别是可以避免幻读的
4.serializable
可串行化,是事务的最高隔离级别,他会强制对事务进行排序,使之不会发生冲突,从而解决脏读、幻读、重复读的问题。实际上,就是在每个读的数据行上加锁。这个级别,可能导致大量的超时和锁竞争,实际应用中很少。
(3)事务隔离级别设置
Set session transaction isolation level 隔离级别
48.视图:
(1)概述:从一个或多个表导出来的表,它是一种虚拟存在的表,并且表的结构和数据都依赖基本表。通过视图不仅可以看到存放在基本表中的数据,并且还可以像操作基本表一样,对视图中存放的数据进行查询、修改和删除。
(2)创建视图
Create [or replace] view view_name[ (column_list)] as select _statement
(3)查看视图
Desc 视图名称 查看视图的字段信息
Show table status like ‘视图’ 查看视图的基本信息
(4)修改视图
当基本表中的某些字段发生变化时,可以通过修改视图的方式来保持视图和基本表的一致性。
Create [or replace] view view_name[ (column_list)] as select _statement
可修改视图的列 as后的查询语句
Alter view view_name[ (column_list)] as select _statement
可修改视图的列 as后的查询语
(5)更新视图
如果对视图中的数据进行增加或删除操作时,实际上就是对其基本中的数据进行增加或者删除操作。
(6)删除视图
Drop view [if exists] view_name