sql语句(select,create,drop,alter,delete,insert,update,grant)

SQL语言

关系型数据库常见对象

  • 数据库:database
  • 表:table 行:row 列:column
  • 索引:index
  • 视图:view
  • 用户:user
  • 权限:privilege

SQL语言规范

 SQL语言是关系型数据库的语言标准
 SQL语言规范
1,数据库系统中,sql语句不区分大小写
2,SQL可单行或多行书写,以;结束
3,--用来注释,单行注释
4,对象的命名以字母开头,不使用系统保留字

SQL语言分类

  • DDL:数据定义语言,creat,drop,alter
  • DML:数据操纵语言,insert,delete,update
  • DQL:数据查询语言,select
  • DCL:数据控制语言,grant,revoke

数据类型

数值型与字符型
数值型: 整数(int)     小数(float)
字符串型: 定长(char)  变长(varcher)

字段修饰符
    null           可为空     
    not null       不可为空
    primary key    主键   
    unique key     唯一键
    default        默认值
    character set  指定字符集
    auto_increment 自动递增
    unsigned       无符号
    enum()        多选一

mysql基本用法

~/.mysql_history  #mysql的命令历史
mysql 登录  
  [库名]  mysql命令加上数据库名可直接登录并进入数据库
  -u 用户
  -h 服务器主机
  -p 密码
  -e 直接执行mysql命令
  -s 指定socket文件

mysqladmin 命令
      ping 查看数据库是否正常
      password 修改密码
例: mysqladmin -uroot -pssy192011 ping 

安全初始化脚本mysql_secure_installation 

mysql基本使用
   status  --查看mysql详细信息
   use     --切换目录
   system ls /data/ --调用shell命令
   quit    --退出

DDL语句

show  databases/tables--列出所有 库/表

show  create  database/table db1; --查看库/表的创建过程
desc hellodb.user--查看表的结构

create database db1; --创建数据库
drop database/table db1; --删除数据 库/表
alter database/table  db1 character set utf8; --修改字符集为utf8

创建数据表
create table yun (
 id int unsigned auto_increment primary key,
 name varchar(20) not null,
 gender enum("m","f") default "m",
 age int ) auto_increment=1;

create table yyy  select * from user--创建表内容为slect的标准输出
create table sss like  yyy; --创建表sss结构结构和yyy一样

修改数据表
alter  table sss rename yyy;  --修改表名称
alter  table sss add gender enum('m','f');  --增加字段
alter  table sss change has_email has_email int(1) default 1; --修改字段名
alter  table sss drop gender;              --删除字段
alter  table sss add primary key (stuid);   --添加主键

DML语句(增删改)

insert(增),delete(删),update(改)

insert--添加记录
insert ssy (classid,class,numofstu) values (10,"yunge",21),(11,"mage",28);
insert ssy  values (11,"niuge",33)
--注:不指定字段名即所有字段次序赋值,字符串数据要用引号

update --修改记录
update ssy set class="jj" where classid=12;

delete --删除记录
delete  from ssy where classid=12

DQL语句(查)

单表查询
--字段过滤
select  *  from classes;           --显示表中所有字段
select  user,host from classes;         --显示表中user和host两个字段
select name 姓名,age 年龄,gender 性别 from students; --字段显示使用别名

--记录过滤
--条件判断  where 
--比较操作符: =等于  <>不等于  >大于   <小于
--逻辑操作符: and且  or或  not取反
--通配符查询: like %任意字符 _任意单个字符  s%以s开头   %s以s结尾  %s%包含s
select * from students where gender="m";            --取gender为m的行
select * from students where gender<>"m";           --取gender不为m的行
select * from students where gender="m" and age>25; --取gender为m并且age大于25的行
select * from students where classid is null;       --取classid为空的行  
select * from students where classid is not null;   --取classid不为空的行
select * from students where name like 's%';        --取name以s开头的行
select * from students where not name like 's%';    --取name不以s开头的行
select * from students order by age;                --将age字段中的行排升序
select * from students order by age desc;           --将age字段中的行排降序

