数据库基础 ---- MySQL基础语法

数据库基础 ---- Mysql基础语法

MySQL基础语法的理解概述:

  • MySQL是关系型数据库,此类数据库通用的操作语言是SQL结构化查询语言(Structured Query Language),但是具体到不同的数据库,SQL语句又各自有些区别,比如SQL语句单行注释用'--空格',MySQL在此基础上另有‘#’。
  • SQL语句的结构:
    DDL数据定义语言(Data Definition Language)如:建库,建表
    DML数据操纵语言(Data Manipulation Language)如:对表中的记录进行增删改
    DQL数据查询语言(Data Query Language)如:对表中的查询操作
    DCL数据控制语言(Data Control Language)如:设置用户的权限

MySQL基础语法的使用概述:

  • 在dos中登入MySQL后,tab键可以自动补全关键字
  • 对表进行操作前需要先确定使用的数据库,对数据进行操作前需要确定表
  • 删除整张表的三种命令对比:
    1.DROP TABLE 表名:删除整张表的内容和定义,释放空间,所以要新增记录必须要另新建表;
       TRUNCATE TABLE 表名:删除整张表的内容,但不删除定义,释放空间即将表和表的索引都设置成初始大小,所以可以直接新增记录,若自增长主键则是重新开始计数
       DELETE  FROM TABLE 表名:删除整张表的内容,但不删定义,不释放空间,所以可以直接新增记录,若自增长主键则是接着已经删掉的内容开始计数

    2.就删除数据的速度来说,一般情况下DROP>TRUNCATE>DELETE
    3. TRUNCATE TABLE 与不带WHERE条件的DELETE相同,都是删除表中全部行,但TRUNCATE比DELETE速度快,而且使用系统和日志资源少
    4.DELETE每删除一行数据,就在事物日志中记录,所以用ROLL BACK命令将DELETE撤销,TRUNCATE则不能


 

MySQL基础语法的测试代码:

DDL语法的测试代码:

  /*DDL操作数据库:
  1.分别创建两个指定字符集和未指定字符集的数据库
  2.查看所有的数据库
  3.查看指定了字符集的数据库的定义信息
  4.修改数据库的字符集
  5.删除数据库
  6.选择使用数据库
  7.查看正在使用的数据库
  */
    #1.
    CREATE DATABASE IF NOT EXISTS db1; -- 不存在就创建,存在就不创建
    #CREATE DATABASE db1;
    #
    CREATE DATABASE db2 DEFAULT CHARACTER SET gbk;--gbk为一种字符集合,可能会汉语乱码
    
    #2.
    SHOW DATABASES;
    #SHOW DATABASE;错于查看的是所有表,关键词是复数
  
    #3.
    SHOW CREATE DATABASE db2;
  
    #4.
    ALTER DATABASE db2 DEFAULT CHARACTER SET UTF-8; -- utf-8汉语正常显示
    
    #5.
    DROP DATABASE db1;
 
    #6.
    USE db2;
    #SELECT DATABASE db2;错于误解SELECT关键词的字面意思

    #7.
    #使用一个MySQL的全局函数实现
    SELECT DATABASE(); 
    #SELECT DATABASES();错于当前使用的数据库只有一个,关键词是单数

  /*DDL操作表结构:(接上:使用的是test02数据库)
  1.创建一张有不同属性类型的表
  2.查看数据库中所有表
  3.查看表的结构
  4.查看创建表的SQL语句
  5.再创建一个表结构相同的新表
  6.删除旧表
  7.修改表的结构:
    修改表的名称
    修改表的字符集
    为表添加列
    修改表中某列的类型
    同时修改表中某列的名称,类型
    删除表中的某列   
*/
    USE db2;
    #1.
    CREATE TABLE table1{
       attributeInt INT(3),  --整数型属性
       #attributeInt INT;错于使用";"提前结束了命令
       #INT attributeInt, 错于数据类型应该写在数据名称之后
       #
       attributeDouble DOUBLE, --浮点型属性
       attributeVarchar VARCHAR(25), --字符型属性
       attributeData DATA  --日期型属性
       #attributeData DATA,错于最后一个属性不用逗号
    }DEFAULT CHARSET=gkd;
  
    #2.
    SHOW TABLES;
    #SHOW TABLE;错于展示所有的表,关键词需要用复数形式
    
    #3.
    DESC table1;
   
    #4. 
    SHOW CREATE TABLE table1;

    #5.
    CREATE TABLE table1.0 LIKE table1;

    #6.
    DROP TABLE IF EXISTS table1; -- 存在就删除,不存在也不会报错
    #DROP TABLE table1;

    #7.
    RENAME TABLE table1.0 to table2;
    ALTER TABLE table2 character set utf-8;
    ALTER TABLE table2 ADD attributeBlob BLOB; --二进制文件型属性
    ALTER TABLE table2 MODIFY attributeBlob LONGBLOB; --加长二进制文件
    ALTER TABLE table2 CHANGE attributeBlob attributeLongblob LONGBLOB;
    ALTER TABLE table2 DROP attributeLongblob ;

