当前位置: 首页 > news >正文

SQL基础知识

SQL是一个标准的数据库语言,是面向集合的描述性非过程化语言。

  • 优点:功能强、效率高、简单易学易维护。
  • 缺点:非过程化语言,大多数语言都是独立执行,与上下文无关,而大多数 应用都是一个完整的过程,显然用SQL完全实现这些功能是很困难的。

       大多数数据库公司从以下两方面来解决此问题:

    1)扩充SQL,在SQL中引入过程性结构

    2)把SQL嵌入到高级语言中

 

表(TABLE)

视图(VIEW)

索引(INDEX)

同义词(SYN)

聚簇(CLUSTER)

 

数据库操作:

  创建数据库:create database 库名  例如:create database db1  //创建一个名为db1的数据库

  删除数据库:drop database 库名  例如:create database db1  //删除名为db1的数据库

  查看数据库:show databases  //显示所有库名

  使用数据库:use 库名

  重命名数据库:停止服务 -> 修改数据库所在文件夹的名称 -> 启动服务

 

数据表操作:

  创建数据表:create table 表名  例如:create table tb1  //创建一个名为tb1的表

  删除数据表:drop table 表名  例如:drop table tb1  //删除一个名为tb1的表

  查看数据表:show tables  //显示当前库中的所有表名

  查看表结构:describe 表名

  修改表结构:

    添加字段:alter table 表名 add 列名 属性   例如:alter table tb1 add id int  //给表tb1中增加一个字段id,属性为int

    删除字段:alter table 表名 drop 列名  例如:alter table tb1 drop id  //删除表tb1中的id字段

    修改字段名称:alter table 表名 change 列名 新列名 属性  例如:alter table tb1 change id  id_new int  //将表tb1的id字段名称改为id_new

    修改字段属性:alter table 表名 change 列名 列名 新属性  例如:alter table  tb1 change id int decimal  //将表tb1的id字段属性int改为decimal

    修改字段属性:alter table 表名 modify 列名 新属性  例如:alter table tb1 modify id decimal

 

表中数据操作(增删改查):

  插入数据:insert into 表名(列1,列2) values (值01,值02),(值11,值12)

  查询数据:select 列名 from 表名 where 查询条件

  修改数据:update 表名 set  列名=值 where 条件

  删除记录:delete from 表名 where 条件

 

数据复制:

  创建新表 - 复制旧表结构及数据到新表    create table 新表 select * from 旧表

  创建新表 - 仅复制旧表结构  create table 新表 select * from 旧表 where 1=2

  创建新表 - 新旧表结构不同(新表中仅包含旧表中个别字段)  create table 新表 select 列1,列2 from 旧表

  复制旧表数据到新表(表结构相同)insert  into 新表 select * from 旧表

  复制旧表数据到新表(表结构不同)insert into 新表(列1,列2) select 列1,列2 from 旧表

    

单表查询:

  select distinct 列1,列2  //distinct对后面的列1列2均有效

  from 表名

  where 条件     //运算符  =   !=   >=   like   not like   is null    between...and...     in(值1,值2)      通配符:%多个字符   _单个字符

  group by 按列不同值分组   //分组,常与avg、sum等聚合函数一起使用,group by str1,str2 表示当str1值相等时,再按str2进行分组

  having   //查询第二条件

  order by 列名     //排序,默认升序。desc降序   asc升序

  limit 个数

 

where和having: 

  •   where无法跟合计函数一起使用,如:

        where sum(cnt) > 3   错误

        having sum(cnt) > 3  正确

  •   where作用于视图和表,having作用于组
  •   where在分组和聚集之前,选取输入行(它控制哪些行进入聚集运算);having在分组和聚集之后,选择分组的行
  •   having一般跟在group by之后,执行记录组选择的一部分来工作的,where则是执行所有数据来工作的

 

