当前位置: 首页 > news >正文

mysql入门操作

目录

一,MySQL简述

1,什么是MySQL

2,什么是SQL

3,SQL的分类

二,数据库的数据存储类型

1,数值类型

2,字符串类型

3,时间和日期类型

三,数据库的基本操作

1,DDL(对数据库,表的创建,删除修改等)

(1)数据库的创建,删除

(2)数据库表的创建,删除,修改,增添数据

2,数据库约束

主键约束(primary key):

默认值约束(default):

非空约束(not null):

唯一约束(unique):

外键约束(FOREIGN KEY (外键列名)REFERENCES 主表(参照列)):

检查约束:

3,复制表结构和数据:

四,SQL之DML

插入语句(insert into)

删除语句(delete from)

更新语句(update,replace)

查询语句(select):

简单的sql查询

条件查询(where)

分组统计与筛选(group by  having):

查询结果排序(order by):

分页(limit):

 多表关联查询:

五,SQL中的函数

聚合函数:

 数值型函数:

字符串类型:

日期和时间函数:

流程控制函数:


一,MySQL简述

1,什么是MySQL

  MySQL是一种开源的关系型数据库管理系统(RDBMS),使用结构化查询语言(SQL)进行数据管理,支持多用户、多线程及跨平台操作,具有高可靠性、高性能和易扩展性,广泛应用于Web应用、企业系统等领域,提供事务支持、ACID特性及多种存储引擎,是LAMP/LNMP等开发架构的核心组件之一。

2,什么是SQL

  SQL(Structured Query Language,结构化查询语言)是一种专门用于管理关系型数据库的标准化编程语言,支持数据的定义、查询、操作和权限控制,通过简洁的语法(如SELECTINSERTUPDATEDELETE等命令)实现数据库的创建、增删改查、事务管理及安全控制,是几乎所有关系型数据库(如MySQL、Oracle、SQL Server等)的核心交互接口。

3,SQL的分类

DDL:(Data Definition Language):数据定义语言,定义对数据库对象(库、表、列、索引)的操作。 CREATE、DROP、ALTER、RENAME、 TRUNCATE等

DML:(Data Manipulation Language): 数据操作语言,定义对数据库记录的操作。 INSERT、DELETE、UPDATE、SELECT等

DQL(Data Query Language):数据查询语言SELECT将数据的查询单独说明

DCL:(Data Control Language): 数据控制语言,定义对数据库、表、字段、用户的访问权限和安全级别。 GRANT、REVOKE等

二,数据库的数据存储类型

主要分三大类:数值类型,字符串类型,时间和日期类型

1,数值类型

数据类型描述
TINYINT(size)-128 到 127 常规。 0 到 255 无符号*。在括号中规定最 大位数。
SMALLINT(size)-32768 到 32767 常规。 0 到 65535 无符号*。在括号中 规定最大位数。
MEDIUMINT(size)-8388608 到 8388607 普通。 0 to 16777215 无符号*。在 括号中规定最大位数。
INT(size)-2147483648 到 2147483647 常规。 0 到 4294967295 无 符号*。在括号中规定最大位数。
BIGINT(size)-9223372036854775808 到 9223372036854775807 常规。 0 到18446744073709551615 无符号*。在括号中规定最大位 数。
FLOAT(size,d)带有浮动小数点的小数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数。
DOUBLE(size,d)带有浮动小数点的大数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数。
DECIMAL(size,d)作为字符串存储的 DOUBLE 类型,允许固定的小数点。

2,字符串类型

数据类型描述
CHAR(size)保存固定长度的字符串(可包含字母、数字以及特殊字 符)。在括号中指定字符串的长度。最多 255 个字符。
VARCHAR(size)保存可变长度的字符串(可包含字母、数字以及特殊字 符)。在括号中指定字符串的最大长度。最多 255 个字 符。 注释:如果值的长度大于 255,则被转换为 TEXT 类型。
TINYTEXT存放最大长度为 255 个字符的字符串。
TEXT存放最大长度为 65,535 个字符的字符串。
BLOB用于 BLOBs (Binary Large OBjects)。存放最多 65,535 字节的数据。
MEDIUMTEXT存放最大长度为 16,777,215 个字符的字符串。
MEDIUMBLOB用于 BLOBs (Binary Large OBjects)。存放最多 16,777,215 字节的数据。
LONGTEXT存放最大长度为 4,294,967,295 个字符的字符串。
LONGBLOB用于 BLOBs (Binary Large OBjects)。存放最多 4,294,967,295 字节的数据。
ENUM(x,y,z,etc.)允许你输入可能值的列表。可以在 ENUM 列表中列出最大 65535 个值。如果列表中不存在插入的值,则插入空值。 注释:这些值是按照你输入的顺序存储的。 可以按照此格式输入可能的值: ENUM('X','Y','Z')
SET与 ENUM 类似, SET 最多只能包含 64 个列表项,不过 SET 可存储一个以上的值。

3,时间和日期类型

数据类型描述
DATE()日期。格式: YYYY-MM-DD 注释:支持的范围是从 '1000-01-01' 到 '9999-12-31'
DATETIME()日期和时间的组合。格式: YYYY-MM-DD HH:MM:SS 注释:支持的范围是'1000-01-01 00:00:00' 到 '9999-12- 31 23:59:59'
TIMESTAMP()时间戳。 TIMESTAMP 值使用 Unix 纪元('1970-01-01 00:00:00' UTC) 至今的描述来存储。格式: YYYY-MM-DD HH:MM:SS 注释:支持的范围是从 '1970-01-01 00:00:01' UTC 到 '2038-01-09 03:14:07' UTC
TIME()时间。格式: HH:MM:SS 注释:支持的范围是从 '-838:59:59' 到 '838:59:59'
YEAR()2 位或 4 位格式的年。 注释: 4 位格式所允许的值: 1901 到 2155。 2 位格式所允许 的值: 70 到69,表示从 1970 到 2069

三,数据库的基本操作

1,DDL(对数据库,表的创建,删除修改等)

(1)数据库的创建,删除

创建数据库 :create database 数据库名称;

mysql> create database t_test1;

创建数据库时设置字符编码:create database db_name default charset="utf8mb4";

mysql> create database school DEFAULT CHARACTER SET utf8mb4;

查看创建的数据库信息:show create database 数据库名称

mysql> show create database t_test1;

展示所有数据库:show databases;

使用或切换数据库:use 数据库名称;

mysql> use t_test1;

删除数据库:mysql> drop 数据库名称;

mysql> drop database t_test1;

(2)数据库表的创建,删除,修改,增添数据

创建表:

create table [if not exists] t_name (# 定义表结构字段名称1 类型 [约束条件],字段2  类型 [约束条件],……字段n 类型 [约束条件]
);
mysql> create table t_user(-> id int primary key,-> name varchar(50),-> age int ,-> gender char(5),-> address varchar(255),-> tel char(11)-> );

展示当前数据库的所有表格:show tables;

mysql> show tables;
+-------------------+
| Tables_in_t_test1 |
+-------------------+
| t_user            |
+-------------------+
1 row in set (0.00 sec)

展示表结构:desc 数据库表

mysql> desc t_user;
+---------+--------------+------+-----+---------+-------+
| Field   | Type         | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| id      | int          | NO   | PRI | NULL    |       |
| name    | varchar(50)  | YES  |     | NULL    |       |
| age     | int          | YES  |     | NULL    |       |
| gender  | char(5)      | YES  |     | NULL    |       |
| address | varchar(255) | YES  |     | NULL    |       |
| tel     | char(11)     | YES  |     | NULL    |       |
+---------+--------------+------+-----+---------+-------+
6 rows in set (0.01 sec)

插入数据:insert Into 数据库表(字段1,字段2),value(值1,值2);

mysql> insert into t_user(id,name,age,gender,address,tel) value(1,"张三","18","男","伍仙桥","10011001");

插入多条数据:

mysql> insert into t_user(id,name,age,gender,address,tel) value(2,"李四","19","男","伍仙桥","10011002"),-> (3,"王五","20","女","伍仙桥","10011003");
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

简单查询数据库表的所有内容:select * from 数据库表

