MySQL数据库语法

用户权限管理

#创建用户
	语法:create user 用户名[@主机地址] identified by '密码';
create user 'user'@'localhost' identified by '1234';

#重命名用户
	语法:rename user 老用户名[@老主机地址] to 新用户名[@新主机地址];
rename user 'user'@'localhost' to 'user1'@'localhost';

#设置密码
	语法:set password = password('修改密码'); -- 为当前用户设置密码
	set password for 用户名 = password('修改密码'); -- 为指定用户设置密码
set password for 'user' = password('111');

#删除用户
	语法:drop user 用户名[@主机地址];
drop user 'user'@'localhost';

#赋予权力
	语法:grant 权限列表 on  *|库名 . *|表名  to 用户名[@主机地址] [identified by "用户密码"] [with grant option];
	ps:权限列表: all [privileges]: 表示所有权限; delete:允许使用delete; select:允许使用select; update:允许使用update; insert:允许使用insert 等...
		 *.* :表示所有库的所有表
		库名.表名 :表示某库下面的某表
		
#刷新权限
	flush privileges;

#查看权限
	show grants for 用户名[@主机地址];  
show grants for 'user'@'localhost';

#查看当前用户权限
	show grants;

#撤消权限
    revoke 权限列表 on *|库名 . *|表名 from 用户名[@主机地址];
revoke all privileges, grant option from 用户名[@主机地址];-- 撤销所有权限
    例如:revoke update on *.* from 'user'@'localhost';

 

连接数据库的操作

#连接数据库
	语法:mysql -h 地址 -P 端口 -u 用户名 -p 密码
mysql -h 127.0.0.1 -P 3306 -u root -p
mysql -u root -p

#退出mysql
exit;

 

数据库的操作

#创建数据库
	语法:create database 数据库名 [数据库选项];
create database DB default charset utf8 collate utf8_bin;
create database DB charset = gbk;
create database DB;
	default:默认
	charset:字符集常用为utf8
	collate:校队规则
		1.ci结尾的:不区分大小写
		2.cs结尾的:区分大小写
		3.bin结尾的:二级制编码进行比较
		
#删除数据库
	语法: drop database 数据库名;
drop database DB;

#修改数据库
	语法:alter database 数据库 [新的数据库选项];
alter database DB dafault charset gbk;

#查询数据库
	语法:show create database 数据库名;
show databases; -- 查询所有
show create database DB; -- 查询指定数据库

#进入指定数据库
	语法:use 数据库名;
use DB;

 

数据类型

#三大数据类型(部分)
	1.数值型:int(integer),float(a,b),decimal(a,b)  --a:数值长度  b:小数点后的长度
	2.字符串型:char(c)(定长),varchar(c)(变长) --c 字符串长度
	3.日期时间:date (YYYY-MM-DD), time (HH:MM:SS),datetime

 

属性

#常用属性
	null,not null,default,primary key,auto_increment,comment
	null和 not null:字段是否为空和不为空
	default:默认值,一般与not null一起使用
#约束
	1.主键:primary key
	2.唯一键: unique key
	3.自动增长:auto_increment
	4.列表描述:comment -- 考试就不用啦
	5.外键:references

 

数据的操作

#创建表
	语法:create table 表名(
        字段1  字段1类型 [字段选项],
        字段2  字段2类型 [字段选项],
        字段n  字段n类型 [字段选项]
        );
create table user(
	id int unsigned not null auto_increment, -- unsigned:正数
    name varchar(20)
);

#删除表
	删除表语法:drop table [if exists] 表名;
	删除一列语法:alter table 表名 drop 字段名;
drop table if exists user;
alter table user drop name;

#修改表
	改表名:drop table 旧表名 rename to 新表名;
	增加一列:alter table 表名 add 新列名 字段类型 [字段选项];
	修改字段类型:alter table 表名 modify 字段名 新的字段类型 [新的字段选项];
	重命名字段:alter table 表名 change 原字段名 新字段名 新的字段类型 [新的字段选项];
drop table user rename to user1;
alter table user1 add name char(10) not null default '' comment '名字';
alter table user1 modify name varchar(10) not null default 'admin' comment '修改后名字';
alter table user1 change name username varchar(10) not null default '' comment '用户名字';

#查询表
	查询所有语法:show tables;
	模糊查询语法:show tables like '模糊查询表名%';  -- 通配符:_可以代表单个字符,%代表任意
	查询表的创建语句:show create table 表名;
	查看表的结构语法:desc 表名;
	起别名:select 字段 as 名字 from 表;
	消除重复行:distinct 字段

 

运算符

