服装网站建设规划书,wordpress cdn图片加速,南宁青秀万达网站建设,在家做兼职的网站文章目录概述使用启动/停止mysql服务连接mysql客户端数据模型SQLSQL语句分类DDL数据库操作表操作查询创建数据类型修改删除DML添加数据修改数据删除数据DQL基础查询条件查询聚合函数分组查询排序查询分页查询执行顺序DCL管理用户权限控制概述 数据库#xff08;Database#…
文章目录概述使用启动/停止mysql服务连接mysql客户端数据模型SQLSQL语句分类DDL数据库操作表操作查询创建数据类型修改删除DML添加数据修改数据删除数据DQL基础查询条件查询聚合函数分组查询排序查询分页查询执行顺序DCL管理用户权限控制概述 数据库Database —— DB 存储数据的仓库数据是有组织的进行存储的 数据库管理系统 Database Management System —— DBMS 操纵和管理数据的大型软件 SQL Structured Query Language 操作关系行数据库的编程语言定义了一套操作关系型数据库的标准
使用
启动/停止mysql服务 在以管理员身份在cmd命令行中启动mysql服务 net start mysql80停止mysql服务 net stop mysql80连接mysql客户端 方式一 : 使用mysql提供的命令行工具 方式二 :使用命令行工具执行命令 mysql [-h 127.0.0.1] [-P 3306] -u root -p参数: -h : Mysql服务所在的主机-P : Mysql服务端口号, 默认3306-u : Mysql数据库用户名-p : Mysql数据库用户名对应的密码 []内为可选参数如果需要连接远程的MySQL需要加上这两个参数来指定远程主机IP、端口如果连接本地的MySQL则无需指定这两个参数。 默认连接数据库的命令 mysql -u root -p 数据模型 关系型数据库 建立在关系模型基础上由多张相互连接的二维表组成的数据库二维表由行和列组成的表 比如有表头、有列、有行还可以通过一列关联另外一个表格中的某一列数据基于二维表存储数据的属于关系型数据库不是基于二维表存储数据的数据库属于非关系型数据库。 Mysql是关系型数据库是基于二维表进行存储的 可以通过mysql客户端连接数据库管理系统DBMS然后通过DBMS操作数据库一个数据库服务器中可以创建多个数据库一个数据库中也可以包含多张表而一张表中又可以包含多行记录。
SQL
Sructured Query Language 结构化查询语言 操作关系型数据库的编程语言定义了一套操作关系型数据库的统一标准 SQL 通用语法 SQL语句可以单行或者多行书写以;分号结尾SQL语句可以使用空格或者缩进来增强语句的可读性Mysql数据库的SQL语句不区分大小写关键字建议使用大写 SQL语句分类
DDL —— Data Definition Language 数据定义语言用来定义数据库对象数据库表字段 DML—— Data Manipulation Language 数据操作语言用于对数据库表中的数据进行增删改 DQL——Data Query Language 数据查询语言用于查询数据库中表的记录 DCL——Data Control Language 数据控制语言用来创建数据库用户、控制数据库的访问权限
DDL
DDL —— Data Definition Language数据定义语言用来定义数据库对象(数据库表字段) 。
数据库操作 查询数据库 show database;查询当前所在的数据库 select database();创建数据库 create database [if not exists] 数据库名 [default charset 字符集] [collate 排序规则];比如: 创建一个名为library的数据库,使用数据库默认的字符集 (注意:若数据库服务器中存在同名的数据库会执行报错) create database library;若不存在则创建名为library的数据库存在则不执行该命令 create database if not exists library; 创建一个library的数据库并指定字符集为utf8mb4 create database library default charset utf8mb4;删除数据库 drop database [if exists] 数据库名;比如: 删除名为library的数据库若存在则删除不存在则不执行 drop database if exists library;切换数据库 use 数据库名;比如要操作一个名为library的数据库下的表时首先要切换到该数据库下才能操作该数据库的表。 use library;表操作
查询创建 查询当前数据库所有表结构 show tables;查看指定表结构可以查看到指定表的字段字段的类型、是否可以为NULL是否存在默认值等信息。 desc 表名;比如 查看host_summary这个表的结构 desc host_summary;查看指定表的建表语句主要是用来查看建表语句的而有部分参数在创建表的时候并未指定也会查询到因为这部分是数据库的默认值如存储引擎、字符集等。 show create table 表名;比如 查看host_summary这个表的建表语句 show create table host_summary;创建表结构 CREATE TABLE 表名(字段1 字段1类型 [ COMMENT 字段1注释 ],字段2 字段2类型 [COMMENT 字段2注释 ],字段3 字段3类型 [COMMENT 字段3注释 ],................................. ,字段n 字段n类型 [COMMENT 字段n注释 ]
) [ COMMENT 表注释 ] ;tips : 除了最后一个字段后面没有,逗号分隔其他字段都要以,逗号分隔。 比如创建一张名为db_user的表, 对应结构如下: idnamegenderage1张三男182李四女173王五女21 则建表语句为: create table db_user(id int comment 编号,name varchar(50) comment 姓名,gender varchar(1) comment 性别,age int comment 年龄
) comment 用户表;数据类型 Mysql中的数据类型有许多,主要分为三类数值类型、字符串类型和日期时间类型 数值类型 类型大小字节byte有符号范围signed无符号范围unsigned描述TINYINT1 byte(-128127)(0255)整数值SMALLINT2 bytes(-3276832767)(065535)整数数值MEDIUMINT3 bytes(-83886088388607)(016777215)整数数值INT/INTEGER4 bytes(-21474836482147483647)(04294967295)整数数值BIGINT8 bytes(−263263−1)(-2^{63}2^{63}-1)(−263263−1)(0264−1)(02^{64}-1)(0264−1)整数数值FLOAT4 bytes(-3.402823466 E383.402823466351 E38)0 和 (1.175494351 E-383.402823466 E38)单精度浮点数值DOUBLE8 bytes(-1.7976931348623157E3081.7976931348623157E308)0 和(2.2250738585072014E-3081.7976931348623157E308)双精度浮点数值DECIMAL-----依赖于M(精度)和D(标度)的值依赖于M(精度)和D(标度)的值小数值(精确定点数) 字符串类型 类型大小描述CHAR0-255 bytes定长字符串(需要指定长度)VARCHAR0-65535 bytes变长字符串(需要指定长度)TINYBLOB0-255 bytes不超过255个字符的二进制数据TINYTEXT0-255 bytes短文本字符串BLOB0-65535 bytes二进制形式的长文本数据TEXT0-65535 bytes长文本数据MEDIUMBLOB0-16777215 bytes二进制形式的中等长度文本数据MEDIUMTEXT0-16777215 bytes中等长度文本数据LONGBLOB0-4294967295 bytes二进制形式的极大文本数据LONGTEXT0-4294967295 bytes极大文本数据 char 与 varchar 都可以描述字符串char是定长字符串指定长度多长就占用多少个字符和字段值的长度无关 。而varchar是变长字符串指定的长度为最大占用长度 。相对来说char的性能会更高些。 时间类型 类型大小范围格式描述DATE31000-01-01 至 9999-12-31YYYY-MM-DD日期值TIME3-838:59:59 至 838:59:59HH:MM:SS时间值或持续时间YEAR11901 至 2155YYYY年份值DATETIME81000-01-01 00:00:00 至9999-12-31 23:59:59YYYY-MM-DD HH:MM:SS混合日期和时间值TIMESTAMP41970-01-01 00:00:01 至2038-01-19 03:14:07YYYY-MM-DD HH:MM:SS混合日期和时间值时间戳 举个栗子: 设计一张学生信息表要求如下 编号 整数型学号 字符串类型长度不超过12位姓名 字符串类型长度不超过10位性别 男/女存储一个汉字年龄 正整数型身份证号 身份证号均为18位身份证中有X这样的字符入学时间 取值年月日 建表语句 create table stu(id int comment 编号,stu_num varchar(12) comment 学号,name varchar(10) comment 姓名,gender char(1) comment 性别,age tinyint unsigned comment 年龄,idcard char(18) comment 身份证号,entrydate date comment 入学时间
) comment 学生表;修改 添加字段 ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT 注释] [约束];比如: 为stu表新增一个字段昵称为 nickname类型为varchar(20) ALTER TABLE stu ADD nickname varchar(20) COMMENT 昵称;修改数据类型 ALTER TABLE 表名 MODIFY 字段名 新数据类型 (长度); 修改字段名和字段类型 ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型 (长度) [ COMMENT 注释 ] [ 约束 ]; 比如 : 将stu表的nickname字段修改为username类型为varchar(30) ALTER TABLE stu CHANGE nickname username varchar(30) COMMENT 昵称; 删除字段 ALTER TABLE 表名 DROP 字段名; 比如 : 将stu表的字段username删除 ALTER TABLE stu DROP username;修改表名 ALTER TABLE 表名 RENAME TO 新表名;比如: 将stu表的表名修改为student ALTER TABLE stu RENAME TO student; 删除 删除表 DROP TABLE [ IF EXISTS ] 表名; 用IF EXISTS来判断表是否存在存在则删除若不判断直接删除不存在的表执行会报错 比如如果db_user表存在则删除db_user表 DROP TABLE IF EXISTS db_user; 删除指定表并重新创建表 相当于清空表里面的数据 TRUNCATE TABLE 表名; 注意: 在删除表的时候表中的全部数据也都会被删除。
DML
DML —— Data Manipulation Language(数据操作语言)用来对数据库中表的数据记录进行增、删、改操作。 添加数据INSERT修改数据UPDATE删除数据DELETE
添加数据 给指定字段添加数据 INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...); 比如: 给stu表所有字段添加数据 insert into stu (id,stu_num,name,gender,age,idcard,entrydate,nickname) values (100,12345,张三,男,18,44323878974875832x,2005-01-03,托尼);查看表中数据 select * from 表名; 给全部字段添加数据 (按表中的字段顺序添加数据) INSERT INTO 表名 VALUES (值1, 值2, ...); 比如: 给stu表所有字段添加数据 insert into stu values (101,12346,李四,女,17,443238789748758398,2006-03-09,Kitty);批量添加数据 (添加多组数据) 指定字段批量添加 INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...), (值1, 值2, ...), (值
1, 值2, ...) ;全部字段批量添加 INSERT INTO 表名 VALUES (值1, 值2, ...), (值1, 值2, ...), (值1, 值2, ...) ; 比如 : 批量插入数据到stu表 insert into stu values(102,12347,王五,女,20,443238789748757598,2003-05-19,marry),(103,12348,马穗,男,17,443238789748758398,2006-03-18,狗蛋);需要注意的是: 插入数据时指定的字段顺序需要与值的顺序是一一对应的。字符串类型和日期类型数据应该包含在引号中。插入的数据大小必须在字段的规定范围内 修改数据
UPDATE 表名 SET 字段名1 值1 , 字段名2 值2 , .... [ WHERE 条件 ] ; 比如 : 修改stu表的id字段为100对应的name修改为 法外狂徒张三 update stu set name 法外狂徒张三 where id 100; 再比如修改两个数据将id为101对应的gender修改为男age修改为20 update stu set gender男,age20 where id101;比如修改某个字段的所有数据将入学日期全部修改为2023-02-13 update stu set entrydate2023-02-13;tips: 修改语句的条件可以有也可以没有如果没有条件则会默认修改整张表的所有数据。 删除数据
DELETE FROM 表名 [ WHERE 条件 ] ; 举栗子: 删除所有学生即删除stu表 delete from stu;删除stu表中年龄大于20岁的学生 delete from stu where age 20;tips: 注意事项: DELETE 语句的条件可以有也可以没有如果没有条件则会删除整张表的所有数据。DELETE 语句不能删除某一个字段的值 (可以使用UPDATE将该字段值置为NULL即 可)。 DQL
DQL——Data Query Language(数据查询语言) 数据查询语言用来查询数据库中表的记录。查询关键字: SELECT 注在一个正常的业务系统中查询操作的频次是要远高于增删改的当我们去访问企业官网、电商网站在这些网站中我们所看到的数据实际都是需要从数据库中查询并展示的。而且在查询的过程中可能还会涉及到条件、排序、分页等操作。 DQL查询语句 SELECT字段列表
FROM表名列表
WHERE条件列表
GROUP BY分组字段列表
HAVING分组后条件列表
ORDER BY排序字段列表
LIMIT分页参数
基础查询 查询多个字段 查询多个指定字段 SELECT 字段1, 字段2, 字段3 ... FROM 表名 ; 查询该表的全部字段 SELECT * FROM 表名 ;举个栗子查询stu表的全部字段 查询stu表的name字段和age字段 select * from stu;select name,age from stu;字段设置别名 SELECT 字段1 [ AS 别名1 ] , 字段2 [ AS 别名2 ] ... FROM 表名; SELECT 字段1 [ 别名1 ] , 字段2 [ 别名2 ] ... FROM 表名; tips 两种写法其中as可以省略不写 去除重复记录 SELECT DISTINCT 字段列表 FROM 表名;举个栗子: 查询stu表中的entrydate字段起别名“入学日期”。 select entrydate as 入学日期 from stu;或者 select entrydate 入学日期 from stu;
请添加图片描述
查询入学日期有哪些 (去重复) select distinct entrydate 入学日期 from stu;注意 : 查询操作不会改变原表的结构或者原数据。 条件查询
SELECT 字段列表 FROM 表名 WHERE 条件列表 ; 常用比较运算符
比较运算符作用大于大于等于小于小于等于等于 或 !不等于BETWEEN…AND…在…范围之间IN(…)在in之后的列表中的值多选一LIKE 占位符模糊匹配(_匹配单个字符, %匹配任意个字符)IS NULL是NULL举个栗子 : 查询stu表中姓名为三个汉字的学生信息 select * from stu where name like ___; 查询stu表中身份证号最后一位是X的学生信息 select * from stu where idcard like %X;其中%为通配符(即任意位字符) 或者直接使用下划线_, 一个代表一位 select * from stu where idcard like _________________X;查询某字段是否有信息 比如 : 查询stu表中没有身份证号的学生信息 select * from stu where idcard is not null; 常用逻辑运算符
逻辑运算符作用AND 或 并且 (多个条件同时成立)OR 或 ||或者 (多个条件任意一个成立)NOT 或 !非 , 不是逻辑运算符可以搭配比较运算符进行使用可以进行多条件判断 比如 表示年龄在15岁到20岁之间的学生信息 (以下三种写法结果都一样) select * from stu where age 15 age 20;select * from stu where age 15 and age 20;select * from stu where age between 15 and 20;聚合函数 将一列数据作为一个整体进行纵向计算 。 常见的聚合函数
函数作用count ()统计数量max()最大值min()最小值avg()平均值sum()求和
SELECT 聚合函数(字段列表) FROM 表名 ; NULL值是不参与所有聚合函数运算的。 举几个栗子: 统计该学校学生的数量 select count(*) from stu; -- 统计的是总记录数
select count(idcard) from stu; -- 统计的是idcard字段不为null的记录数统计学生的平均年龄 select avg(age) from stu; 统计学生的最大年龄 select max(age) from stu;统计学生最小年龄 select min(age) from stu; 统计广东地区学生的年龄之和 select sum(age) from stu where workaddress 广东; 分组查询
SELECT 字段列表 FROM 表名 [ WHERE 条件 ] GROUP BY 分组字段名 [ HAVING 分组
后过滤条件 ];where与having区别? 执行时机不同where是分组之前进行过滤不满足where条件不参与分组而having是分组之后对结果进行过滤。 判断条件不同where不能对聚合函数进行判断而having可以。 分组之后查询的字段一般为聚合函数和分组字段查询其他字段无任何意义。 执行顺序: where 聚合函数 having 。 支持多字段分组, 具体语法为 : group by columnA, columnB 举个栗子 根据性别分组 , 统计男同学和女同学的数量 select gender, count(*) from stu group by gender ; 根据性别分组 , 统计男同学和女同学的平均年龄 select gender, avg(age) from stu group by gender ; 查询年龄小于20的学生 , 并根据性别分组 , 获取学生数量大于等于3的性别 select gender, count(*) as gender_count from stu where age 21 group by gender having gender_count 3;排序查询
SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1 , 字段2 排序方式2 ; 排序方式 ASC : 升序(默认值)DESC: 降序 举几个栗子: 根据年龄对学生进行升序排序 select * from stu order by age asc;
select * from stu order by age; -- 不加排序方式默认升序排序根据入学时间, 对学生进行降序排序 select * from stu order by entrydate desc; 根据年龄对学生进行升序排序 , 年龄相同 , 再按照入学时间进行降序排序 select * from stu order by age asc, entrydate desc; 分页查询
SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数 ; 说明: 起始索引从0开始起始索引 查询页码 - 1* 每页显示记录数。分页查询是数据库的方言不同的数据库有不同的实现MySQL中是LIMIT。如果查询的是第一页数据起始索引可以省略直接简写为 limit 10。 举几个栗子: 查询第1页学生的数据, 每页展示10条记录 select * from stu limit 0,10;或者 select * from stu limit 10;查询第2页学生的数据, 每页展示10条记录: (页码-1)*页展示记录数 select * from stu limit 10,10; 执行顺序 即DQL语句执行的顺序为 : from ... where ... group by ... having... select... order... limit...
DCL
DCL —— Data Control Language(数据控制语言)用来管理数据库用户、控制数据库的访 问权限。
管理用户 查询用户 use mysql;
select * from user;或者直接 select * from mysql.user; 说明: Host代表当前用户访问的主机若为localhost即仅能够在当前主机访问是不可以远程访问的。User代表的是访问该数据库的用户名。 在Mysql中通过Host和User来唯一标识一个用户。 创建用户 CREATE USER 用户名主机名 IDENTIFIED BY 密码;修改用户密码 ALTER USER 用户名主机名 IDENTIFIED WITH mysql_native_password BY 新密码 ; 删除用户 DROP USER 用户名主机名 ; 在MySQL中需要通过用户名主机名的方式来唯一标识一个用户。主机名可以用%通配表示任意主机可以访问数据库可以实现远程连接。 举几个栗子 创建用户名为 zeny, 只能够在当前主机localhost访问, 密码Ab123456; create user zenylocalhost identified by Ab123456; 创建用户名为zeny , 可以在任意主机访问该数据库, 密码123456; create user zeny% identified by Ab123456; 你会发现相同的用户名也可以创建成功 这是因为mysql是通过用户名加主机号来标识一个用户的.。即使是相同用户名或者主机号只要这两者不同时相同就是不同用户 修改用户名为zeny 主机号为localhost 的访问密码为ajd7Hds; alter user zenylocalhost identified with mysql_native_password by ajd7Hds; 登录试试 删除zeny%用户 drop user zeny%; 删除成功 注 : 密码设置过简单会提示创建用户失败 注意只有在root用户的权限下才能管理用户
权限控制 MySQL中定义了很多种权限 常用的权限如下 权限作用ALL, ALL PRIVILEGES所有权限SELECT查询数据权限INSERT插入数据UPDATE修改数据DELETE删除数据ALTER修改表DROP删除数据库/表/视图CREATE创建数据库/表 查询权限 SHOW GRANTS FOR 用户名主机名 ;授予权限 GRANT 权限列表 ON 数据库名.表名 TO 用户名主机名; 撤销权限 REVOKE 权限列表 ON 数据库名.表名 FROM 用户名主机名; 注意 : 多个权限之间使用逗号分隔授权时 数据库名和表名可以使用 * 进行通配代表所有 举几个栗子: 查询 ‘zeny’‘localhost’ 用户的权限 show grants for zenylocalhost; 授予 ‘zeny’‘localhost’ ’ 用户library数据库所有表的所有操作权限 grant all on library.* to zenylocalhost;撤销 zeny‘localhost’ 用户的library数据库的所有权限 revoke all on library.* from zenylocalhost;