mysql> select * from t_user;
+----+--------+------+--------+-----------+----------+
| id | name   | age  | gender | address   | tel      |
+----+--------+------+--------+-----------+----------+
|  1 | 张三   |   18 | 男     | 伍仙桥    | 10011001 |
|  2 | 李四   |   19 | 男     | 伍仙桥    | 10011002 |
|  3 | 王五   |   20 | 女     | 伍仙桥    | 10011003 |
+----+--------+------+--------+-----------+----------+
3 rows in set (0.00 sec)

修改表结构:alter table 数据表 动作(modify,add...)

修改列类型
    ALTER TABLE 表名 MODIFY 列名 列类型;   -- 注意存在值的情况,类型不一定能成功
增加列
    ALTER TABLE 表名 ADD 列名 列类型;
删除列
    ALTER TABLE 表名 DROP 列名;
列改名
    ALTER TABLE 表名 CHANGE 旧列名 新列名 列类型;
更改表名
    ALTER TABLE 表名 RENAME 新表名;
    RENAME TABLE 表名 TO 新表名;

 修改列类型:

mysql> alter table t_user modify id varchar(255);
Query OK, 3 rows affected (0.03 sec)
Records: 3  Duplicates: 0  Warnings: 0mysql> desc t_user;
+---------+--------------+------+-----+---------+-------+
| Field   | Type         | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| id      | varchar(255) | NO   | PRI | NULL    |       |
| name    | varchar(50)  | YES  |     | NULL    |       |
| age     | int          | YES  |     | NULL    |       |
| gender  | char(5)      | YES  |     | NULL    |       |
| address | varchar(255) | YES  |     | NULL    |       |
| tel     | char(11)     | YES  |     | NULL    |       |
+---------+--------------+------+-----+---------+-------+
6 rows in set (0.00 sec)

添加列:

mysql> alter table  t_user add email varchar(255);
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> desc t_user;
+---------+--------------+------+-----+---------+-------+
| Field   | Type         | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| id      | varchar(255) | NO   | PRI | NULL    |       |
| name    | varchar(50)  | YES  |     | NULL    |       |
| age     | int          | YES  |     | NULL    |       |
| gender  | char(5)      | YES  |     | NULL    |       |
| address | varchar(255) | YES  |     | NULL    |       |
| tel     | char(11)     | YES  |     | NULL    |       |
| email   | varchar(255) | YES  |     | NULL    |       |
+---------+--------------+------+-----+---------+-------+
7 rows in set (0.00 sec)

删除列:

mysql> alter table t_user drop email;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> desc t_user;
+---------+--------------+------+-----+---------+-------+
| Field   | Type         | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| id      | varchar(255) | NO   | PRI | NULL    |       |
| name    | varchar(50)  | YES  |     | NULL    |       |
| age     | int          | YES  |     | NULL    |       |
| gender  | char(5)      | YES  |     | NULL    |       |
| address | varchar(255) | YES  |     | NULL    |       |
| tel     | char(11)     | YES  |     | NULL    |       |
+---------+--------------+------+-----+---------+-------+
6 rows in set (0.00 sec)

更改列名:

mysql> alter table t_user change id tid int;
Query OK, 3 rows affected (0.03 sec)
Records: 3  Duplicates: 0  Warnings: 0mysql> desc t_user;
+---------+--------------+------+-----+---------+-------+
| Field   | Type         | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| tid     | int          | NO   | PRI | NULL    |       |
| name    | varchar(50)  | YES  |     | NULL    |       |
| age     | int          | YES  |     | NULL    |       |
| gender  | char(5)      | YES  |     | NULL    |       |
| address | varchar(255) | YES  |     | NULL    |       |
| tel     | char(11)     | YES  |     | NULL    |       |
+---------+--------------+------+-----+---------+-------+
6 rows in set (0.00 sec)

更改表名:

mysql> alter table t_user rename t_user1;
Query OK, 0 rows affected (0.02 sec)mysql> show tables;
+-------------------+
| Tables_in_t_test1 |
+-------------------+
| t_user1           |
+-------------------+
1 row in set (0.00 sec)

2,数据库约束

创建数据库表的时候,字段名称 该字段类型 [约束 [,……] ]

约束是在表上强制执行的数据校验规则。约束主要用于保证数据库的完整性。当表中数据有相互依赖性时,可以保护相关的数据不被删除。大部分数据库支持下面五类完整性约束:

存在如下一些数据库表的约束:

  • 默认值约束

  • 主键约束

  • 非空约束

  • 外键约束

  • 唯一约束

  • 检查约束 【MySQL8之前,不生效。MySQL8之后是支持检查约束】

主键约束(primary key):

主键从功能上看相当于非空且唯一,一个表中只允许一个主键,主键是表中唯一确定一行数据的字段。一般建议主键采用“int类型”,一般建议由数据库自身维护这个字段的值。当建立主键约束时,MySQL为主键创建对应的索引——主键索引,主键约束名总为PRIMARY。

设置id为主键:id int primary key 后面的auto_increment代表自增

mysql> create table t_user2(->  id int primary key auto_increment,->  age int-> );
Query OK, 0 rows affected (0.02 sec)mysql> desc t_user2;
+-------+------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra          |
+-------+------+------+-----+---------+----------------+
| id    | int  | NO   | PRI | NULL    | auto_increment |
| age   | int  | YES  |     | NULL    |                |
+-------+------+------+-----+---------+----------------+
2 rows in set (0.00 sec)

此时插入数据id值不能为空且重复,因为id是主键,是这给条数据的唯一标识。

mysql> insert into t_user2(age) value(18);
Query OK, 1 row affected (0.00 sec)mysql> select * from t_user2;
+----+------+
| id | age  |
+----+------+
|  1 |   18 |
+----+------+
1 row in set (0.00 sec)

再次插入id为1时报错:

mysql> insert into t_user2(id,age) value(1,18);
ERROR 1062 (23000): Duplicate entry '1' for key 't_user2.PRIMARY'

当设置自动增长时,插入id为NULL不会报错,会自增:

mysql> insert into t_user2(id,age) value(null,18);
Query OK, 1 row affected (0.00 sec)mysql> select * from t_user2;
+----+------+
| id | age  |
+----+------+
|  1 |   18 |
|  2 |   18 |
+----+------+
2 rows in set (0.00 sec)

默认值约束(default):

给定的字段,设置默认值。

mysql> create table t_user2(->  id int primary key auto_increment,->  uname varchar(50),->  age int default 18-> );
Query OK, 0 rows affected (0.02 sec)mysql> desc t_user2;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int         | NO   | PRI | NULL    | auto_increment |
| uname | varchar(50) | YES  |     | NULL    |                |
| age   | int         | YES  |     | 18      |                |
+-------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

插入数据时若没给指定的值,会在该字段添加默认值

mysql> insert into t_user2(uname) value("张三");
Query OK, 1 row affected (0.01 sec)mysql> select * from t_user2;
+----+--------+------+
| id | uname  | age  |
+----+--------+------+
|  1 | 张三   |   18 |
+----+--------+------+

非空约束(not null):

不允许字段的值为空。

mysql> create table t_user2(->  id int primary key auto_increment,->  uname varchar(50) not null,->  age int-> );
Query OK, 0 rows affected (0.02 sec)mysql> desc t_user2;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int         | NO   | PRI | NULL    | auto_increment |
| uname | varchar(50) | NO   |     | NULL    |                |
| age   | int         | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

设置uname为不允许null之后,插入数据必须要给uname值

mysql> insert into t_user2(uname) value("张三");
Query OK, 1 row affected (0.00 sec)mysql> insert into t_user2(age) value(18);
ERROR 1364 (HY000): Field 'uname' doesn't have a default value
mysql> select * from t_user2-> ;
+----+--------+------+
| id | uname  | age  |
+----+--------+------+
|  1 | 张三   | NULL |
+----+--------+------+
1 row in set (0.00 sec)

唯一约束(unique):

唯一约束的作用,是保证该字段的值是唯一的,值不允许重复。