--聚合函数  count()数量  avg()平均值  max()最大值   min()最小值 
select count(*) from students;  --统计表中总行数
select avg(age) from students;  --统计表中age的平均值
--分组 group by
select classid,avg(age) from students where classid is not null group by classid;        --取每个班级的平均年龄
select classid,gender,avg(age) from students where classid is not null group by classid,gender; --取每个班级男生女生的平均年龄

多表查询
联合查询: union  纵向连接,字段名可以不同,字段数需相同,具有去重功能
  select stuid,name,age,gender from students union select tid,name,age,gender     from teachers;

子查询: select的执行结果被其他sql语句调用
  --用于比较表达式中的子查询;子查询仅能返回单个值
  select name,age from students where age>(select avg(age) from students );
  --用于FROM子句中的子查询
  select aage,classid from (select avg(age) aage,classID from students  group     by Classid) s where aage>10;

交叉连接: cross join(横向笛卡尔)
  --两张表完全结合
  select * from students cross join teachers;
  --两张表完全结合,并表起别名取students的stuid和name,取teachers的tid和name
  select s.stuid,s.name,t.tid,t.name from students s cross join teachers t;

内连接: inner join 横向连接
--从结果表中删除与其他被连接表中没有匹配行的所有行
select * from teachers  inner join students on teachers.tid=students.teacherid;
--一旦定义表的别名,原表名将无法使用
select t.tid,t.name,s.name,s.stuid from teachers t inner join students s on t.tid=s.teacherid;

外连接:  横向连接
左外连接:left join1表的全部记录且取2表的与1表交集的记录,无交集用null表示
select s.name,s.age,t.name,t.age from students s left join teachers t on s.teacherid=t.tid;
右外连接:right join2表的全部记录且取2表的与1表交集的记录,无交集用null表示
select s.name,s.age,t.name,t.age from students s right join teachers t on s.teacherid=t.tid;

完全外连接: 左外连接加右外连接  取表一和表二全部记录
 select * from students s left  join teachers t on s.teacherid=t.tid  
 union 
 select * from students s right join teachers t on s.teacherid=t.tid;

自连接:  表1与表1连接
select e.name,l.name from db1 as e inner join db1 as l on e.leaderid=l.id;

三表连接
select st.name,co.course,sc.score  from scores sc inner join courses co on sc.courseid=co.courseid inner join students st on st.stuid=sc.stuid;

view 视图

视图: 是一种虚拟的表,select命令的查询结果,基表的修改会使视图变化
视图创建:
create view jj as select students.name,courses.course,scores.score from courses inner join scores on courses.courseid=scores.courseid inner join students on students.stuituid=scores.stuid;
视图查询 select * from jj;
视图删除 drop view jj;

用户管理DCL

用户数据库: mysql.user 
     %通配符,任意字符
     _通配符,单个字符
create user yun@'10.0.0.%'; 创建用户   
drop user yun@'10.0.0.8'; 删除用户
rename user  jj@'10.0.0.8' to mage@'10.0.0.8'; 用户名修改
设置密码
update mysql.user set password=password('ssy192011') where user='root';
flush privileges; 修改后生效

破解mysql root密码
vim /etc/my.cnf
[mysqld]
skip-grant-tables  跳过密码验证       
skip-networking  禁止远程

权限管理DCL语言
grant select(user,host),insert(user) on mysql.user  to yun@'10.0.0.%'; 字段授权
grant all on *.* to root@'10.0.0.%'; 授予所有权限针对所有库所有表
grant all on mysql.* to yun@'10.0.0.%'; 授予所有权限针对mysql库下的所有表
show grants for yun@'10.0.0.%'; 查看用户获得的权限
revoke delete on mysql.* from yun@'10.0.0.%'; 取消用户权限
revoke all on mysql.*  from yun@'10.0.0.%'; 取消用户全部权限

你可能感兴趣的:(sql语句(select,create,drop,alter,delete,insert,update,grant))