distinct和group by:

  In most cases, a DISTINCT clause can be considered as a special case of GROUP BY. For example, the following two queries are equivalent: (distinct子句是group by的特例,以下两个语句等效)

  SELECT DISTINCT c1, c2, c3 FROM t1 WHERE c1 > const;(distinct对后面的C1,C2,C3列均有效)
  SELECT c1, c2, c3 FROM t1 WHERE c1 > const GROUP BY c1, c2, c3;

 grant赋予权限:

  grant 权限1,权限2,…权限n on 数据库名称.表名称 to 用户名@用户地址 identified by ‘密码’;

  • 权限1,权限2,…权限n代表select,insert,update,delete,create,drop,index,alter,grant,references,reload,shutdown,process,file等14个权限。
  • 当权限1,权限2,…权限n被all privileges或者all代替,表示赋予用户全部权限。
  • 当数据库名称.表名称被*.*代替,表示赋予用户操作服务器上所有数据库所有表的权限。
  • 用户地址可以是localhost,也可以是ip地址、机器名字、域名。也可以用’%'表示从任何地址连接
  • ‘连接口令’不能为空,否则创建失败。
  • 如果带了 with grant option,那么用户testuser1可以将select ,update权限传递给其他用户( 如testuser2)。如果没带,则不能将权限传递给第三方。

  例如:给所有host下的zy用户,赋予所有数据库和表的一切权限

    mysql> grant all privileges on *.* to zy@'%' identified by '123456' with grant option;  // %表示从任何地址连接

    mysql> flush privileges;  //刷新系统权限表,使以上grant生效

    

 

转载于:https://www.cnblogs.com/xiaochongc/p/9825410.html

相关文章:

  • 开放源代码库指南
  • WPF换肤之三:WPF中的WndProc
  • 【转】VUE 爬坑之旅-- 如何对公共JS,CSS进行统一管理,全局调用
  • 各个浏览器之间常见的兼容性问题
  • 为什么需要RPC,而不是简单的HTTP接口
  • 和开源硬件相关的几个词,免费、山寨、创客教育,以及未来 | COSCon'18
  • 2018云计算行业现状及2020年云计算发展趋势
  • 当我们谈论Promise时,我们说些什么
  • 谷歌推迟公布Google+漏洞遭参议员不满
  • 今日头条完成超25亿美元融资 软银GA与KKR参与
  • iOS开发中实用的lldb命令
  • 网络时间戳
  • 昨天1024程序员节,我故意写了个死循环~
  • Git常用命令记录
  • Algs4-2.1.32运行时间曲线图
  • 网络传输文件的问题
  • 【面试系列】之二:关于js原型
  • 345-反转字符串中的元音字母
  • JAVA_NIO系列——Channel和Buffer详解
  • JS基础之数据类型、对象、原型、原型链、继承
  • ViewService——一种保证客户端与服务端同步的方法
  • webpack+react项目初体验——记录我的webpack环境配置
  • 复习Javascript专题(四):js中的深浅拷贝
  • 类orAPI - 收藏集 - 掘金
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 实习面试笔记
  • 我的面试准备过程--容器(更新中)
  • 在Unity中实现一个简单的消息管理器
  • 转载:[译] 内容加速黑科技趣谈
  • ​渐进式Web应用PWA的未来
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • $L^p$ 调和函数恒为零
  • (九)One-Wire总线-DS18B20
  • (四)Linux Shell编程——输入输出重定向
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • (转)大型网站架构演变和知识体系
  • .Net 6.0 处理跨域的方式
  • .NET 发展历程
  • .NET/C# 使窗口永不获得焦点
  • .NET6 命令行启动及发布单个Exe文件
  • .Net的C#语言取月份数值对应的MonthName值
  • .NET开发不可不知、不可不用的辅助类(一)
  • .NET中的Exception处理(C#)
  • /proc/stat文件详解(翻译)
  • @SpringBootApplication 包含的三个注解及其含义
  • [C# 开发技巧]实现属于自己的截图工具
  • [C#]获取指定文件夹下的所有文件名(递归)
  • [C++] sqlite3_get_table 的使用
  • [CareerCup][Google Interview] 实现一个具有get_min的Queue
  • [DevEpxress]GridControl 显示Gif动画
  • [Docker]三.Docker 部署nginx,以及映射端口,挂载数据卷
  • [Docker]四.Docker部署nodejs项目,部署Mysql,部署Redis,部署Mongodb