唯一性约束条件确保所在的字段或者字段组合不出现重复值
同一张表内可建多个唯一约束
唯一约束可由多列组合而成
建唯一约束时MySQL会为之建立对应的索引——唯一索引。
如果不给唯一约束起名,该唯一约束默认与列名相同。

mysql> create table t_user2(-> id int primary key auto_increment,-> uname varchar(50),-> age int not null,-> email varchar(50) unique-> );
Query OK, 0 rows affected (0.02 sec)mysql> desc t_user2;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int         | NO   | PRI | NULL    | auto_increment |
| uname | varchar(50) | YES  |     | NULL    |                |
| age   | int         | NO   |     | NULL    |                |
| email | varchar(50) | YES  | UNI | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

插入的数据在该字段中必须不同

mysql> insert into t_user2(uname,age,email) value("李四",20,"123@123.com");
Query OK, 1 row affected (0.01 sec)mysql> insert into t_user2(uname,age,email) value("王五",20,"123@123.com");
ERROR 1062 (23000): Duplicate entry '123@123.com' for key 't_user2.email'

外键约束(FOREIGN KEY (外键列名)REFERENCES 主表(参照列)):

外键:指的是两张或者多张表之间关联关系的字段。

外键约束:是表的约束,是约束表在插入外键数据时能够正确的插入,即给a表某个字段设置外键关联b表某个字段,a表该字段的数据插入或者修改时必须是b表其对应字段的数据。

首先得先有b表:

mysql> create table t_class(-> id int primary key auto_increment,-> cname varchar(50)-> );
Query OK, 0 rows affected (0.02 sec)mysql> insert into t_class(cname) value("MYSQL");
Query OK, 1 row affected (0.01 sec)mysql> select * from t_class;
+----+-------+
| id | cname |
+----+-------+
|  1 | MYSQL |
+----+-------+
1 row in set (0.00 sec)

再创建a表设置外键约束:

mysql> create table t_stu(->  id int primary key auto_increment,->  sname varchar(50),->  c_id int,->  foreign key (c_id) references t_class(id)-> );
Query OK, 0 rows affected (0.03 sec)mysql> desc t_stu;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int         | NO   | PRI | NULL    | auto_increment |
| sname | varchar(50) | YES  |     | NULL    |                |
| c_id  | int         | YES  | MUL | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

只能插入t_class表中id字段含有的值 

mysql> insert into t_stu(sname,c_id) value("张三",1);
Query OK, 1 row affected (0.01 sec)mysql> insert into t_stu(sname,c_id) value("李四",2);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`t_test1`.`t_stu`, CONSTRAINT `t_stu_ibfk_1` FOREIGN KEY (`c_id`) REFERENCES `t_class` (`id`))
mysql> select * from t_stu;
+----+--------+------+
| id | sname  | c_id |
+----+--------+------+
|  1 | 张三   |    1 |
+----+--------+------+
1 row in set (0.00 sec)

检查约束:

⚠️ 注意:检查约束在MySQL8之前是不生效的,当然也不报错。MySQL8之后,就支持了检查约束。

mysql> create table t_user2(-> id int primary key auto_increment,-> name varchar(50),-> age int check(age>=18),-> gender enum("男","女")-> );
Query OK, 0 rows affected (0.02 sec)mysql> desc t_user2;
+--------+-------------------+------+-----+---------+----------------+
| Field  | Type              | Null | Key | Default | Extra          |
+--------+-------------------+------+-----+---------+----------------+
| id     | int               | NO   | PRI | NULL    | auto_increment |
| name   | varchar(50)       | YES  |     | NULL    |                |
| age    | int               | YES  |     | NULL    |                |
| gender | enum('男','女')   | YES  |     | NULL    |                |
+--------+-------------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

会检测插入的数据是否满足要求:

mysql> insert into t_user2(-> ;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
mysql> insert into t_user2(name,age,gender) value("张三",18,"男");
Query OK, 1 row affected (0.00 sec)mysql> insert into t_user2(name,age,gender) value("李四",12,"男");
ERROR 3819 (HY000): Check constraint 't_user2_chk_1' is violated.
mysql> insert into t_user2(name,age,gender) value("王五",20,"动物");、
ERROR 1265 (01000): Data truncated for column 'gender' at row 1
mysql> select * from t_user2;
+----+--------+------+--------+
| id | name   | age  | gender |
+----+--------+------+--------+
|  1 | 张三   |   18 | 男     |
+----+--------+------+--------+
1 row in set (0.00 sec)

3,复制表结构和数据:

复制一个表结构的实现方法有两种

方法一:在create table语句的末尾添加like子句,可以将源表的表结构复制到新表中,语法格式如下。
create table 新表名 like 源表

如果已经存在一张机构一致的表,复制数据
insert into 表 select * from 原表;

方法二:在create table语句的末尾添加一个select语句,可以实现表结构的复制,甚至可以将源表的表
记录拷贝到新表中。下面的语法格式将源表的表结构以及源表的所有记录拷贝到新表中。
create table 新表名 select * from 源表

  • 如果直接复制表结构,则会默认将约束也复制过来

  • 如果复制表结构的同时,复制数据,则不会复制约束

复制表结构

mysql> select * from t_user2;
+----+--------+------+--------+
| id | name   | age  | gender |
+----+--------+------+--------+
|  1 | 张三   |   18 | 男     |
+----+--------+------+--------+
1 row in set (0.00 sec)mysql> desc t_user2;
+--------+-------------------+------+-----+---------+----------------+
| Field  | Type              | Null | Key | Default | Extra          |
+--------+-------------------+------+-----+---------+----------------+
| id     | int               | NO   | PRI | NULL    | auto_increment |
| name   | varchar(50)       | YES  |     | NULL    |                |
| age    | int               | YES  |     | NULL    |                |
| gender | enum('男','女')   | YES  |     | NULL    |                |
+--------+-------------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)mysql> create table t_user3 like t_user2;
Query OK, 0 rows affected (0.02 sec)mysql> desc t_user3;
+--------+-------------------+------+-----+---------+----------------+
| Field  | Type              | Null | Key | Default | Extra          |
+--------+-------------------+------+-----+---------+----------------+
| id     | int               | NO   | PRI | NULL    | auto_increment |
| name   | varchar(50)       | YES  |     | NULL    |                |
| age    | int               | YES  |     | NULL    |                |
| gender | enum('男','女')   | YES  |     | NULL    |                |
+--------+-------------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)mysql> select * from t_user3;
Empty set (0.00 sec)mysql> insert into t_user3 select * from t_user2;
Query OK, 1 row affected (0.01 sec)
Records: 1  Duplicates: 0  Warnings: 0mysql> select * from t_user3;
+----+--------+------+--------+
| id | name   | age  | gender |
+----+--------+------+--------+
|  1 | 张三   |   18 | 男     |
+----+--------+------+--------+
1 row in set (0.00 sec)mysql>

 没有复制表结构

mysql> create table t_user4 select * from t_user2;
Query OK, 1 row affected (0.02 sec)
Records: 1  Duplicates: 0  Warnings: 0mysql> desc t_user4;
+--------+-------------------+------+-----+---------+-------+
| Field  | Type              | Null | Key | Default | Extra |
+--------+-------------------+------+-----+---------+-------+
| id     | int               | NO   |     | 0       |       |
| name   | varchar(50)       | YES  |     | NULL    |       |
| age    | int               | YES  |     | NULL    |       |
| gender | enum('男','女')   | YES  |     | NULL    |       |
+--------+-------------------+------+-----+---------+-------+
4 rows in set (0.00 sec)mysql> select * from t_user4;
+----+--------+------+--------+
| id | name   | age  | gender |
+----+--------+------+--------+
|  1 | 张三   |   18 | 男     |
+----+--------+------+--------+
1 row in set (0.00 sec)

四,SQL之DML

数据库使用时,大多数情况下,开发者只会操作数据,也是就增删改查(CRUD)。是核心,是任何一个IT人士必备技能。增删改查四条语句,最重要的是查询(DQL)

有关数据表的DML操作INSERT INTO、DELETE、TRUNCATE、UPDATE、SELECT、条件查询、查询排序、聚合函数、分组查询

插入语句(insert into)

插入一条数据:insert into 数据表(字段一,字段二)value(值一,值二)

