MYSQL底子(DDL,DML,DQL)

打印 上一主题 下一主题

主题 872|帖子 872|积分 2616

1.MYSQL底子

Structure Query Language(结构化查询语言)简称SQL。数据库管理体系可以通过SQL管理数据库;界说和操作数据,维护数据的完备性和安全性。
SQL优点
1、简单易学,具有很强的操作性
2、绝大多数重要的数据库管理体系均支持SQL
3、高度非过程化;用SQL操作数据库时大部分的工作由DBMS自动完成
1.数据库

概念:数据堆栈,软件,安装在操作体系之上
作用:存储数据,管理数据
2.SQL分类

1、DDL(Data Definition Language) 数据界说语言,用来操作数据库、表、列等; 常用语句:CREATE、 ALTER、DROP
2、DML(Data Manipulation Language) 数据操作语言,用来操作数据库中表里的数据;常用语句:INSERT、 UPDATE、 DELETE
3、DCL(Data Control Language) 数据控制语言,用来操作访问权限和安全级别; 常用语句:GRANT、DENY
4、DQL(Data Query Language) 数据查询语言,用来查询数据 常用语句:SELECT
3.相干概念

DBMS(数据库管理体系)



  • 数据库的管理软件,科学有用的管理、维护和获取我们的数据
  • MySQL就是数据库管理体系

4.通用语法

SQL通用语法
        1. SQL 语句可以单行或多行誊写,以分号结尾。
         2. 可使用空格和缩进来增强语句的可读性。
        3. MySQL 数据库的 SQL 语句不区分大小写,关键字发起使用大写。
        4.注释
  1. --                --单行注释
  2. #                --单行注释
  3. /*...*/                --多行注释
复制代码
 5.根本命令

所有的语句都要以分号结尾
  1. show databases;        --查看当前所有的数据库
  2. use 数据库名;        --打开指定的数据库
  3. show tables;        --查看所有的表
  4. describe/desc 表名;        --显示表的信息
  5. create database 数据库名;        --创建一个数据库
  6. exit        --退出连接
复制代码
2.操作数据库

1.底子操作

1、创建数据库
  1. CREATE DATABASE [IF NOT EXISTS] 数据库名;
复制代码
2、删除数据库
  1. DROP DATABASE [if EXISTS] 数据库名;
复制代码
3、使用数据库
  1. --如果表名或者字段名是特殊字符,则需要带``
  2. use 数据库名;
复制代码
4、查察数据库
  1. SHOW DATABASES;
复制代码
2.数据库的数据类型

1.整数类型

根据数值取值范围的不同MySQL 中的整数类型可分为5种,分别是TINYINT、SMALUNT、MEDIUMINT、INT和 BIGINT。最常用的为INT类型的,

 2.浮点数类型和定点数类型

在MySQL数据库中使用浮点数和定点数来存储小数。浮点数的类型有两种:单精度浮点数类型(FLOAT)和双精度浮点数类型(DOUBLE)。而定点数类型只有一种即DECIMAL类型。下图列举了 MySQL中浮点数和定点数类型所对应的字节大小及其取值范围:

 3.字符串类型

在MySQL中常用CHAR 和 VARCHAR 表示字符串。两者不同的是:VARCHAR存储可变长度的字符串。
当数据为CHAR(M)类型时,不管插入值的长度是现实是多少它所占用的存储空间都是M个字节;而VARCHAR(M)所对应的数据所占用的字节数为现实长度加1


4.字符串类型

文本类型用于表示大文本数据,比方,文章内容、评论、详情等,它的类型分为如下4种:

5.日期与时间类型

MySQL提供的表示日期和时间的数据类型分别是 :YEAR、DATE、TIME、DATETIME 和 TIMESTAMP。下图列举了日期和时间数据类型所对应的字节数、取值范围、日期格式以及零值:

 5.1 YEAR类型