DML语法的测试代码:

/*DML操作表中的数据(接上,表是table2)
1.在表中分别做全部属性插入记录和部分属性插入记录
2.创建新表,将table2表中的数据复制到一张新表table3中
3.分别修改某列中所有的属性值,一列中某行的属性值
4.分别删除旧表的某行数据,删除整张旧表
*/

#1.
INSERT INTO table2 (attitudeInt,attitudeDouble,attitudeVarchar,attitudeData) VALUES(1,1.0,'AAA','2077-12-01'); 
#INSERT INTO table2 VALUES (1,1.0,'AAA','2077-12-01');
#INSERT INTO table2 VALUES (1000000000,1.0,'AAA','2077-12-01'); 32位int上限是2147483547,错于数据带下超出范围
#INSERT INTO table2 VALUES (1,1.0,'AAA','2077.12.01');错于插入的数据与字段的数据类型不一致
#INSERT INTO table2 VALUES (1.0,1,'AAA','2077-12-01');错于插入的数据顺序与定义表时的属性顺序不一致
#
INSERT INTO table2 (attitudeInt,attitudeDouble,attitudeVarchar) VALUES (2,2.0,'BBB');
#INSERT INTO table2 VALUES (2,2.0,'BBB',null);
#
INSERT INTO table2 VALUES (3,3.0,'CCC','2070-12-01');
INSERT INTO table2 VALUES (4,4.0,'EEE','1970-02-01');

#2.
CREAT TABLE table3 like table2;
INSERT INTO table3 SELECT * FROM table2; 
#INSERT INTO table3(attitudeInt,attitudeDouble,attitudeVarchar,attitudeData) SELECT attitudeInt,attitudeDouble,attitudeVarchar,attitudeData FORM table2;

#3.
UPDATE table3 SET attitudeInt = 1;  
UPDATE table3 SET attitudeVarchar = 'DDD' where attitudeVarchar = 'EEE';

#4.
DELETE FROM table3 attitudeVarchar = 'DDD';
DELETE FROM table2;
#TRUNCATE TABLE table2; --truncate删除了表结构后,会在创建一张表

DQL语法的测试代码:

/*DQL查询表中的数据(接上,查询的表是table3)
*1.查询所有一张表的所有属性
*2.查询指定列的值
*3.查询指定列并且不出现重复值
*4.查询结果参与运算
*5.查询指定列中符合条件的行
*6.将查询结果排序显示
*7.用聚合函数查询列值
*8.将查询结果进行分组,相同数据做一组
*9.跳跃性的显示查询结果的条数
*/
#1.
SELECT * FROM table3;
#SELECT * FROM table3 AS table3.0; -- 查询结果表的名称按照别名显示,不改变表的定义名称
#SELECT * FROM table3 table3.0; -- 指定别名时,AS可以省略掉

#2.
SELECT attributeInt,attributeDouble FROM table3;
#SELECT attributeInt AS id, attributeDouble AS points FROM table3 AS table3.0;