注意插入值时要注意对应的类型:字符类型插入值时要加引号,数值数据插入时,可以加引号也可以不加引号。

mysql> create table t_user1(-> id int primary key auto_increment,-> uname varchar(50),-> age int-> );
Query OK, 0 rows affected (0.03 sec)mysql> insert into t_user1(uname,age) value("张三",18);
Query OK, 1 row affected (0.01 sec)mysql> select * from t_user1;
+----+--------+------+
| id | uname  | age  |
+----+--------+------+
|  1 | 张三   |   18 |
+----+--------+------+
1 row in set (0.00 sec)

插入多条数据

mysql> insert into t_user1(uname,age) values("李四",19),("王五","20");
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0mysql> select * from t_user1;
+----+--------+------+
| id | uname  | age  |
+----+--------+------+
|  1 | 张三   |   18 |
|  2 | 李四   |   19 |
|  3 | 王五   |   20 |
+----+--------+------+
3 rows in set (0.00 sec)mysql>

删除语句(delete from)

删除指定数据行delete from 数据表 where 条件:

mysql> select * from t_user1;
+----+--------+------+
| id | uname  | age  |
+----+--------+------+
|  1 | 张三   |   18 |
|  2 | 李四   |   19 |
|  3 | 王五   |   20 |
+----+--------+------+
3 rows in set (0.00 sec)mysql> delete from t_user1 where id=1;
Query OK, 1 row affected (0.04 sec)mysql> select * from t_user1;
+----+--------+------+
| id | uname  | age  |
+----+--------+------+
|  2 | 李四   |   19 |
|  3 | 王五   |   20 |
+----+--------+------+
2 rows in set (0.00 sec)

删除所有数据(delete from 数据表):
 

mysql> select * from t_user1;
+----+--------+------+
| id | uname  | age  |
+----+--------+------+
|  2 | 李四   |   19 |
|  3 | 王五   |   20 |
+----+--------+------+
2 rows in set (0.00 sec)mysql> delete from t_user1;
Query OK, 2 rows affected (0.03 sec)mysql> select * from t_user1;
Empty set (0.00 sec)

更新语句(update,replace)

updata更新指定语句 update 数据表名 set 字段名=值1 where 条件:

mysql> select * from t_user1;
+----+--------+------+
| id | uname  | age  |
+----+--------+------+
|  4 | 张三   |   18 |
|  5 | 李四   |   19 |
|  6 | 王五   |   20 |
+----+--------+------+
3 rows in set (0.00 sec)mysql> update t_user1 set uname="杨六" where age=18;
Query OK, 1 row affected (0.03 sec)
Rows matched: 1  Changed: 1  Warnings: 0mysql> select * from t_user1;
+----+--------+------+
| id | uname  | age  |
+----+--------+------+
|  4 | 杨六   |   18 |
|  5 | 李四   |   19 |
|  6 | 王五   |   20 |
+----+--------+------+
3 rows in set (0.00 sec)

update更新字段的所有数据 pdate 数据表名 set 字段名=值1:

mysql> select * from t_user1;
+----+--------+------+
| id | uname  | age  |
+----+--------+------+
|  4 | 杨六   |   18 |
|  5 | 李四   |   19 |
|  6 | 王五   |   20 |
+----+--------+------+
3 rows in set (0.00 sec)mysql> update t_user1 set age=18;
Query OK, 2 rows affected (0.03 sec)
Rows matched: 3  Changed: 2  Warnings: 0mysql> select * from t_user1;
+----+--------+------+
| id | uname  | age  |
+----+--------+------+
|  4 | 杨六   |   18 |
|  5 | 李四   |   18 |
|  6 | 王五   |   18 |
+----+--------+------+
3 rows in set (0.00 sec)

replace更新数据(用法更插入数据类似:replace into 数据表(字段1,字段2) value(值1,值2)):

使用replace时是根据表中主键查找数据,如果存在数据则删除数据,再插入新数据,如果不存在主键,则新增加数据。

mysql> select * from t_user1;
+----+--------+------+
| id | uname  | age  |
+----+--------+------+
|  4 | 杨六   |   18 |
|  5 | 李四   |   18 |
|  6 | 王五   |   18 |
+----+--------+------+
3 rows in set (0.00 sec)mysql> replace into t_user1(uname,age) value("王五",20);
Query OK, 1 row affected (0.03 sec)mysql> select * from t_user1;
+----+--------+------+
| id | uname  | age  |
+----+--------+------+
|  4 | 杨六   |   18 |
|  5 | 李四   |   18 |
|  6 | 王五   |   18 |
|  7 | 王五   |   20 |
+----+--------+------+
4 rows in set (0.00 sec)

 更新数据:先删除再插入

mysql> select * from t_user1;
+----+--------+------+
| id | uname  | age  |
+----+--------+------+
|  4 | 杨六   |   18 |
|  5 | 李四   |   18 |
|  6 | 王五   |   18 |
|  7 | 王五   |   20 |
+----+--------+------+
4 rows in set (0.00 sec)mysql> replace into t_user1(id,uname,age) value(7,"小二",20);
Query OK, 2 rows affected (0.03 sec)mysql> select * from t_user1;
+----+--------+------+
| id | uname  | age  |
+----+--------+------+
|  4 | 杨六   |   18 |
|  5 | 李四   |   18 |
|  6 | 王五   |   18 |
|  7 | 小二   |   20 |
+----+--------+------+
4 rows in set (0.00 sec)

查询语句(select):

简单的sql查询

#查询所有数据mysql> select * from t_user1;
+----+--------+------+
| id | uname  | age  |
+----+--------+------+
|  4 | 杨六   |   18 |
|  5 | 李四   |   18 |
|  6 | 王五   |   18 |
|  7 | 小二   |   20 |
+----+--------+------+
4 rows in set (0.00 sec)#查询指定字段
mysql> select uname,age from t_user1;
+--------+------+
| uname  | age  |
+--------+------+
| 杨六   |   18 |
| 李四   |   18 |
| 王五   |   18 |
| 小二   |   20 |
+--------+------+
4 rows in set (0.00 sec)

条件查询(where)

      条件判断  

  • = 判断两次的值是否相等

  • is 判断空null

  • is not null来判断不为空

  • <=> 可以判断null或者普通值

  • != 不等于

  • <>也是不等于

        逻辑运算符

  • and

  • or

  • not

#等值查询mysql> select uname,age from t_user1 where age=20;
+--------+------+
| uname  | age  |
+--------+------+
| 小二   |   20 |
+--------+------+
1 row in set (0.00 sec)#等值判断查询
mysql> select * from t_user1 where age<=20;
+----+--------+------+
| id | uname  | age  |
+----+--------+------+
|  4 | 杨六   |   18 |
|  5 | 李四   |   18 |
|  6 | 王五   |   18 |
|  7 | 小二   |   20 |
+----+--------+------+
4 rows in set (0.03 sec)#NULL不能用=判断
mysql> select * from t_user1;
+----+--------+------+
| id | uname  | age  |
+----+--------+------+
|  4 | 杨六   |   18 |
|  5 | 李四   |   18 |
|  6 | 王五   |   18 |
|  7 | 小二   |   20 |
|  8 | 黄七   |   23 |
|  9 | 张三   |   44 |
| 10 | 唐九   |   37 |
| 11 | 帅哥   | NULL |
+----+--------+------+
8 rows in set (0.00 sec)mysql> select * from t_user1 where age=NULL;
Empty set (0.03 sec)mysql> select * from t_user1 where age is NULL;
+----+--------+------+
| id | uname  | age  |
+----+--------+------+
| 11 | 帅哥   | NULL |
+----+--------+------+
1 row in set (0.00 sec)#逻辑算运算符
mysql> select * from t_user1 where age>=20 and age<=30;
+----+--------+------+
| id | uname  | age  |
+----+--------+------+
|  7 | 小二   |   20 |
|  8 | 黄七   |   23 |
+----+--------+------+
2 rows in set (0.00 sec)#别名
mysql> select uname as "名字",age as "年龄" from t_user1 where age between 20 and 30;
+--------+--------+
| 名字   | 年龄   |
+--------+--------+
| 小二   |     20 |
| 黄七   |     23 |
+--------+--------+
2 rows in set (0.03 sec)

