水军大提督 发表于 2024-8-29 05:38:05

MYSQL底子(DDL,DML,DQL)

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就是数据库管理体系
https://i-blog.csdnimg.cn/blog_migrate/2d65cfb6aafc8aa48d6c3b0e0dcac2fc.png
4.通用语法

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

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

1.底子操作

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

1.整数类型

根据数值取值范围的不同MySQL 中的整数类型可分为5种,分别是TINYINT、SMALUNT、MEDIUMINT、INT和 BIGINT。最常用的为INT类型的,
https://i-blog.csdnimg.cn/blog_migrate/3869fcca267f7eef4e1de88fde1c3a9d.png
 2.浮点数类型和定点数类型

在MySQL数据库中使用浮点数和定点数来存储小数。浮点数的类型有两种:单精度浮点数类型(FLOAT)和双精度浮点数类型(DOUBLE)。而定点数类型只有一种即DECIMAL类型。下图列举了 MySQL中浮点数和定点数类型所对应的字节大小及其取值范围:
https://i-blog.csdnimg.cn/blog_migrate/f2ca36f6258eb2c87fed585f940c1a1a.png
 3.字符串类型

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

4.字符串类型

文本类型用于表示大文本数据,比方,文章内容、评论、详情等,它的类型分为如下4种:
https://i-blog.csdnimg.cn/blog_migrate/7ef4dfafd225e350012802554dd1dbb9.png
5.日期与时间类型

MySQL提供的表示日期和时间的数据类型分别是 :YEAR、DATE、TIME、DATETIME 和 TIMESTAMP。下图列举了日期和时间数据类型所对应的字节数、取值范围、日期格式以及零值:
https://i-blog.csdnimg.cn/blog_migrate/9938b76c50bc6337e3de44b72bc32d07.png
 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类型分为如下四种:
https://i-blog.csdnimg.cn/blog_migrate/64b0ca42628ac62fa55defeb4c941ca9.png
 3.数据库的字段属性

   UnSigned


[*]无符号的
[*]声明了该列不能为负数
   ZEROFILL


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


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


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


[*]默认的
[*]用于设置默认值
[*]比方,性别字段,默认为"男" , 否则为 “女” ; 若无指定该列的值 , 则默认值为"男"的值
拓展:每一个表,都必须存在以下五个字段:
 https://i-blog.csdnimg.cn/blog_migrate/9f00763380f60deec53bb5b19b84220f.png

 4.操作数据表

1.创建数据库表

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


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


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

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


[*]ALTER TABLE 表名 MODIFY 字段名 列类型[属性]
[*]ALTER TABLE 表名 CHANGE 旧字段名 新字段名 列属性[属性]
删除字段 : ALTER TABLE 表名 DROP 字段名
-- 修改表名
-- ALTER TABLE 旧表名 RENAME AS 新表名
ALTER TABLE teacher RENAME AS teachers;

-- 增加表的字段
-- ALTER TABLE 表名 ADD 字段名 列属性
ALTER TABLE teachers ADD age INT(11);

-- 修改表的字段(重命名,修改约束)
-- ALTER TABLE 表名 MODIFY 字段名 [列属性];
ALTER TABLE teachers MODIFY age VARCHAR(11);-- 修改约束
-- ALTER TABLE 表名 CHANGE 旧名字 新名字 [列属性];
ALTER TABLE teachers CHANGE age age1 INT(1);-- 字段重命名

-- 删除表的字段
-- ALTER TABLE 表名 DROP 字段名
ALTER TABLE teachers DROP age1;
语法:DROP TABLE 表名


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

1. 操作数据库:CRUD
        1. C(Create):创建
                * 创建数据库:
                        * create database 数据库名称;
                * 创建数据库,判断不存在,再创建:
                        * create database if not exists 数据库名称;
                * 创建数据库,并指定字符集
                        * create database 数据库名称 character set 字符集名;

                * 练习: 创建db4数据库,判断是否存在,并制定字符集为gbk
                        * create database if not exists db4 character set gbk;
        2. R(Retrieve):查询
                * 查询所有数据库的名称:
                        * show databases;
                * 查询某个数据库的字符集:查询某个数据库的创建语句
                        * show create database 数据库名称;
        3. U(Update):修改
                * 修改数据库的字符集
                        * alter database 数据库名称 character set 字符集名称;
        4. D(Delete):删除
                * 删除数据库
                        * drop database 数据库名称;
                * 判断数据库存在,存在再删除
                        * drop database if exists 数据库名称;
        5. 使用数据库
                * 查询当前正在使用的数据库名称
                        * select database();
                * 使用数据库
                        * use 数据库名称;