#3.
SELECT DISTINCT attributeData FROM table3;

#4.
SELECT attributeDouble+5 FROM table3;

#5.
SELECT attributeInt FROM table3 WHERE attributeVarchar = 'AAA'; -- 以字符匹配作为条件
#SELECT attributeInt FROM table3 WHERE attributeVarchar LIKE 'A%'; --"%"通配符可以表示多个字符
#SELECT attributeInt FROM table3 WHERE attributeVarchar LIKE 'A-A'; --“-”通配符只能表示一个字符
#
SELECT attributeVarchar FROM table3 WHERE attributeInt = 1; -- 以数值相等作为条件
#SELECT attributeVarchar FROM table3 WHERE attributeInt == 1; -- 错于mySQL中没有“==”
#
#SELECT attributeVarchar FROM table3 WHERE attributeInt !=1; -- 以数值不匹配作为条件
#SELECT attributeVarchar FROM table3 WHERE attributeInt <>1;
#SELECT attributeVarchar FROM table3 WHERE attributeInt NOT 1;
#
SELECT attributeVarchar FROM table3 WHERE attributeDouble<=5.0 AND attributeDouble>=1.0; --以数值范围作为条件
#SELECT attributeVarchar FROM table3 WHERE attributeDouble BETWEEN 1.0 AND 5.0;
#SELECT attributeVarchar FROM table3 WHERE  attributeDouble IN (1.0,2.0,3.0,4.0,5.0);
#
SELECT attributeVarchar FROM table3 WHERE attributeDate IS NULL; -- 查空
#SELECT attributeVarchar FROM table3 WHERE attributeDate = NULL;错于控制没有值,而不是具体的值  
#
SELECT attributeVarchar FROM table3 WHERE attributeDate = '2000-10-01' OR attributeDouble>=50.0; -- 以多条件逻辑组合作为条件

#6.组合排序是在前者条件相同的情况下,以后者条件作为排序依据
SELECT * FROM table3 ORDER BY id DESC, attributeDouble ASC; --DESC是降序。ASC升序

#7.聚合函数查询不同于一行行判断,而是对一列值进行计算再返回一个结果值
SELECT MAX(attributeInt) FROM table3; --查询列的最大值
SELECT MIN(attributeDouble) FROM table3; --查询列的最小值
SELECT AVG(attributeDouble) FROM table3; --查询列的平均值
SELECT COUNT(attributeDate) FROM table3; --查询一列的记录总数,NULL不计入
#SELECT COUNT(IFNULL(attributeDate,0) FROM table3); --将attributeDate中的NULL用0代替
#
SELECT SUM(attributeDouble) FROM table3; --查询一列的总和

#8.
#GROUP BY将分组字段结果中相同内容作为一组,并返回每组的第一条数据,所以单独分组没实际作用,分组的目的就是为了统计,一般有GROUP BY分组就有SELECT 聚合函数
#WHERE先过滤,GROUP BY再分组,最后聚合函数统计并返回查询结果
SELECT COUNT(*) FROM table3 WHERE attributeDate BETWEEN '2000-01-01' AND '2030-01-01' GROUP BY attributeDouble 
#SELECT COUNT(*) FROM table3 WHERE COUNT(*)>2 GROUP BY attributeDouble;错于WHERE后不能用聚合函数做条件
#
#HAVING在分组之后过滤不符合条件的记录,所以能使用聚合函数
SELECT COUNT(*) FROM table3 WHERE attributeDate BETWEEN '2000-01-01' AND '2030-01-01' HAVING COUNT(*) > 2;
 
#9.LIMIT "起始行数,从0开始计数","返回的行数" 
SELECT * FROM table3 LIMIT 0,5; -- 从第1条开始显示,显示5条
#SELECT * FROM table3 LIMIT 5;   -- 第一个参数是0则可以省略
#SELECT * FROM table3 LIMIT 10000;  --记录不够就有多少显示多少

  


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值