设为首页 收藏本站
查看: 687|回复: 0

[经验分享] 数据库技能实战进阶之常用结构化sql语句(上)

[复制链接]

尚未签到

发表于 2018-10-20 12:10:08 | 显示全部楼层 |阅读模式
  常用的结构化查询语言主要分为数据定义语言(DDL)、数据操作语言(DML)、数据控制语言(DCL)和数据查询语言(DQL)。特别在关系型的数据库例如(mysql、mariadb、 percona、DB2、Oracle、SQL server)等都是采用共同的SQL语句来实现增删改查等数据的管理。本文会针对以下的四种类型的结构化SQL来进行介绍。
DDL 数据定义语言  create     drop     alter  
DML 数据操作语言  insert    delete   update
  
DCL 数据控制语言  grant    commit   rollback
  
DQL 数据查询语言  select
  一、 create与drop 简介
  首先create 与drop 是直接可以对数据库进行操作,例如创建数据库、删除数据库。简单示例如下,
CREATE  DATABASE  IF  NOT EXISTS   DBMS  default  character set utf8;  
#创建一个名为DBMS默认字符集为UTF8的数据库
  
SHOW databases; #显示当前数据库管理系统里面所有的数据库,就可以看到我们当前创建的DBMS库
  
Drop  database  DBMS; #删除名为DBMS的数据库
  其次,create 和drop能对表进行操作,和对库的操作一致 将database 更改为table,即可创建和删除操作。后面我们要联系增删改查,所以创建以下表SQL如下:
create table if not exists user (  
     id int unsigned not null auto_increment primary key,
  
     username  varchar(30) not  null,
  
     password  varchar(30)  not  null
  
     );
  
或者使用下方SQL。其实原理和表结构是一样,只是呈现方式不一样
  
   CREATE TABLE  if not exists `user` (
  
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  
  `username` varchar(30) NOT NULL,
  
  `password` varchar(30) NOT NULL,
  
  PRIMARY KEY (`id`)
  
) ENGINE=InnoDB DEFAULT CHARSET=utf8
  二、插入数据 insert
  insert 是我们将数据写进数据库最用的方法之一,常见的语法如下:
insert  into  tablename  (COLUMN ) VALUEs( );  

  
#tablename 是我们要插入数据的目标表名,column是列名,values里面对应的是要插入的值,需要强
  
调的当我们对所有列插入即values()中对应列与创建表结构的列顺序对应时,可以省略(COLUMN )
  
insert  into  tablename   VALUEs('','','' );
  
例如:
  
insert  into  user    VALUEs(1,'linux','linux' );但是给id设置了主键自增所以就没必须做,
  
使用上面的列名对应就可以了
  
优化后: insert  into  user (username,password )   VALUE('python','java' )
  

  
#批量插入数据
  
我们还可以用 insert  into  tablename  (COLUMN ) VALUEs( 值1),(值2)...的方式批量插
  
入效率高很多。
  
isert into  user (username,password )   VALUEs('python999',334989 ),('LInuxmysql','777')
  
或者
  
  insert  into  user (username,password )   VALUE('python','java' ),('LInuxmysql','777')
  

  
注意:经测试values和value插入值时一样,需要注意的是,定义的密码是varchar()字符类型,
  
而3334989是整形,也会插入成功,这里是将整形转换成字符串类型。
  将数据插入到数据库的方法除了insert外,还有load data infile (加载文件),以及从其他表查询插入的方法,可以参考之前的文章,甚至可以用navicat之类客户端工具导入。
  三、删除数据
  删除数据可以分为删除部分和删除全部,删除全部里面又可以分为只删除数据和表和数据一起删除,删除表和数据 ,可以使用上面提到的drop table  tablename ,删除全部数据可以用delete   from tablename   或者tuncate  table。
  delete   from table  和tuncate table 的区别:
  delete  删除后不会刷新主键的值  例如你删除主键ID(3-5),那么下次插入数据就是从5开始。
delete     from user  #删除所有数据  
  insert  into  user (username,password )   VALUE('pythonlinux','javadocker' ),('LInuxmysql','redis')
  
select  *  from  user;#插入数据再查询
  
查询所有数据,检查我们的id:
  
select   * from user
  
11    python    java
  
12    LInuxmysql    777
  
13    pythonlinux    javadocker
  
14    LInuxmysql    redis
  
观察表里面的数据,可以发现第一行的id是从11开始的,这就说明delete删除数据的时候不会刷新自增值
  
truncate  user 再插入数据观察
  
truncate  user#清空所有数据
  
insert  into  user (username,password )   VALUE('pythonlinux','javadocker' ),('LInuxmysql','redis')
  
select  *  from  user;#再插入数据,再查询
  
1    pythonlinux    javadocker
  
2    LInuxmysql    redis
  
truncate 清空表后 再插入数据,自增列从0开始。
  
删除部分数据先插入多条,检查插入后的数据,
  
insert  into  user (username,password )   VALUE('python','javadocker' ),('LInux','redis'),('linux',999)
  
,('redis','name ')
  

  
1    pythonlinux    javadocker
  
2    LInuxmysql    redis
  
3    python    javadocker
  
4    LInux    redis
  
5    linux    999
  
6    redis    name
  
7    python    javadocker
  
8    LInux    redis
  
9    linux    999
  
10    redis    name
  
11    python    javadocker
  
12    LInux    redis
  
13    linux    999
  
14    redis    name
  

  
删除  id  >10的部分
  
delete   from user  where id >10; 然后再插入数据,查询结果如下:
  
1    pythonlinux    javadocker
  
2    LInuxmysql    redis
  
3    python    javadocker
  
4    LInux    redis
  
5    linux    999
  
6    redis    name
  
7    python    javadocker
  
8    LInux    redis
  
9    linux    999
  
10    redis    name
  
15    python    javadocker
  
16    LInux    redis
  
17    linux    999
  
18    redis    name
  
与上面的结果相比 id不连续。
  四、条件判断与限制
  条件判断主要根据数学运算符、逻辑运算符以及比较运算符等完成。
1) 数学运算符:  
  +,-,*,%
  
2)逻辑运算符
  
&&,||,and,or ,in, between  and
  
3)比较运算符:
  
=,!=,>=,,

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-624049-1-1.html 上篇帖子: SQL 和 NoSQL 的区别 下篇帖子: sqladvisor-点评sql语句优化工具
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表