分组统计与筛选(group by  having):

#分组mysql> select gender as "性别" from t_user1 group by gender;
+--------+
| 性别   |
+--------+
| 女     |
| 男     |
+--------+
2 rows in set (0.00 sec)#统计
mysql> select gender as "性别",count(*) as "人数" from t_user1 group by gender;
+--------+--------+
| 性别   | 人数   |
+--------+--------+
| 女     |      3 |
| 男     |      5 |
+--------+--------+
2 rows in set (0.00 sec)#分组后的条件筛选
mysql> select gender as "性别",count(*) as "人数" from t_user1 group by gender having count(gender)>4;
+--------+--------+
| 性别   | 人数   |
+--------+--------+
| 男     |      5 |
+--------+--------+
1 row in set (0.00 sec)

查询结果排序(order by):

# 默认升序
mysql> select * from t_user1 order by age;
+----+--------+------+--------+
| id | uname  | age  | gender |
+----+--------+------+--------+
| 11 | 帅哥   | NULL | 男     |
|  4 | 杨六   |   18 | 女     |
|  5 | 李四   |   18 | 女     |
|  6 | 王五   |   18 | 女     |
|  7 | 小二   |   20 | 男     |
|  8 | 黄七   |   23 | 男     |
| 10 | 唐九   |   37 | 男     |
|  9 | 张三   |   44 | 男     |
+----+--------+------+--------+
8 rows in set (0.00 sec)# 设置降序
mysql> select * from t_user1 order by age desc;
+----+--------+------+--------+
| id | uname  | age  | gender |
+----+--------+------+--------+
|  9 | 张三   |   44 | 男     |
| 10 | 唐九   |   37 | 男     |
|  8 | 黄七   |   23 | 男     |
|  7 | 小二   |   20 | 男     |
|  4 | 杨六   |   18 | 女     |
|  5 | 李四   |   18 | 女     |
|  6 | 王五   |   18 | 女     |
| 11 | 帅哥   | NULL | 男     |
+----+--------+------+--------+
8 rows in set (0.00 sec)#设置升序
mysql> select * from t_user1 order by age asc;
+----+--------+------+--------+
| id | uname  | age  | gender |
+----+--------+------+--------+
| 11 | 帅哥   | NULL | 男     |
|  4 | 杨六   |   18 | 女     |
|  5 | 李四   |   18 | 女     |
|  6 | 王五   |   18 | 女     |
|  7 | 小二   |   20 | 男     |
|  8 | 黄七   |   23 | 男     |
| 10 | 唐九   |   37 | 男     |
|  9 | 张三   |   44 | 男     |
+----+--------+------+--------+
8 rows in set (0.00 sec)#存在多字段排序时,根据顺序依次排序
mysql> select * from t_user1 order by age asc,id desc;
+----+--------+------+--------+
| id | uname  | age  | gender |
+----+--------+------+--------+
| 11 | 帅哥   | NULL | 男     |
|  6 | 王五   |   18 | 女     |
|  5 | 李四   |   18 | 女     |
|  4 | 杨六   |   18 | 女     |
|  7 | 小二   |   20 | 男     |
|  8 | 黄七   |   23 | 男     |
| 10 | 唐九   |   37 | 男     |
|  9 | 张三   |   44 | 男     |
+----+--------+------+--------+
8 rows in set (0.00 sec)

分页(limit):

limit num  # 查询多少条

limit num1, num2; # num1: 偏移量, num2 : 每页的数量

#显示前几条数据:
mysql> select * from t_user1;
+----+--------+------+--------+
| id | uname  | age  | gender |
+----+--------+------+--------+
|  4 | 杨六   |   18 | 女     |
|  5 | 李四   |   18 | 女     |
|  6 | 王五   |   18 | 女     |
|  7 | 小二   |   20 | 男     |
|  8 | 黄七   |   23 | 男     |
|  9 | 张三   |   44 | 男     |
| 10 | 唐九   |   37 | 男     |
| 11 | 帅哥   | NULL | 男     |
+----+--------+------+--------+
8 rows in set (0.00 sec)mysql> select * from t_user1 limit 2;
+----+--------+------+--------+
| id | uname  | age  | gender |
+----+--------+------+--------+
|  4 | 杨六   |   18 | 女     |
|  5 | 李四   |   18 | 女     |
+----+--------+------+--------+
2 rows in set (0.00 sec)#偏移前两条数据,显示后面4条数据:
mysql> select * from t_user1 limit 2,4;
+----+--------+------+--------+
| id | uname  | age  | gender |
+----+--------+------+--------+
|  6 | 王五   |   18 | 女     |
|  7 | 小二   |   20 | 男     |
|  8 | 黄七   |   23 | 男     |
|  9 | 张三   |   44 | 男     |
+----+--------+------+--------+
4 rows in set (0.00 sec)

 多表关联查询:

#先看两张表的结构
mysql> select * from t_stu;
+----+--------+------+
| id | sname  | c_id |
+----+--------+------+
|  1 | 张三   |    1 |
|  3 | 李四   |    2 |
|  4 | 王五   |    3 |
|  5 | 老六   |    4 |
+----+--------+------+
4 rows in set (0.00 sec)mysql> select * from t_class;
+----+-----------------------+
| id | cname                 |
+----+-----------------------+
|  1 | MYSQL                 |
|  2 | Python                |
|  3 | JAVA                  |
|  4 | 计算机网络基础        |
+----+-----------------------+
4 rows in set (0.00 sec)#直接查询两张表(引发笛卡尔积现象)
mysql> select * from t_stu,t_class;
+----+--------+------+----+-----------------------+
| id | sname  | c_id | id | cname                 |
+----+--------+------+----+-----------------------+
|  5 | 老六   |    4 |  1 | MYSQL                 |
|  4 | 王五   |    3 |  1 | MYSQL                 |
|  3 | 李四   |    2 |  1 | MYSQL                 |
|  1 | 张三   |    1 |  1 | MYSQL                 |
|  5 | 老六   |    4 |  2 | Python                |
|  4 | 王五   |    3 |  2 | Python                |
|  3 | 李四   |    2 |  2 | Python                |
|  1 | 张三   |    1 |  2 | Python                |
|  5 | 老六   |    4 |  3 | JAVA                  |
|  4 | 王五   |    3 |  3 | JAVA                  |
|  3 | 李四   |    2 |  3 | JAVA                  |
|  1 | 张三   |    1 |  3 | JAVA                  |
|  5 | 老六   |    4 |  4 | 计算机网络基础        |
|  4 | 王五   |    3 |  4 | 计算机网络基础        |
|  3 | 李四   |    2 |  4 | 计算机网络基础        |
|  1 | 张三   |    1 |  4 | 计算机网络基础        |
+----+--------+------+----+-----------------------+
16 rows in set (0.00 sec)#给上条件可以解决
mysql> select * from t_stu,t_class where t_stu.c_id = t_class.id;
+----+--------+------+----+-----------------------+
| id | sname  | c_id | id | cname                 |
+----+--------+------+----+-----------------------+
|  1 | 张三   |    1 |  1 | MYSQL                 |
|  3 | 李四   |    2 |  2 | Python                |
|  4 | 王五   |    3 |  3 | JAVA                  |
|  5 | 老六   |    4 |  4 | 计算机网络基础        |
+----+--------+------+----+-----------------------+
4 rows in set (0.00 sec)#使用join(没有条件时引发笛卡尔积)
mysql> select * from t_stu join t_class;
+----+--------+------+----+-----------------------+
| id | sname  | c_id | id | cname                 |
+----+--------+------+----+-----------------------+
|  5 | 老六   |    4 |  1 | MYSQL                 |
|  4 | 王五   |    3 |  1 | MYSQL                 |
|  3 | 李四   |    2 |  1 | MYSQL                 |
|  1 | 张三   |    1 |  1 | MYSQL                 |
|  5 | 老六   |    4 |  2 | Python                |
|  4 | 王五   |    3 |  2 | Python                |
|  3 | 李四   |    2 |  2 | Python                |
|  1 | 张三   |    1 |  2 | Python                |
|  5 | 老六   |    4 |  3 | JAVA                  |
|  4 | 王五   |    3 |  3 | JAVA                  |
|  3 | 李四   |    2 |  3 | JAVA                  |
|  1 | 张三   |    1 |  3 | JAVA                  |
|  5 | 老六   |    4 |  4 | 计算机网络基础        |
|  4 | 王五   |    3 |  4 | 计算机网络基础        |
|  3 | 李四   |    2 |  4 | 计算机网络基础        |
|  1 | 张三   |    1 |  4 | 计算机网络基础        |
+----+--------+------+----+-----------------------+
16 rows in set (0.00 sec)#带上条件
mysql> select * from t_stu join t_class where t_stu.c_id = t_class.id;
+----+--------+------+----+-----------------------+
| id | sname  | c_id | id | cname                 |
+----+--------+------+----+-----------------------+
|  1 | 张三   |    1 |  1 | MYSQL                 |
|  3 | 李四   |    2 |  2 | Python                |
|  4 | 王五   |    3 |  3 | JAVA                  |
|  5 | 老六   |    4 |  4 | 计算机网络基础        |
+----+--------+------+----+-----------------------+
4 rows in set (0.00 sec)

