数据库的操作

SQL 语句分类

  1. Data Definition Language (DDL 数据定义语言) 如:建库,建表,用来定义数据库对象
    关键字:create、drop、alter 等
  2. Data Manipulation Language(DML 数据操纵语言),如:对表中的记录操作增删改
    关键字:insert、delete、update 等
  3. Data Query Language(DQL 数据查询语言),如:对表中的查询操作
    关键字:select、where 等
  4. Data Control Language(DCL 数据控制语言),如:对用户权限的设置
    关键字:GRANT、REVOKE等
    MySQL 的语法
  1. 每条语句以分号结尾,如果在 SQLyog 中不是必须加的。
  2. SQL 中不区分大小写,关键字中认为大写和小写是一样的
  3. 3 种注释:
    注释的语法
  • --空格 单行注释
  • /* */ 多行注释
  • 这是 mysql 特有的注释方式

DDL:

操作数据库、表
一、操作数据库:CRUD

  • C:Create 创建

    * 创建数据库
          *create database 数据库名称; 
    
    * 创建db4数据库,判断是否存在
          *create database if not exists 数据库名称;
    
    * 创建db4数据库,并指定字符集GBK;
          *create database 数据库名称 character set 字符集名;  
    
    * 综合一点的练习:创建db4数据库,判断是否存在,并指定字符集GBK;
          *create database if not exists db4 character set gbk;  
    
  • R:Retrieve 查询

    * 查询所有数据库的名称
      show databases;
    
    *查看某个数据库库的字符集,查询某个数据库的创建语句
      *SHOW creat databese  数据库的名称;
    
  • U:Update 修改

    * 修改数据库的字符集
          *alter database 数据库名称 character set 字符集名称;
    
  • D:Delete 删除

    * 删除数据库;
          *drop database 数据库名称; 
    
    * 判断数据库是否存在,存在再删除;
        *drop database if not exists 数据库名称;
    
  • 使用数据库

    * 查询当前正在使用的数据库名称;
    *selcet database(); 
    
    * 使用数据库;
      *use 数据库名称; 
    

二、操作表

  • C:Create 创建
    语法:create table 表名(
    列名1 数据类型1,
    列名2 数据类型2,
    列名3 数据类型3,
    ...
    列名n 数据类型n
    );
    *最后一列,不需要加逗号“,”
  • 数据类型:
  • int : 整数类型,例如:age int,
  • double :小数类型,例如:score double (5,2);表示最大值是999.99
  • date :日期,只包含年月日的日期,yyyy -MM -dd
  • datetime :日期,包含年月日时分秒 ,yyyy -MM -dd HH:mm:ss
  • timestamp :时间戳类型 ,包含年月日时分秒 ,yyyy -MM -dd HH:mm:ss
    *区别,如果是timestamp,如果将来不给这个字段赋值,或者赋值为null ,则默认使用当前的系统时间,来自动赋值。
  • varchar :字符串 例如:name varchar(20);表示姓名最大20字符;zhangsan 八个字符,张三,2个字符
    超出最大字符会报错
    *创建表 ;
         *create table student(
              id  int,
              name varchar(32),
              age int,
              scroe double(4,1),
              birthday date,
              intset_time timestamp 
        ); 
* 复制表;
    *create table 表名 like 被复制的表名; 
  • R:Retrieve 查询
    * 查询某个数据库中所有表的名称;
      *show tables; 
    
    * 查询表结构;
      *desc 表名; 
    
  • U:Update 修改
    • 修改表名;
      * alter table 表名  rename to 新的表名;
  • 修改表的字符集;
      * alter table 表名 character  set 字符集名称;
  • 添加一列:
      * alter table 表名 add 列名 数据类型;
  • 修改列名称 类型;
      * alter table 表名 change 原列名 新列名 新数据类型;
      * alter table 表名 modify 原列名 新列名 新数据类型;
  • 删除列;
* alter table 表名 drop 列名;
  • D:Delete 删除
    * 删除表;
  *drop table 表名;
  *drop table  if exists 表名;

客户端图形化工具:SQLYog
安装:
傻瓜式操作,安装完毕以后,注意连接数据库。
配置新连接报错:错误号码 2058,分析是 mysql 密码加密方法变了。