#比较运算符
    <, >, <=, >=, =, !=或<>, IS NULL
    between and | not between and -- between A and B; 相当于区间[A,B].
    in | not in -- in表示某个值出现; not in表示没出现在一个集合之中.
    is null | is not null -- 空值查询
    like -- 通配符;  _  :代表任意的单个字符;  % :代表任意的字符
#逻辑运算符
    &&(AND), ||(OR), !(NOT), XOR异或

 

数据的操作

#插入数据
	语法:insert into 表名(字段列表) values(值列表);
insert into user(id,name) values(1,'admin');
	
#删除数据
	语法:delete from 表名[删除条件];
delete from user where id=1;
	高级语法:delete from 表名 [where条件] [order by 字段名 asc|desc] [limit];

#修改数据
	语法:update 表名 set 字段1=新值1,字段n=新值n [修改条件];
update user set id=1 where name='admin';
	高级语法:update 表名 set 字段1=值1,字段n=值n [where条件] [order by 字段名 asc|desc] [limit];

#查询数据
	语法:select *[字段列表] from 表名[查询条件];   -- *:代表所有字段
select * from user;
select name from user where id>0;
	高级语法:select [select选项] *|字段列表 [as 字段别名] from 表名 [where子句][group by子句][having子句][order by子句][limit子句];
	
#分组
	group by子句 (分组)
      --group by 字段/别名 [排序方式]
      		分组后排序: asc 升序(默认),desc 降序
      --统计函数需配合group by使用:
          count 返回不同的非NULL统计值  count(*)、count(字段)
          sum 求和; max 求最大值; min 求最小值; avg 求平均值

#having 子句
	 --having 子句 (条件查询)
     --where功能、用法相同,执行时机不同.
     --本质区别:where子句是把磁盘上的数据筛选到内存上,而having子句是把内存中的数据再次进行筛选.
     --where不可以使用统计函数. 一般需用统计函数配合group by才会用到having
     
#limit子句  (限制查询结果数量)
  	limit  offset,length   语法解析: offset是指偏移量,默认为0; length是指需要显示的记录数.

 

多表的查询

#联合查询
	语法:
          select语句1
          union [all | distinct]
          select 语句2
          union [all | distinct]
          select 语句n
 
#交叉连接 cross join
	select  *|字段列表 from 表名1 cross join 表名2;

#内连接 inner join
	select *|字段列表 from 左表 [inner] join 右表 on 左表.字段 = 右表.字段;
	
#左外连接 left join
  select *|字段列表 from 左表 left [outer] join 右表 on 左表.字段 = 右表.字段;
  
#右外连接 right join
  select *|字段列表 from 右表 right [outer] join 左表 on 右表.字段 = 左表.字段;

 

索引

#索引的性质分类:
	索引分为聚集索引和非聚集索引两种,聚集索引是索引中键值的逻辑顺序决定了表中相应行的物理顺序,而非聚集索引是不一样
#索引特点:查询速度快,维护性差
#创建索引
	语法:create [unique唯一索引][clustered聚集索引] index <索引名> on <表名>(<列名称>[<排序>],<列名称>[<排序>]…);
create unique index number on user(seat_number asc);
create index name_class on user(name asc,class desc);

#删除索引
	语法:drop index <索引名> on 表名;
drop index number on user;

 

视图

#视图
	简化业务逻辑,对客户端隐藏真实的表结构,视图是虚拟表
#创建视图
	create [algorithm = undefined | merge | temptable] view 视图名称 [(字段列表)] as sql语句
	-- ps:视图名必须唯一,同时不能与表面重名
create view v_user (v_name,v_score)
as
select name,score from user where score >80;

#删除视图
	drop view [if exists] 视图名称

#修改视图
	alter view 视图名称 [(字段列表)]
    as
    sql语句
	
#查询视图
	show create view 视图名称

 

事务

#事务操作
  #开启事务
  	start transaction; 或者 begin;
  #提交事务
  	commit;
  #回滚事务
  	rollback;
start transaction;--开启事物
insert into a(a_name,price) values('qqq','43');
insert into a(a_name,price) values('bbb','15');
commit;--提交事物

begin;--开启事物
insert into a(a_name,price) values('ddd','99');
rollback;--回滚事物

 

三范式

/*数据库三范式*/
    --建表规范
    - 每个表保存一个实体信息
    - 每个具有一个ID字段作为主键
    - ID主键 + 原子表

#第一范式
    字段不能再分,确保每列保持原子性.

#第二范式
    满足第一范式的基础上,不能有部分依赖.
    消除符合组合主键(A,B)就可以避免部分依赖. 增加单列关键字.

#第三范式
    满足第二范式的基础上,不能有传递依赖.
    某个字段依赖于主键,而有其他字段依赖于该字段. 这就是传递依赖.
    将一个实体信息的数据放在一个表内实现

 

你可能感兴趣的:(数据库)