YEAR类型用于表示年份,在MySQL中,可以使用以下三种格式指定YEAR类型 的值。
1、使用4位字符串或数字表示,范围为’1901’—'2155’或1901—2155。比方,输人 ‘2019’或2019插人到数据库中的值均为2019。
2、使用两位字符串表示,范围为’00’—‘99’。此中,‘00’—'69’范围的值会被转换为 2000—2069范围的YEAR值,‘70’—'99’范围的值会被转换为1970—1999范围的YEAR 值。比方,输人’19’插人到数据库中的值为2019。
3、使用两位数字表示,范围为1—99。此中,1—69范围的值会被转换为2001— 2069范围的YEAR值,70—99范围的值会被转换为1970—1999范围的YEAR值。例 如,输人19插入到数据库中的值为2019。
注意:当使用YEAR类型时,肯定要区分’0’和0。由于字符串格式的’0’表示的YEAR值是2000而数字格式的0表示的YEAR值是0000。
5.2 TIME类型
TIME类型用于表示时间值,它的显示情势一样寻常为HH:MM:SS,此中,HH表示小时, MM表示分,SS表示秒。在MySQL中,可以使用以下3种格式指定TIME类型的值。
1、以’D HH:MM:SS’字符串格式表示。此中,D表示日可取0—34之间的值, 插人数据时,小时的值等于(DX24+HH)。比方,输入’2 11:30:50’插人数据库中的日期为59:30:50。
2、以’HHMMSS’字符串格式或者HHMMSS数字格式表示。 比方,输人’115454’或115454,插入数据库中的日期为11:54:54
3、使用CURRENT_TIME或NOW()输人当前体系时间。
5.3 DATETIME类型
DATETIME类型用于表示日期和时间,它的显示情势为’YYYY-MM-DD HH: MM:SS’,此中,YYYY表示年,MM表示月,DD表示日,HH表示小时,MM表示分,SS 表示秒。在MySQL中,可以使用以下4种格式指定DATETIME类型的值。
以’YYYY-MM-DD HH:MM:SS’或者’YYYYMMDDHHMMSS’字符串格式表示的日期和时间,取值范围为’1000-01-01 00:00:00’—‘9999-12-3 23:59:59’。比方,输人’2019-01-22 09:01:23’或 ‘20140122_0_90123’插人数据库中的 DATETIME 值都为 2019-01-22 09:01:23。
1、以’YY-MM-DD HH:MM:SS’或者’YYMMDDHHMMSS’字符串格式表示的日期和时间,此中YY表示年,取值范围为’00’—‘99’。与DATE类型中的YY雷同,‘00’— '69’范围的值会被转换为2000—2069范围的值,‘70’—'99’范围的值会被转换为1970—1999范围的值。
2、以YYYYMMDDHHMMSS或者YYMMDDHHMMSS数字格式表示的日期 和时间。比方,插入20190122090123或者190122090123,插人数据库中的DATETIME值都 为 2019-01-22 09:01:23。
3、使用NOW来输人当前体系的日期和时间。
5.4 TIMESTAMP类型
TIMESTAMP类型用于表示日期和时间,它的显示情势与DATETIME雷同但取值范围比DATETIME小。在此,介绍几种TIMESTAMP类型与DATATIME类型不同的情势:
1、使用CURRENT_TIMESTAMP输人体系当前日期和时间。
2、输人NULL时体系会输人体系当前日期和时间。
3、无任何输人时体系会输入体系当前日期和时间。
6.二进制类型

在MySQL中常用BLOB存储二进制类型的数据,比方:图片、PDF文档等。BLOB类型分为如下四种:

 3.数据库的字段属性

   UnSigned
  

  • 无符号的
  • 声明了该列不能为负数
   ZEROFILL
  

  • 0填充的
  • 不足位数的用0来填充 , 如int(3),5则为005
   Auto_InCrement
  

  • 通常理解为自增,自动在上一条记录的底子上默认+1
  • 通常用来计划唯一的主键,必须是整数类型
  • 可界说起始值和步长
   NULL 和 NOT NULL
  

  • 默认为NULL , 即没有插入该列的数值
  • 如果设置为NOT NULL , 则该列必须有值
   DEFAULT
  

  • 默认的
  • 用于设置默认值
  • 比方,性别字段,默认为"男" , 否则为 “女” ; 若无指定该列的值 , 则默认值为"男"的值