五,SQL中的函数

聚合函数:

函数名称作用
MAX查询指定列的最大值
MIN查询指定列的最小值
COUNT统计查询结果的行数
SUM求和,返回指定列的总和
AVG求平均值,返回指定列数据的平均值

 数值型函数:

函数名称作用
ABS求绝对值
SQRT求平方根
POW 和 POWER两个函数的功能相同,返回参数的幂次方
MOD求余数
CEIL 和 CEILING两个函数功能相同,都是返回不小于参数的最小整数,即向上取整
FLOOR向下取整,返回值转化为一个BIGINT
RAND生成一个0~1之间的随机数,传入整数参数是,用来产生重复序列
ROUND对所传参数进行四舍五入
SIGN返回参数的符号

字符串类型:

函数名称作用
LENGTH计算字符串长度函数,返回字符串的字节长度
CHAR_LENGTH计算字符串长度函数,返回字符串的字节长度,注意两者的区别
CONCAT合并字符串函数,返回结果为连接参数产生的字符串,参数可以使一个或多个
INSERT(str,pos,len,newstr)替换字符串函数
LOWER将字符串中的字母转换为小写
UPPER将字符串中的字母转换为大写
LEFT(str,len)从左侧字截取符串,返回字符串左边的若干个字符
RIGHT从右侧字截取符串,返回字符串右边的若干个字符
TRIM删除字符串左右两侧的空格
REPLACE(s,s1,s2)字符串替换函数,返回替换后的新字符串
SUBSTRING(s,n,len)截取字符串,返回从指定位置开始的指定长度的字符换
REVERSE字符串反转(逆序)函数,返回与原始字符串顺序相反的字符串
STRCMP(expr1,expr2)比较两个表达式的顺序。若expr1 小于 expr2 ,则返回 -1,0相等,1则相反
LOCATE(substr,str [,pos])返回第一次出现子串的位置
INSTR(str,substr)返回第一次出现子串的位置

日期和时间函数:

函数名称作用
CURDATE() CURRENT_DATE() CURRENT_DATE两个函数作用相同,返回当前系统的日期值
CURTIME() CURRENT_TIME() CURRENT_TIME两个函数作用相同,返回当前系统的时间值
NOW返回当前系统的日期和时间值
SYSDATE返回当前系统的日期和时间值
DATE获取指定日期时间的日期部分
TIME获取指定日期时间的时间部分
MONTH获取指定日期中的月份
MONTHNAME获取指定曰期对应的月份的英文名称
DAYNAME获取指定曰期对应的星期几的英文名称
YEAR获取年份,返回值范围是 1970〜2069
DAYOFWEEK获取指定日期对应的一周的索引位置值,也就是星期数,注意周日是开始日,为1
WEEK获取指定日期是一年中的第几周,返回值的范围是否为 0〜52 或 1 〜53
DAYOFYEAR获取指定曰期是一年中的第几天,返回值范围是1~366
DAYOFMONTH 和 DAY两个函数作用相同,获取指定日期是一个月中是第几天,返回值范围是1~31
DATEDIFF(expr1,expr2)返回两个日期之间的相差天数,如 SELECT DATEDIFF('2007-12-31 23:59:59','2007-12-30');
SEC_TO_TIME将秒数转换为时间,与TIME_TO_SEC 互为反函数
TIME_TO_SEC将时间参数转换为秒数,是指将传入的时间转换成距离当天00:00:00的秒数,00:00:00为基数,等于 0 秒

流程控制函数:

函数名称作用
IF(expr,v1,v2)判断,流程控制,当expr = true时返回 v1,当expr = false、null 、 0时返回v2
IFNULL(v1,v2)判断是否为空,如果 v1 不为 NULL,则 IFNULL 函数返回 v1,否则返回 v2
CASE搜索语句

相关文章:

mysql入门操作

目录 一&#xff0c;MySQL简述 1&#xff0c;什么是MySQL 2&#xff0c;什么是SQL 3&#xff0c;SQL的分类 二&#xff0c;数据库的数据存储类型 1&#xff0c;数值类型 2&#xff0c;字符串类型 3&#xff0c;时间和日期类型 三&#xff0c;数据库的基本操作 1&…...

机械臂【逆运动学】

回顾正运动学fk&#xff1a; IK&#xff1a; 几何法 代数法 六轴 456轴交再同一点 有解析解 下列公式为正运动学部分结论 a和d是长度 &#xff0c;theta和alfa是角度 **疑问&#xff1a;alfa00&#xff1f; Z轴互相平行 ** 已知末端要在空间XYZ处如下 绿色项&#x…...

思库拉水厂开业庆典千人大会回顾

近日,思库拉离子水厂在广州隆重举办了开业盛典,现场汇聚了逾千名嘉宾。此次盛会不仅是对思库拉离子水厂正式投产的庆祝,更是对思库拉品牌未来蓝图的一次展示。 现场氛围热烈,洋溢着浓厚的喜庆气息。参与者来自五湖四海,既有思库拉的忠实拥趸,也有对思库拉产品充满兴趣的潜在消费…...

将Wi-Fi模块订阅MQTT主题以获取最新的固件版本推送信息

将Wi-Fi模块订阅MQTT主题以获取最新的固件版本推送信息&#xff0c;是一种常见的物联网&#xff08;IoT&#xff09;应用场景。这种设计可以实现远程监控和设备的OTA&#xff08;Over-The-Air&#xff09;升级功能。以下是详细的实现步骤和技术细节&#xff1a; 一、系统架构概…...

Netty源码—5.Pipeline和Handler一

大纲 1.Pipeline和Handler的作用和构成 2.ChannelHandler的分类 3.几个特殊的ChannelHandler 4.ChannelHandler的生命周期 5.ChannelPipeline的事件处理 6.关于ChannelPipeline的问题整理 7.ChannelPipeline主要包括三部分内容 8.ChannelPipeline的初始化 9.ChannelPi…...

Vue 中的nextTick函数的原理、作用及使用场景。

大白话Vue 中的nextTick函数的原理、作用及使用场景 在 Vue 里&#xff0c;nextTick 函数是个超实用的工具&#xff0c;它能让你在 DOM 更新完成之后再执行代码。为了能更好地理解 nextTick 函数的原理&#xff0c;咱们就来深入剖析一下。 核心思路 Vue 里的数据更新是异步执…...

详细讲解css的穿透方法

样式穿透&#xff08;CSS穿透&#xff09;的几种方法&#xff0c;包括在Vue中使用::v-deep、>>>、/deep/&#xff0c;还有pointer-events属性。还有关于Shadow DOM和::part伪元素的内容。接下来我会把这些方法分类&#xff0c;并详细说明每种方法的适用场景和注意事项…...

深入理解 tree 命令行工具:目录结构可视化的利器

