下载mysql我就不写文章了,怎么卸载倒是有一篇(在我的博客中)
下载完成mysql之后我们可以通过管理员的身份来运行cmd命令窗口,我们可以通过以下两条命令来启动 mysql 或者停止 mysql 服务
# net stop mysql80 它的作用是停止 mysql 服务
# net start mysql80 它的作用是开启 mysql 服务
现在我们只是启动了 mysql ,他现在还没有和我们的客户端进行一个连接,我们现在需要让 mysql 连接到我们的客户端,有三种连接方式,新手推荐都练习一下,有益于理解mysql 与客户端之间的一些联系
MySQL 8.0 Command Line Client
这个软件来进行连接配置地址为:
然后我们可以执行该命令来让客户端连接 mysql 服务:mysql [-h 127.0.1.1] [-p 3306] -u root -p
3. 我们还可以使用可视化管理工具进行连接,这个比较简单,就不进行截图演示了。
首先客户端会向 mysql 服务器发送 sql 语句,表面上是让 mysql 去执行语句做出操作,其实mysql内部是很奇妙的,首先 mysql 接受到客户端传来的 sql 语句会直接给到内部的 DBMS 数据库管理系统,它是会去操作以及维护数据库的,它可操作以及维护多个数据库 ,每个数据库可包含多个表,每个表可包含多个字段。
mysql 数据库是一种关系型数据库,所谓关系型数据库也就是通过表结构来存储数据的数据库,反之则为非关系型数据库,例如 mongodb 就是一种非关系型数据库(NoSQL)
官方的解释是:关系型数据库是建立在关系模型基础上,有多张互相连接的二维表组成的数据库。
关系型数据库格式统一,方便维护;同时 SQL语言标准统一,使用方便。这便是它的优点。
;
-- 注释内容
,# 注释内容
/* 注释内容 */
SHOW DATABASES;
SELECT DATABASE();
CREATE DATABASE [ IF NOT EXISTS ] 数据库名称 [DEFAULT CHARSET 字符集] [COLLATE 排序规则];
DROP DATABASE [ IF EXISTS] 数据库名称;
USE 数据库名称;
SHOW TABLES;
DESC 表名;
SHOW CREATE TABLE 表名;
CREATE TABLE 表名称(
字段1 数据类型[ COMMENT 字段1注释],
字段1 数据类型[ COMMENT 字段1注释],
字段1 数据类型[ COMMENT 字段1注释],
字段1 数据类型[ COMMENT 字段1注释]
) [COMMENT 表注释];
最后一个字段后面不加逗号
有符号标识:SIGNED;无符号标识:UNSIGNED
当我们对分数或者年龄等做记录的时候就不需要用到有符号的负数了,我们可以这样写: age TINYINT UNSIGNED
对于浮点数我们可以这样限定它的范围:score double(限制位数,小数位数)
字符类型有很多,我就列出一下,不会全部介绍,因为常用到的也就是 char、以及 varchar
定长意思就是已经开辟了这么大的空间,无论在实际操作中是存多少字符,它也是这么长的,有一点浪费空间的意思
而变长则是需要判断实际字符长度在分配空间
各有各的长处,变长性能比较差,但却不浪费空间,char浪费空间却性能胜与 varchar。
LONGTEXT
:超大文本数据mysql> show databases;
+--------------------+
| Database |
+--------------------+
| carbon |
| examination_pro |
| information_schema |
| mysql |
| performance_schema |
| sys |
| testdb |
+--------------------+
7 rows in set (0.00 sec)
mysql> use testdb;
Database changed
mysql> select database();
+------------+
| database() |
+------------+
| testdb |
+------------+
1 row in set (0.00 sec)
mysql> show tables;
+------------------+
| Tables_in_testdb |
+------------------+
| user |
+------------------+
1 row in set (0.02 sec)
mysql> desc user;
+-----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| name | varchar(10) | YES | | NULL | |
| workno | varchar(10) | YES | | NULL | |
| id | int | YES | | NULL | |
| gender | char(1) | YES | | NULL | |
| idcard | char(18) | YES | | NULL | |
| entrydate | date | YES | | NULL | |
+-----------+-------------+------+-----+---------+-------+
6 rows in set (0.01 sec)
mysql> show create table user;
+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table
|
+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| user | CREATE TABLE `user` (
`name` varchar(10) DEFAULT NULL COMMENT '用户名称',
`workno` varchar(10) DEFAULT NULL COMMENT '工号',
`id` int DEFAULT NULL COMMENT '编号',
`gender` char(1) DEFAULT NULL COMMENT '性别',
`idcard` char(18) DEFAULT NULL COMMENT '身份证号',
`entrydate` date DEFAULT NULL COMMENT '入职时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='员工表' |
+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)
mysql>
添加字段
ALTER TABLE 表名 ADD 字段名 类型(长度)[COMMENT 注释] [约束];
修改字段
ALTER TABLE 表名 MODIFY 字段名 新的数据类型(长度);
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT 注释] [约束];
ALTER TABLE 表名 DROP 字段名;
ALTER TABLE 表名 RENAME TO 新表名;
DROP TABLE [ IF EXISTS ] 表名;
TRUNCATE TABLE 表名;
给指定字段添加数据
INSERT INTO 表名 (字段名1,字段名2,...) VALUES(值1,值2,...);
给全部字段添加数据
INSERT INTO 表名 VALUES(值1,值2,...);
批量添加数据
INSERT INTO 表名 (字段名1,字段名2,...) VALUES(值1,值2,...),(值1,值2,...),(值1,值2,...);
INSERT INTO 表名 VALUES(值1,值2,...),(值1,值2,...),(值1,值2,...);
DELETE FROM 表名 [WHERE 条件] ;
UPDATE 表名 SET 字段名1 = '修改之后的值1',字段名2 = '修改之后的值2,... [WHERE 条件];'
查询
SELECT 字段名1,字段名2,字段名3,... FROM 表名;
SELECT * FROM 表名;
别名
SELECT 字段1 [ AS 别名1 ],字段2 [ AS 别名2 ],字段3 [ AS 别名3 ],... FROM 表名;
去除重复记录
SELECT DISTINCT 字段列表 FROM 表名;
SELECT 字段列表 FROM 表名 WHERE 条件列表;
SELECT 聚合函数(字段列表) FROM 表名;
聚合函数:
SELECT 字段列表 FROM 表名 [ WHERE 条件] GROUP BY 分组字段名 [ HAVING 分组后过滤条件 ];
都是过滤条件 where 和 having 的区别在哪里呢?
SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1,字段2 排序方式2;
排序方式包含:
SELECT 字段列表 FROM 表名 LIMIT 起始索引,每页查询条数;
USE mysql;
SELECT * FROM user;
CREATE USER '用户名'@'主机名' IDENTIFIEN BY '密码';
ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码';
DROP USER'用户名'@'主机名';
主机名如果为local host 那么该数据库只能在当前主机访问,也就是当前操作电脑上可以访问;如果主机名命名为 % 那么表示该数据库可以在任意主机上访问
当我们有了多个用户权限,自然要给不同的用户分配不同的权限,而所分配的权限也就是该用户可执行的操作,例如查询、插入、修改、删除(库 / 表),简称CRUD。
如果要给予所有权限,那么可使用 ALL 或者 ALL PRIVILEGES
SHOW GRANTS FOR '用户名'@'主机名';
CRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';
REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';
如果要操作该数据库的所有表的权限,那么我们可以将表名写做:*
来表示通配该数据库所有表
同样的所有数据库也可以表示为 *
CONCAT(STR1,STR2,STR3...)
LOWER(str)
UPPER(str)
LPAD(str,n,pad)
RPAD(str,n,pad)
TRIM(str)
SUBSTRING(str,start,len)
SELECT CONCAT('Hello ',' MySQL') AS '字符串拼接';
SELECT LOWER(CONCAT('Hello',' MySQL')) AS '字符串转小写';
SELECT UPPER(CONCAT('Hello',' MySQL')) AS '字符串转大写';
SELECT LPAD(UPPER(CONCAT('Hello',' MySQL')),18,'_') AS '左填充字符串';
SELECT RPAD(UPPER(CONCAT('Hello',' MySQL')),18,'_') AS '右填充字符串';
SELECT TRIM(CONCAT(' Hello ',' MySQL ')) AS '字符串去除两边空格';
SELECT SUBSTRING(RPAD(UPPER(CONCAT('Hello',' MySQL')),18,'_'),5,3) AS '字符串截取';
# 这里需要注意索引值从1开始
CEIL(x)
FLOOR(x)
MOD(x,y)
RAND()
ROUND(x,y)
SELECT CEIL(200.1) AS '向上取整';
SELECT FLOOR(200.9) AS '向下取整';
SELECT MOD(12,7) AS '求模';
SELECT RAND() AS '随机数';
SELECT ROUND(RAND() * 200,3) AS '四舍五入';
CURDATE()
CURTIME()
NOW()
YEAR(date)
MONTH(date)
DAY(data)
DATE_ADD(date,INTERVAL expr type)
DATEDIFF(date1,date2)
SELECT CURDATE() AS '当前日期';
SELECT CURTIME() AS '当前时间';
SELECT NOW() AS '当前日期和时间';
SELECT YEAR('1999-01-06') AS '指定日期年份';
SELECT MONTH('1999-01-06') AS '指定日期月份';
SELECT DAY('1999-01-06') AS '指定日期';
SELECT DATE_ADD('1989-01-01',INTERVAL 70 MONTH) AS '时间推进';
SELECT DATE_ADD('1989-01-01',INTERVAL -70 DAY) AS '时间推进';
SELECT DATEDIFF('2023-10-2','2001-10-19') AS '间隔天数';
IF(value,x,y)
IFNULL(value1,value2)
CASE WHEN [value1] THEN [res1] ...ELSE[default] END
CASE [value1] WHEN [val] THEN [res1] ...ELSE[default] END
SELECT IF((CEIL(RAND() * 10) + 1 = 8),1,0) AS '判断';
SELECT IFNULL((SELECT workno FROM emp WHERE username = '王小二'),'为空') AS '判断NULL';
SELECT username,(CASE age WHEN 23 THEN '符合23岁的标准' WHEN 24 THEN '勉强接受' ELSE '不符合标准' END) AS '标准' FROM emp;
SELECT CASE WHEN ((SELECT age FROM emp WHERE username = '王小二') = 23) THEN '符合23岁的标准' ELSE '不符合标准' END AS '标准';