拓展:每一个表,都必须存在以下五个字段:
 


 4.操作数据表

1.创建数据库表

  1. CREATE TABLE IF NOT EXISTS `student`(
  2.         `id` INT(4)        NOT NULL AUTO_INCREMENT COMMENT '学号',
  3.         `name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
  4.         `pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码',
  5.         `sex` VARCHAR(2) NOT NULL DEFAULT '女' COMMENT '性别',
  6.         `birthday` DATETIME DEFAULT NULL COMMENT '出生日期',
  7.         `address` VARCHAR(100) DEFAULT NULL COMMENT '家庭住址',
  8.         `email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
  9.         PRIMARY KEY (`id`)
  10. )ENGINE=INNODB DEFAULT CHARSET=utf8
复制代码
注意 


  • 表名和字段尽量使用``括起来
  • AUTO_INCREMENT 代表自增
  • 所有的语句后面加逗号,末了一个不加


  • 字符串使用单引号括起来
  • 主键的声明一样寻常放在末了,便于查察
  • 不设置字符集编码的话,会使用MySQL默认的字符集编码Latin1,不支持中文,可以在my.ini里修改
格式 
  1. CREATE TABLE IF NOT EXISTS `student`(
  2.         '字段名' 列类型 [属性] [索引] [注释],
  3.     '字段名' 列类型 [属性] [索引] [注释],
  4.     ......
  5.     '字段名' 列类型 [属性] [索引] [注释]
  6. )[表的类型][字符集设置][注释]
复制代码
常用命令:
  1. SHOW CREATE DATABASE 数据库名;-- 查看创建数据库的语句
  2. SHOW CREATE TABLE 表名;-- 查看表的定义语句
  3. DESC 表名;-- 显示表的具体结构
复制代码
 2.修改数据库

修改表名 : ALTER TABLE 旧表名 RENAME AS 新表名
添加字段 : ALTER TABLE 表名 ADD字段名 列属性[属性]
修改字段 :


  • ALTER TABLE 表名 MODIFY 字段名 列类型[属性]
  • ALTER TABLE 表名 CHANGE 旧字段名 新字段名 列属性[属性]
删除字段 : ALTER TABLE 表名 DROP 字段名
  1. -- 修改表名
  2. -- ALTER TABLE 旧表名 RENAME AS 新表名
  3. ALTER TABLE teacher RENAME AS teachers;
  4. -- 增加表的字段
  5. -- ALTER TABLE 表名 ADD 字段名 列属性
  6. ALTER TABLE teachers ADD age INT(11);
  7. -- 修改表的字段(重命名,修改约束)
  8. -- ALTER TABLE 表名 MODIFY 字段名 [列属性];
  9. ALTER TABLE teachers MODIFY age VARCHAR(11);-- 修改约束
  10. -- ALTER TABLE 表名 CHANGE 旧名字 新名字 [列属性];
  11. ALTER TABLE teachers CHANGE age age1 INT(1);-- 字段重命名
  12. -- 删除表的字段
  13. -- ALTER TABLE 表名 DROP 字段名
  14. ALTER TABLE teachers DROP age1;
复制代码
语法:DROP TABLE [IF EXISTS] 表名


  • IF EXISTS为可选 , 判定是否存在该数据表
  • 如删除不存在的数据表会抛堕落误
  1. - 删除表(如果存在再删除)
  2. DROP TABLE IF EXISTS teachers;
复制代码
所有的创建和删除尽量加上判定,以免报错
 DDL:操作数据库、表(数据界说语言)

  1. 1. 操作数据库:CRUD
  2.         1. C(Create):创建
  3.                 * 创建数据库:
  4.                         * create database 数据库名称;
  5.                 * 创建数据库,判断不存在,再创建:
  6.                         * create database if not exists 数据库名称;
  7.                 * 创建数据库,并指定字符集
  8.                         * create database 数据库名称 character set 字符集名;
  9.                 * 练习: 创建db4数据库,判断是否存在,并制定字符集为gbk
  10.                         * create database if not exists db4 character set gbk;
  11.         2. R(Retrieve):查询
  12.                 * 查询所有数据库的名称:
  13.                         * show databases;
  14.                 * 查询某个数据库的字符集:查询某个数据库的创建语句
  15.                         * show create database 数据库名称;
  16.         3. U(Update):修改
  17.                 * 修改数据库的字符集
  18.                         * alter database 数据库名称 character set 字符集名称;
  19.         4. D(Delete):删除
  20.                 * 删除数据库
  21.                         * drop database 数据库名称;
  22.                 * 判断数据库存在,存在再删除
  23.                         * drop database if exists 数据库名称;
  24.         5. 使用数据库
  25.                 * 查询当前正在使用的数据库名称
  26.                         * select database();
  27.                 * 使用数据库
  28.                         * use 数据库名称;
  29. 2. 操作表
  30.         1. C(Create):创建
  31.                 1. 语法:
  32.                         create table 表名(
  33.                                 列名1 数据类型1,
  34.                                 列名2 数据类型2,
  35.                                 ....
  36.                                 列名n 数据类型n
  37.                         );
  38.                         * 注意:最后一列,不需要加逗号(,)
  39.                         * 数据库类型:
  40.                                 1. int:整数类型
  41.                                         * age int,
  42.                                 2. double:小数类型
  43.                                         * score double(5,2)
  44.                                 3. date:日期,只包含年月日,yyyy-MM-dd
  45.                                 4. datetime:日期,包含年月日时分秒         yyyy-MM-dd HH:mm:ss
  46.                                 5. timestamp:时间错类型        包含年月日时分秒         yyyy-MM-dd HH:mm:ss       
  47.                                         * 如果将来不给这个字段赋值,或赋值为null,则默认使用当前的系统时间,来自动赋值
  48.                                 6. varchar:字符串
  49.                                         * name varchar(20):姓名最大20个字符
  50.                                         * zhangsan 8个字符  张三 2个字符
  51.                 * 创建表
  52.                         create table student(
  53.                                 id int,
  54.                                 name varchar(32),
  55.                                 age int ,
  56.                                 score double(4,1),
  57.                                 birthday date,
  58.                                 insert_time timestamp
  59.                         );
  60.                 * 复制表:
  61.                         * create table 表名 like 被复制的表名;                 
  62.         2. R(Retrieve):查询
  63.                 * 查询某个数据库中所有的表名称
  64.                         * show tables;
  65.                 * 查询表结构
  66.                         * desc 表名;
  67.         3. U(Update):修改
  68.                 1. 修改表名
  69.                         alter table 表名 rename to 新的表名;
  70.                 2. 修改表的字符集
  71.                         alter table 表名 character set 字符集名称;
  72.                 3. 添加一列
  73.                         alter table 表名 add 列名 数据类型;
  74.                 4. 修改列名称 类型
  75.                         alter table 表名 change 列名 新列别 新数据类型;
  76.                         alter table 表名 modify 列名 新数据类型;
  77.                 5. 删除列
  78.                         alter table 表名 drop 列名;
  79.         4. D(Delete):删除
  80.                 * drop table 表名;
  81.                 * drop table  if exists 表名 ;
复制代码
DML:增删改表中数据(数据操纵语言)

  1. 1. 添加数据:
  2.         * 语法:
  3.                 * insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n);
  4.         * 注意:
  5.                 1. 列名和值要一一对应。
  6.                 2. 如果表名后,不定义列名,则默认给所有列添加值
  7.                         insert into 表名 values(值1,值2,...值n);
  8.                 3. 除了数字类型,其他类型需要使用引号(单双都可以)引起来
  9. 2. 删除数据:
  10.         * 语法:
  11.                 * delete from 表名 [where 条件]
  12.         * 注意:
  13.                 1. 如果不加条件,则删除表中所有记录。
  14.                 2. 如果要删除所有记录
  15.                         1. delete from 表名; -- 不推荐使用。有多少条记录就会执行多少次删除操作
  16.                         2. TRUNCATE TABLE 表名; -- 推荐使用,效率更高 先删除表,然后再创建一张一样的表。
  17. 3. 修改数据:
  18.         * 语法:
  19.                 * update 表名 set 列名1 = 值1, 列名2 = 值2,... [where 条件];
  20.         * 注意:
  21.                 1. 如果不加任何条件,则会将表中所有记录全部修改。
复制代码
DQL:查询表中的记录(数据查询语言)

  1. * select * from 表名;
  2. 1. 语法:
  3.         select
  4.                 字段列表
  5.         from
  6.                 表名列表
  7.         where
  8.                 条件列表
  9.         group by
  10.                 分组字段
  11.         having
  12.                 分组之后的条件
  13.         order by
  14.                 排序
  15.         limit
  16.                 分页限定
  17. 2. 基础查询
  18.         1. 多个字段的查询
  19.                 select 字段名1,字段名2... from 表名;
  20.                 * 注意:
  21.                         * 如果查询所有字段,则可以使用*来替代字段列表。
  22.         2. 去除重复:
  23.                 * distinct
  24.         3. 计算列
  25.                 * 一般可以使用四则运算计算一些列的值。(一般只会进行数值型的计算)
  26.                 * ifnull(表达式1,表达式2):null参与的运算,计算结果都为null
  27.                         * 表达式1:哪个字段需要判断是否为null
  28.                         * 如果该字段为null后的替换值。
  29.         4. 起别名:
  30.                 * as:as也可以省略
  31. 3. 条件查询
  32.         1. where子句后跟条件
  33.         2. 运算符
  34.                 * > 、< 、<= 、>= 、= 、<>
  35.                 * BETWEEN...AND  
  36.                 * IN( 集合)
  37.                 * LIKE:模糊查询
  38.                         * 占位符:
  39.                                 * _:单个任意字符
  40.                                 * %:多个任意字符
  41.                 * IS NULL  
  42.                 * and  或 &&
  43.                 * or  或 ||
  44.                 * not  或 !
  45.                
  46.                         -- 查询年龄大于20岁
  47.                         SELECT * FROM student WHERE age > 20;
  48.                        
  49.                         SELECT * FROM student WHERE age >= 20;
  50.                        
  51.                         -- 查询年龄等于20岁
  52.                         SELECT * FROM student WHERE age = 20;
  53.                        
  54.                         -- 查询年龄不等于20岁
  55.                         SELECT * FROM student WHERE age != 20;
  56.                         SELECT * FROM student WHERE age <> 20;
  57.                        
  58.                         -- 查询年龄大于等于20 小于等于30
  59.                        
  60.                         SELECT * FROM student WHERE age >= 20 &&  age <=30;
  61.                         SELECT * FROM student WHERE age >= 20 AND  age <=30;
  62.                         SELECT * FROM student WHERE age BETWEEN 20 AND 30;
  63.                        
  64.                         -- 查询年龄22岁,18岁,25岁的信息
  65.                         SELECT * FROM student WHERE age = 22 OR age = 18 OR age = 25
  66.                         SELECT * FROM student WHERE age IN (22,18,25);
  67.                        
  68.                         -- 查询英语成绩为null
  69.                         SELECT * FROM student WHERE english = NULL; -- 不对的。null值不能使用 = (!=) 判断
  70.                        
  71.                         SELECT * FROM student WHERE english IS NULL;
  72.                        
  73.                         -- 查询英语成绩不为null
  74.                         SELECT * FROM student WHERE english  IS NOT NULL;
  75.                         -- 查询姓马的有哪些? like
  76.                         SELECT * FROM student WHERE NAME LIKE '马%';
  77.                         -- 查询姓名第二个字是化的人
  78.                        
  79.                         SELECT * FROM student WHERE NAME LIKE "_化%";
  80.                        
  81.                         -- 查询姓名是3个字的人
  82.                         SELECT * FROM student WHERE NAME LIKE '___';
复制代码





免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

水军大提督

金牌会员
这个人很懒什么都没写!

标签云

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