解决方法:windows 下cmd 登录 mysql -u root -p 登录你的 mysql 数据库,然后执行这条SQL:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';(注意分号)

password 是你自己设置的root密码;
然后在重新配置SQLyog的连接,则可连接成功了,就OK了。

DML:增删该表中的数据

  1. 添加数据:
    语法:
  * insert into 表名(列名1,列名2,....列名n) values(值1,值2,值3,...值n);
注意事项:
    列名和值要一一对应,
    如果表名后,不定义列名,则默认给所有列添加值、
       * insert into 表名 values(值1,值2,值3,...值n);建议不偷懒
    除了数字类型,其他类型需要使用引号(单双都可以)引起来。

问题自己在创建表的时候使用timestamp,不能匹配当前系统时间

2.删除数据:

  • 语法:
  • delete from 表名[ where 条件]
    注意:
    1、如果不加条件,则删除表中所有的记录
    2、如果要删除所有记录,我们有两种做法,
    * 1.delete from 表名 ----------- 不推荐使用,有多少条记录就会执行多少次删除操作,效率低
    * 2.truncate table 表名 ------- 推荐使用,删除表,然后再创建一个一摸一样的空表,效率更高
    3.修改数据:
    语法:
  • update 表名 set 列名1=值1,列名2= 值2.... [where 条件];
    注意:
    如果不加任何条件,则会将表中全部记录修改

DQL : 查询

*select * from 表名
语法:

select 
      字段列表
from
      表名列表
where 
      条件列表
group by
      分组字段
having 
      分组之后的条件
order by
      排序
limit 
      分页限定

2、基础查询
1.多个字段的查询
select 字段名1,字段名2....from 表名;
注意如果查询所有字段则可以使用select * from 表名,这是简化的形式,用* 代替
2.去除重复
select distinct 结果集 from 表名;
如果去除多个字段重复的,必须是结果集完全一致的情况下才行,
3.计算列
一般可以使用四则运算计算一些列的值(一般智慧进行数值的运算)
ifnull(表达式1,表达式2); 表达式1:哪个字段需要判断是否为null,表达式2:如果为null,替换为。。
select name,math,english,math+english from student;
select name,math,english,math+ifnull(english,0) from student;谁有可能为null,就ifnull谁。
如果有null参与计算,计算结果都为null,

4.起别名
as :as 也可以省略
select name,math,english,math+ifnull(english,0) AS 总分 from student;
select name,math,english,math+ifnull(english,0) 总分 from student;或者用空格
3、条件查询
1.where 子句后跟条件

2.运算符
  * >、<、<=、>=、=、<>                ----------<>在 SQL 中表示不等于,在 mysql 中也可以使用!=

没有==
* BETWEEN...AND ---------在一个范围之内,如:between 100 and 200相当于条件在 100 到 200 之间,包头又包尾
* IN(集合) ------------集合表示多个值,使用逗号分隔
* LIKE '张%' ---------------模糊查询
占位符:
_:单个任意字符
%:多个任意字符
* IS NULL-------------查询某一列为 NULL 的值,注:不能写=NULL

逻辑运算符
  * and 或 && -----------------与,SQL 中建议使用前者,后者并不通用。
  * or 或 || ------------或
  * not 或 !------------------- 非

例如:

select * from student where age >20;--查询年龄大于20
select * from student where age >=20;--查询年龄大于等于20
select * from student where age =20;--查询年龄等于20 
select * from student where age !=20;--查询年龄不等于20 
select * from student where age <>20;--查询年龄不等于20 
select * from student where age >=20 and age <=30;--查询年龄大于等于20,小于等于30 
select * from student where age between 20 and 30;--查询年龄大于等于20,小于等于30 
--查询年龄22岁,18岁,25岁的人,
select * from student where age =22 or age = 18 or age = 25;
select * from student where age in(22,18,25) ;
--查询英语成绩为null;
select * from student where English is null;
--查询英语成绩不为null
select * from student where English is  not null;
-- 查询姓马的有哪些
select *  from student where name like '马%';
--查询第二个字是化的人
select *  from student where name like '_马%';
--查询姓名是三个字的人
select *  from student where name like '___';--三个下划线_
--查询姓名中包含马的人
select *  from student where name like '%马%';

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