文章目录 前言1. 什么是 tree 命令&#xff1f;安装 tree 2. tree 的基本用法显示当前目录的树状结构显示指定目录的树状结构 3. tree 的常用选项3.1 显示隐藏文件3.2 排除特定目录或文件3.3 限制递归深度3.4 显示文件大小3.5 显示文件的权限信息3.6 将输出保存到文件 4. 实际应…...

【QA】QT中事件和信号的区别以及联系是什么?

在 Qt 中&#xff0c;事件&#xff08;Event&#xff09; 和 信号与槽&#xff08;Signals & Slots&#xff09; 是 GUI 编程的核心机制&#xff0c;它们既有联系又有本质区别。以下从底层原理、触发流程、代码实现、适用场景四个维度展开对比&#xff0c;并通过大量示例说…...

C++实用函数:find与find_if

本篇来介绍C++中find和find_if函数的使用,通过多个实例来演示。 find用于基础的查找功能,find_if可以实现更复杂的匹配查找条件。 1 find 1.1 函数原型 template <class InputIterator, class T> InputIterator find ( InputIterator first, InputIterator last, c…...

全面了解 Cookies、Session 和 Token

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…...

酷淘商场项目【从零到一详解】Web端

✨博客主页&#xff1a; https://blog.csdn.net/m0_63815035?typeblog &#x1f497;《博客内容》&#xff1a;.NET、Java.测试开发、Python、Android、Go、Node、Android前端小程序等相关领域知识 &#x1f4e2;博客专栏&#xff1a; https://blog.csdn.net/m0_63815035/cat…...

如何转移虚拟主机?最新虚拟主机迁移方法

转移网站并不困难&#xff0c;但选择正确的选项和最佳程序才是关键。网站托管服务被视为当今数字世界的基石&#xff0c;全球有18 亿个网站。网站所有者可以通过下载备份、将其上传到新服务器并指向域名来手动转移网站。他们还可以通过新网站托管商的助手请求来移动网站。对于初…...

JVM 核心知识点总结

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…...

无人机数据链技术详解,无人机图传数传技术,无人机数据传输技术原理

以下是对无人机数据链技术、无人机图传数传技术以及无人机数据传输技术原理的详细解释&#xff1a; 无人机数据链技术 无人机数据链是任务机、地面控制站之间&#xff0c;以及任务机与中继机、武器系统或其它操作平台之间&#xff0c;按照约定的通信协议和信息传输方式&#…...

【Linux】同步原理剖析及模拟BlockQueue生产消费模型

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;博客仓库&#xff1a;https://gitee.com/JohnKingW/linux_test/tree/master/lesson &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &…...

【AVRCP】GOEP互操作性深度解析:蓝牙封面艺术传输的技术实现与演进

目录 一、技术基础&#xff1a;协议架构与核心概念 1.1 GOEP协议体系解析 1.2 IrOBEX协议关键技术 1.3 版本强制性要求 1.4 关键特性对比&#xff08;GOEP v2.0 vs v1.1&#xff09; 1.5 关键技术实现细节 1.6 GOEP v2.0互操作性要求 1.7 IrOBEX v1.5互操作性要求 二、…...

三分钟读懂微服务

一、什么是微服务 微服务&#xff0c;简单来说&#xff0c;就是把一个庞大复杂的软件系统&#xff0c;拆分成一个个小型的、独立的服务模块。打个比方&#xff0c;一个大型商场就如同传统的单体架构软件系统&#xff0c;里面所有的店铺、设施都紧密关联在一起。而微服务架构下…...

《Oracle DBA入门实战:十大高频问题详解与避坑指南》

Oracle DBA 入门作业十问十答 本文为 Oracle DBA 入门作业整理&#xff0c;涵盖工具使用、配置管理及权限控制等核心知识点&#xff0c;适合新手快速上手。 如有疑问或补充&#xff0c;欢迎评论区交流&#xff01; 1. DBA 常用工具有哪些&#xff1f; Oracle Universal Instal…...

深入剖析 Android Compose 框架的自动动画:AnimatedVisibility 与 AnimatedContent(二十四)

深入剖析 Android Compose 框架的自动动画&#xff1a;AnimatedVisibility 与 AnimatedContent 引言 在 Android 应用开发中&#xff0c;动画是提升用户体验的重要手段。它能够让界面元素的显示与隐藏、状态的切换变得更加自然和流畅&#xff0c;避免生硬的变化给用户带来不佳…...

【线程安全问题的原因和方法】【java形式】【图片详解】

在本章节中采用实例图片的方式&#xff0c;以一个学习者的姿态进行描述问题解决问题&#xff0c;更加清晰明了&#xff0c;以及过程中会发问的问题都会一一进行呈现 目录 线程安全演示线程不安全情况图片解释&#xff1a; 将上述代码进行修改【从并行转化成穿行的方式】不会出…...

Cocos Creator Shader入门实战(六):使用setProperty动态设置材质属性,以及材质常用接口

引擎&#xff1a;3.8.5 您好&#xff0c;我是鹤九日&#xff01; 回顾 上篇文章&#xff0c;我们主要讲解了关于材质的使用&#xff0c;主要有这么几点&#xff1a; 一、没有Effect资源&#xff0c;材质无从说起。 二、材质的构建&#xff0c;支持编译器和代码的动态构建 三…...

编程题记录3

九宫幻方 题目链接&#xff1a;https://www.lanqiao.cn/problems/100/learning/?page1&first_category_id1&second_category_id3&tags%E7%9C%81%E8%B5%9B&tag_relationintersection 先旋转、镜像得到所有的情况&#xff0c;可以发现情况是可以暴力得出的。…...

Geotools自动识别SLD并生成图例图片实战-以Polygon数据为例

目录 前言 一、Geotools与SLD制图基础 1、SLD是什么 2、SLD有什么用 二、SLD文件的解析与读取 1、SLD结构介绍 2、SLD实例展示 3、SLD读取方法 三、图例生成与展示 1、图例生成流程 2、图例生成实战 3、图例生成展示 四、结论 前言 在地理信息系统&#xff08;GIS&…...

windows docker如何修改 默认的Container memory usage

参考:https://forums.docker.com/t/docker-on-windows-11-with-wsl2-does-not-use-the-memory-i-set-in-wslconfig/144404/3 参考:https://learn.microsoft.com/en-us/windows/wsl/wsl-config...

LabVIEW液压传动系统教学仿真平台

本文介绍了一种基于LabVIEW的液压传动系统教学仿真平台&#xff0c;该平台采用“老师讲解、线上仿真、线下操作”的复合实验模式&#xff0c;旨在提高实验教学的效率与安全性。通过实例验证&#xff0c;展示了该平台在教学和实际操作中的应用效果&#xff0c;同时也为液压传动系…...

Java实习生面试题(2025.3.23 be)

一、v-if与v-show的区别 v-show 和 v-if 都是 Vue 中的条件渲染指令&#xff0c;它们的主要区别在于渲染策略&#xff1a;v-if 会根据条件决定是否编译元素&#xff0c;而 v-show 则始终编译元素&#xff0c;只是通过改变 CSS 的 display 属性来控制显示与隐藏。 二、mybatis-…...

OpenCV第2课 OpenCV的组成结构与图片/视频的加载及展示

1.OpenCV 的组成结构 2.OpenCV 的具体模块 3. 图像的读取 4. 视频的读取 1.OpenCV 的组成结构 OpenCV 是由很多模块组成的,这些模块可以分成很多层: 最底层是基于硬件加速层(HAL)的各种硬件优化。再上一层是opencv_contrib 模块所包含的OpenCV 由其他开发人员所贡献的代…...

Blender导出fbx到Unity找不到贴图的问题

fbx导入Unity材质能不能找到贴图是一件玄学的事情。常见的情况是有些材质能找到&#xff0c;有些找不到&#xff1a; 可能有用的方法 解决方法1&#xff1a;把贴图文件复制过去&#xff0c;模型reimport&#xff1b; 解决方法2&#xff1a;导出时路径模式选复制&#xff0c;内…...

kafka的文章

1.面试的问题 要点 至多一次、恰好一次数据一致性超时重试、幂等消息顺序消息挤压延时消息 1.1 kafaka 生产消息的过程。 在消息发送的过程中&#xff0c;涉及到了两个线程&#xff0c;一个是main 线程&#xff0c;一个是sender 线程。在main 线程中创建了一个双端队列 Reco…...

Go常见问题与回答(下)

文章目录 1、通过指针变量 p 访问其成员变量 name&#xff0c;有哪几种方式&#xff1f;2、代码&#xff0c;说出结果3、扩容提&#xff0c;代码&#xff0c;说出结果4、指出下面这段代码的错误之处5、是否通过编译6、关于字符串连接&#xff0c;下面语法正确的是7、关于iota&a…...

vue3中如何缓存路由组件

在 Vue3 中缓存路由组件&#xff0c;主要借助<keep-alive>组件来实现&#xff0c;具体方法如下&#xff1a; 1. 全局缓存路由组件 在 App.vue 等根组件中&#xff0c;直接将<router-view>包裹在<keep-alive>标签内&#xff0c;这样所有的路由组件都会被缓存…...

云服务器怎么防御ddos攻击呢?

防御DDoS攻击是保障云服务器稳定运行的关键措施&#xff0c;以下是综合多种防护策略的详细方案&#xff1a; 1. 启用云服务商提供的DDoS防护服务 高防IP/流量清洗&#xff1a; 将业务流量接入云服务商的高防IP&#xff0c;由专业清洗中心过滤恶意流量&#xff0c;仅放行正常请求…...

Log4j2 的核心实现和源码分析

Log4j2 的核心实现和源码分析 1. 核心组件 1.1 Logger 功能:负责记录日志信息。实现:org.apache.logging.log4j.Logger 接口,org.apache.logging.log4j.core.Logger 类。1.2 Appender 功能:负责将日志信息输出到不同的目的地,如文件、控制台等。实现:org.apache.loggin…...

【深度学习】【目标检测】【OnnxRuntime】【C++】YOLOV3模型部署

【深度学习】【目标检测】【OnnxRuntime】【C】YOLOV3模型部署 提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 文章目录 【深度学习】【目标检测】【OnnxRuntime】【C】YOLOV3模型部署前言Windows平台搭建依赖环境模型转换--pytorch转onnxONNXRuntime推…...

四种跨模态行人重识别可视化方法

1.Gradcam 2.检索可视化 3.tsne图 4.距离分布 需要的私聊&#xff0c;代码需要付费...

8个DeepSeek文章润色指令

今天道叔给各位文字工作者安利DeepSeek的8个神仙级润色指令(附真实案例拆解)&#xff0c;建议搭配冰美式食用更佳↓↓↓ 一、【学术黑话翻译器】 适用场景&#xff1a;给投资人看的BP/行业白皮书/专家访谈实录 指令公式&#xff1a;"将以下内容转化为通俗易懂的行业洞察…...

解决PowerShell下Git中文乱码问题

解决PowerShell下Git中文乱码问题 在使用Git进行版本控制时&#xff0c;许多开发者可能会遇到中文乱码的问题&#xff0c;尤其是在Windows环境下使用PowerShell时。这不仅影响代码的阅读和提交&#xff0c;还可能导致一些不可预见的错误。本文将详细探讨如何在PowerShell下解决…...

oracle数据库(数据库启动关闭/sqlplus登录及基本操作/设置字符集/distinct去重)

目录 1. Oracle数据库启动 2. Oracle数据库关闭 3. sqlplus登录Oracle数据库 3.1 使用sqlplus登录Oracle数据库 3.2 使用sqlplus登录Oracle数据库 3.3 远程登录 3.4 解锁用户 3.5 修改用户密码 3.6 查看当前语言环境 4. sqlplus基本操作 4.1 显示当前用户 4.2 查看当前用户…...

mapreduce时,客户端做哪些事

在MapReduce过程中&#xff0c;客户端&#xff08;Client&#xff09;是用户提交作业的入口&#xff0c;负责作业的初始化、配置、资源提交和作业监控。以下是客户端在整个流程中的具体职责和操作步骤&#xff1a; 1. 作业配置与参数解析 设置作业属性&#xff1a; 定义MapRed…...

DeepBI:重构流量逻辑,助力亚马逊广告实现高效流量增长

在日益激烈的跨境电商竞争环境中&#xff0c;广告投放早已从“粗放撒网”走向“精细化运营”。尤其是在亚马逊这样一个成熟且竞争白热化的平台&#xff0c;如何在广告预算有限的前提下实现高效曝光、精准触达、稳定转化&#xff0c;成为众多卖家和运营团队面临的核心挑战。 De…...

Linux内核的页面错误:原因与解决方案

当程序访问虚拟内存中的一个页面时&#xff0c;如果该页面当前不在物理内存中&#xff0c;就会触发一个称为"page fault"&#xff08;页异常&#xff09;的异常。操作系统需要处理这个异常&#xff0c;并将所需页面从磁盘加载到内存中。实现虚存管理的一个关键是page…...

LORA 中的 梯度外积是什么意思; 方差和协方差的实际含义:衡量变量的离散程度和变量间的线性相关性

LORA 中的 梯度外积是什么意思 目录 LORA 中的 梯度外积是什么意思**一、梯度外积的定义****二、示例说明****步骤1:计算单样本梯度****步骤2:计算梯度外积****三、梯度外积的作用****四、总结**方差和协方差的实际含义:衡量变量的离散程度和变量间的线性相关性**一、方差(…...

XSS复现漏洞简单前八关靶场

靶场不需要安装任意环境 链接如下&#xff1a;XSS Game - Learning XSS Made Simple! | Created by PwnFunction 目录 XSS Game 第一关&#xff1a;Ma Spaghet! 第二关&#xff1a;Jefff 第三关&#xff1a;Ugandan Knuckles 第四关&#xff1a;Ricardo Milos 第五关&am…...

3.24-3 接口测试断言

一.postman 断言 1.断言再test中 #状态码是否等于200 tests["Status code is 200"] responseCode.code 200; #断言响应时间小于200ms tests["Response time is less than 200ms"] responseTime < 200; #断言响应体包含内容 tests["Body…...

《鸿蒙携手AI:解锁智慧出行底层逻辑》

在科技飞速发展的当下&#xff0c;智慧出行成为人们对未来交通的美好期许&#xff0c;而鸿蒙系统与人工智能的深度融合&#xff0c;正为这一愿景的实现提供强大助力。从技术原理角度深入剖析&#xff0c;鸿蒙系统究竟如何支撑人工智能在智慧出行场景中的应用呢&#xff1f;这背…...

【AVRCP】探寻AVRCP控制互操作性:连接、命令与设备交互

目录 一、AVCTP连接管理 1.1 AVCTP连接建立 1.2 AVCTP连接释放 二、AV/C命令的操作流程 2.1 AV/C命令交换流程 2.2 AV/C命令类型 三、AVRCP特定命令 四、AVRCP浏览命令 五、OBEX连接管理 5.1 OBEX连接建立 5.2 OBEX连接释放 六、总结 七、参考资料 AVRCP对于实现设…...

Mybatis-Plus知识点详解

Mybatis-plus(简称MP),基于Mybatis的增强工具,保留了Mybatis的所有功能,同时增加了通用的CRUD,条件构造器,分页插件等等实用工具 特性 即拿即用:通过通用Mapper和Service,无需编写XML既可以完成单表CURE操作 Lambda支持:使用Lambda表达式构建查询条件,避免硬编码字段名,提升代…...

紧凑交叉引用表

嗯&#xff0c;用户问的是“compact xref table”&#xff0c;也就是紧凑型交叉引用表。我之前在回答中提到过交叉引用流&#xff08;XRef Stream&#xff09;&#xff0c;但可能需要更详细地解释两者的区别和联系。根据搜索结果中的网页1&#xff0c;传统的Xref表以文本形式存…...

CMake 详解:跨平台构建系统的入门与进阶

目录 一、相关知识点 1. 什么是cmake&#xff0c;为什么使用&#xff1f; 2. 构建过程 二、CMake使用流程 1. 创建 CMakeLists.txt 文件 2. 配置构建目录 3. 运行cmake 4. 运行make编译 一、相关知识点 1. 什么是cmake&#xff0c;为什么使用&#xff1f; CMake 是一个开…...