1、 regedit 进入注册列表
2、show databases; 显示当前MySQL数据库中有多少个小的database
3、use database名字; 选择一个database来使用
4、show tables; 为了显示当前的database中有多少个table
5、SQL结构化查询语言(Structured Query Language)
(1)DDL数据定义语言(Data Manipulation Language)
用来定义数据库中的对象(database table)
create 创建 drop 删除 alter 修改
(2)DML数据操作语言(Data Manipulation Language)
用来操作数据库表格中的数据(信息)
新增insert 修改update 删除delete 查询select
DQL(Data Query Language)
select where group by having order by
(3)DCL数据控制语言(Data Control Language)
用来控制数据库中用户的权限
grant revoke
(4)TPL事务处理语言(Transaction Process Language)
可以理解为 多线程并发操作同一个文件
begin transaction
操作
commit;提交 rollback;回滚 save point 保存还原点
6、DDL数据定义语言
(1)Mysql创建database
create database 数据库名;
(2)database里创建table(表)
create table 表名(
列名 数据类型(长度),
列名 数据类型(长度),
列名 数据类型(长度)
)character set utf8; (character set utf8是修改表格的字符集,可以存中文)
(3)通过DDL语句修改表格的结构
<修改表名> alter table 原表名 rename [to] 新表名 ;
<修改原有的列(列名、类型、长度)>alter table 原表名 change 原列名 新列名 新类型 新长度;
<新增一个列>alter table 原表名 add 新列名 新类型 新长度;
<删除一个原有的列>alter table 原表名 drop 原列名;
(4)删除table、删除database
drop table 原表名;
drop database 数据库名字;
7、DML数据操作语言
(1)新增记录
insert into 表名字(列名,列名) values(值,值);
insert into 表名字 values(值,值,值);
insert into 表名字 values (值,值,值),(值,值,值),(值,值,值);
(2)删除记录
delete into 表名字 [where...];
(3)修改记录
update 表名 set 列 = 值,列 = 值[where...];
(4)查询记录
select(列,列,列)from 表名 [where...];
select * from 表名[where...];
8、条件筛选where
where后面可跟的东西
(1)比较运算符>、<、=、>=、<=、!=
(2)算数运算符+、-、*、/
(3)逻辑与算符and 、or、not
and和or同时出现,and的优先级更高
(4)[not]between and 包含前后两端的值
(5)[not] in 满足其中一个就可以 in (v1,v2,v3)
(6)like 模糊查询
% 用来代替0-n个字符
_ 用来代替1个字符(有且只有一个)
9、排序(连接在查询语句之后)
order by 列
(1) ASC 升序排列
(2)DESC 降序排列
10、函数
函数可以放置在什么位置上
查询中用来显示的部分--->select 函数(列) from 表格
条件筛选的后面 --->select 列 from 表格 where sal > 函数(值)
(1)比较函数
isnull(值); 是空值返回1,非控制返回0
(2)数学函数
pow求次方 abs求绝对值 floor 向下取整 mod(5,2)取余数 round()四舍五入取整
(3)日期和时间------Date类 Calendar类
now() year(date) month() day week
(4)控制流程函数(转换函数)
if(条件,值1,值2);
ifnull(值,v);
(5)字符串函数------对比java中String类记忆
length(str)
concat()
substr() 截取前三个(*,1,3)
instr(str,'a')
replace()
upper()
lower()
ltrim() rtrim()
lpad() rpad()
reverse()
(6)分组函数(聚合函数)
<1>distinct 列 如果有一样的列信息,会将一样的信息合并,行数会减少,查询到的每一个列,行数个数需要一致,
distinct 列,列 如果有两个以上的列,会将两个或多个列的组合当成一个整体,如果整体有一样的信息,才会去重复,否则会全部显示
<2> 分组函数+分组条件
分组函数:count()、max()、min()、avg()、sum()
分组条件:group by 列
11、几个关键字的使用
(1)in 满足查询子集中的某一个即可
in后面可以是固定的值,也可以是通过SQL语句查询出来的结果
in() not in()
(2)all 满足查询子集中的全部才可以,不能是固定的值只允许写SQL语句(通过嵌套来获取子集)
>all <all =all !=all(结果与not in一致)
(3)any 满足子集中的某一个即可,不能是固定的值只允许写SQL语句(通过嵌套来获取子集)
>any <any =any(结果与in一致) !=any
(4)some 与any完全一致
12、集合操作 并集union (Oracle有--->交集intersect----->差集minus)
union(结合 合并的意思 并集)
(1)要求前后两个查询子列的列数是一致的
(2)类型没有要求
(3)拼接后显示的列名默认是前一个子集的列名
(4)注意:union和union all的区别(建议以后尽量使用union all来做合并处理)
union 合并后去做重复的处理 ,性能比较慢,如果出现重复元素记录的是第一次出现的那一行
union all将两个查询的字节直接做合并,不作任何处理,性能比较快
13、主键约束(Primary Key)
(1)每一个表格内,只能有一个列别设置为主键约束
(2)主键约束通常是用来标记表格中数据的唯一存在
(3)主键约束要求当前的列,不能为null值
(4)主键约束要求当前的列,值是唯一存在的,不能重复
alter table 表名 add constraint 约束名字 约束类型(列);
alter table myclass add constraint pk_myclass primary key(classid);
(5)查询主键
desc 表名;-----------》description描述
show keys from 表名;
(6)若自己定义的主键名字用不上,可简写为:
alter table 表名 add primary key (classid);
(7)主键自增
如果没有启始值的说明,主键列的值会从1开始
alter table myclass modidfy int(4) auto_increment;
alter table myclass change classid int(4) auto_increment;
主键的值从10开始
alter table myclass auto_increment = 10;
(8)删除主键
alter table myclass drop primary key;
注意:删除主键后,不重复的特性取消了,非空特性还在
alter table myclass modify classid int(4) null;
14、唯一约束(Unique [Key])
(1)唯一约束表示的是列的值 不能重复 可以为空
(2)唯一约束在表格中可以存在多个列
alter table 表名 add constraint 约束名 约束类型(列);
alter table myclass add constraint uk_myclass unique [key] (loc);
(3) 可简写为:
alter table myclass add unique key(loc);//约束名默认的列名
(4)删除唯一约束
alter table myclass drop index 约束名;
15、非空约束
在表格中的某一个列上添加非空约束
当前列的值不能为null
alter table 表名 modify 原列名 原类型 原长度 [not] null default xxx;
alter table 表名 change 原列名 原类型 原长度 [not] null default xxx;
16、外键约束(Foreign Key)
(1)表格中可以有多个列被设置为外键约束
(2)当前列的值可以为空,可以重复
(3)当前列的值不能随便填写,值需要去另外一张表格门内寻找
(4)外键是当前列的值受到另外一张表格某一个列的影响
(5)另外一张表的列是唯一约束(主键,唯一)
alter table 表名字 add constraint fk_当前表_关联表 foreign key(当前表的列) REFERENCES 关联表(关联表的列);
(6)查看外键约束
show keys from 表;
desc 表;
show constraint table 表名;
(7)删除外键约束
alter table 表名字 drop forrign 约束名字;
注意:通过上面的语句其实已经将外键约束删除掉了,但是在创建外键的时候,自动在当前表格内添加一个新的key,
需要手动将这个生成的Key删掉,外键才真的删除干净
alter table 表名字 drop key 约束名字;
17、检查约束(Check)
例: alter table student add constraint ck_sage check(sage>15 and sage<30);
18、表关系
一对多
多对多
一多一
19、广义笛卡尔积
广义笛卡尔积----->进行条件筛选------>等值连接
广义笛卡尔积将两张表格或多张表格进行无条件的拼接,在拼接后的一张大表格的基础上进行了where的筛选,
select * from A,B where 条件;
20、外连接
select * from A left/right [outer] join B on 条件;
(1)两张表格A和B 取决于谁的数据在左边显示呢?
A表格先出现 A左边显示
B表格后出现 B右边显示
(2)left 和right 来控制哪一个表格的数据作为基准
作为基准的数据必须全部显示出来
非基准的表格按照on条件与之拼接
若找到条件拼接,则正常显示,若找不到满足条件的则null
21、内连接(自连接)
select * from A inner join B on 条件;
查询出来的结果与等值连接的结果一致
内连接不分左右,不能省略inner关键字
A和B是可以不同的两张表格
A和B也可以是相同的一张表格
22、行列互换
select 配合着group by 使用到了分组函数if()函数
23、分页查询 (limit a,b)
select * from xxx where xxx group by xxx limit a,b;
//a是起始索引,0开始,包含着当前的行
//b一共查询多少记录
24、DCL数据控制语言
控制用户的权限
(1)创建一个新的用户 管理员身份
create user '用户名'@‘IP’ identified by '密码'; mysql.user 表格 user,host
修改密码: update mysql.user set authentication_string = password('新密码') where user = '用户名';
(2)创建的用户默认只有一个权限usage 只能登录
grant 权限 on 数据库名.表名 to '用户'@'IP'; show grants for '用户名'@'IP';
强烈建议 flush privileges;
(3)回收用户所拥有的权限
revoke 权限 on 数据库名.表名 from '用户名'@'IP';
(4)删除用户
drop user ‘用户名’@‘IP’;
delete from mysql.user where user ='用户名' and host = 'IP';
(5)常用的mysql权限如下:
数据库/数据表/数据列权限:
Create 建立新的数据库或数据表
Alter 修改已存在的数据表(例如增加/删除列)
Drop 删除数据表或数据库
Insert 增加表的记录
Delete 删除表的记录
Update 修改表中已存在的记录
Select 显示/搜索表的记录
-----------------------------------
References 允许创建外键
Index 建立或删除索引
Create View 允许创建视图
Create Routine 允许创建存储过程和包
Execute 允许执行存储过程和包
Trigger 允许操作触发器
Create User 允许更改、创建、删除、重命名用户和收回所有权限
全局管理MySQL用户权限:
Grant Option 允许向其他用户授予或移除权限
Show View 允许执行SHOW CREATE VIEW语句
Show Databases 允许账户执行SHOW DATABASE语句来查看数据库
Lock Table 允许执行LOCK TABLES语句来锁定表
File 在MySQL服务器上读写文件
Process 显示或杀死属于其它用户的服务线程
Reload 重载访问控制表,刷新日志等
ShutDown 关闭MySQL服务
特别的权限:
All 允许做任何事(和root一样)
Usage 只允许登录,其它什么也不允许做
25、数据库设计的范式(Normal Form(标准化形式--普通范式))
设计数据库时,遵循的不同规范,这些规范统称为范式
范式的目的是为了减少数据库中的冗余, 管理表格的时候变得容易(修改、删除)
查询的时候可能就涉及到表格联合的问题(性能)
(1)1NF(第一范式)
要求数据保证原子性
每一个表格的每一个列都是不可分割的(行列交叉点的单元格内只存储一个数据)
每一个表格必须有主键约束(快速查询某一行记录)
(2)2NF(第二范式)
在满足第一范式的前提下
不允许出现部分依赖性
(非主键列不能受到主键列或主键的一部分影响)
(3)3NF(第三范式)
在满足前两个范式的前提下
不允许出现传递依赖性
(非主键列不能受到非主键列或非主键的一部分影响)
26、待续。。。。