2. 操作表
        1. C(Create):创建
                1. 语法:
                        create table 表名(
                                列名1 数据类型1,
                                列名2 数据类型2,
                                ....
                                列名n 数据类型n
                        );
                        * 注意:最后一列,不需要加逗号(,)
                        * 数据库类型:
                                1. int:整数类型
                                        * age int,
                                2. double:小数类型
                                        * score double(5,2)
                                3. date:日期,只包含年月日,yyyy-MM-dd
                                4. datetime:日期,包含年月日时分秒       yyyy-MM-dd HH:mm:ss
                                5. timestamp:时间错类型        包含年月日时分秒       yyyy-MM-dd HH:mm:ss       
                                        * 如果将来不给这个字段赋值,或赋值为null,则默认使用当前的系统时间,来自动赋值

                                6. varchar:字符串
                                        * name varchar(20):姓名最大20个字符
                                        * zhangsan 8个字符张三 2个字符


                * 创建表
                        create table student(
                                id int,
                                name varchar(32),
                                age int ,
                                score double(4,1),
                                birthday date,
                                insert_time timestamp
                        );
                * 复制表:
                        * create table 表名 like 被复制的表名;                 
        2. R(Retrieve):查询
                * 查询某个数据库中所有的表名称
                        * show tables;
                * 查询表结构
                        * desc 表名;
        3. U(Update):修改
                1. 修改表名
                        alter table 表名 rename to 新的表名;
                2. 修改表的字符集
                        alter table 表名 character set 字符集名称;
                3. 添加一列
                        alter table 表名 add 列名 数据类型;
                4. 修改列名称 类型
                        alter table 表名 change 列名 新列别 新数据类型;
                        alter table 表名 modify 列名 新数据类型;
                5. 删除列
                        alter table 表名 drop 列名;
        4. D(Delete):删除
                * drop table 表名;
                * drop tableif exists 表名 ;
DML:增删改表中数据(数据操纵语言)

1. 添加数据:
        * 语法:
                * insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n);
        * 注意:
                1. 列名和值要一一对应。
                2. 如果表名后,不定义列名,则默认给所有列添加值
                        insert into 表名 values(值1,值2,...值n);
                3. 除了数字类型,其他类型需要使用引号(单双都可以)引起来
2. 删除数据:
        * 语法:
                * delete from 表名
        * 注意:
                1. 如果不加条件,则删除表中所有记录。
                2. 如果要删除所有记录
                        1. delete from 表名; -- 不推荐使用。有多少条记录就会执行多少次删除操作
                        2. TRUNCATE TABLE 表名; -- 推荐使用,效率更高 先删除表,然后再创建一张一样的表。
3. 修改数据:
        * 语法:
                * update 表名 set 列名1 = 值1, 列名2 = 值2,... ;

        * 注意:
                1. 如果不加任何条件,则会将表中所有记录全部修改。
DQL:查询表中的记录(数据查询语言)

* select * from 表名;

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


2. 基础查询
        1. 多个字段的查询
                select 字段名1,字段名2... from 表名;
                * 注意:
                        * 如果查询所有字段,则可以使用*来替代字段列表。
        2. 去除重复:
                * distinct
        3. 计算列
                * 一般可以使用四则运算计算一些列的值。(一般只会进行数值型的计算)
                * ifnull(表达式1,表达式2):null参与的运算,计算结果都为null
                        * 表达式1:哪个字段需要判断是否为null
                        * 如果该字段为null后的替换值。
        4. 起别名:
                * as:as也可以省略


3. 条件查询
        1. where子句后跟条件
        2. 运算符
                * > 、< 、<= 、>= 、= 、<>
                * BETWEEN...AND
                * IN( 集合)
                * LIKE:模糊查询
                        * 占位符:
                                * _:单个任意字符
                                * %:多个任意字符
                * IS NULL
                * and或 &&
                * or或 ||
                * not或 !
               
                        -- 查询年龄大于20岁

                        SELECT * FROM student WHERE age > 20;
                       
                        SELECT * FROM student WHERE age >= 20;
                       
                        -- 查询年龄等于20岁
                        SELECT * FROM student WHERE age = 20;
                       
                        -- 查询年龄不等于20岁
                        SELECT * FROM student WHERE age != 20;
                        SELECT * FROM student WHERE age <> 20;
                       
                        -- 查询年龄大于等于20 小于等于30
                       
                        SELECT * FROM student WHERE age >= 20 &&age <=30;
                        SELECT * FROM student WHERE age >= 20 ANDage <=30;
                        SELECT * FROM student WHERE age BETWEEN 20 AND 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 = NULL; -- 不对的。null值不能使用 = (!=) 判断
                       
                        SELECT * FROM student WHERE english IS NULL;
                       
                        -- 查询英语成绩不为null
                        SELECT * FROM student WHERE englishIS NOT NULL;



                        -- 查询姓马的有哪些? like
                        SELECT * FROM student WHERE NAME LIKE '马%';
                        -- 查询姓名第二个字是化的人
                       
                        SELECT * FROM student WHERE NAME LIKE "_化%";
                       
                        -- 查询姓名是3个字的人
                        SELECT * FROM student WHERE NAME LIKE '___';





免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: MYSQL底子(DDL,DML,DQL)