mysql基本关键字

数据类型

INT 整型(4个字节)
DOUBLE 浮点数(8个字节),近似值
DOUBLE(5,2)表示最多5位其中必须有2位个数 即最大值为999.99
CHAR()不可变字符长度,不足以空格补齐,占用空间,但是读取速度快
VARCHAR()可变字符长度 内存占用小,但是读取速度慢。
DECIMAL()精确数值数据,最大位数可以是65
DECIMAL(5,2)与DOUBLE用法相似;表示范围为-999.99-999.99
TEXT 大文本数据类型,有字符编码,存储比较大的文本数据,
BLOB 二进制大对象数据,可存储图片音频视频。
DATE 日期类型 格式为yyyy-MM-dd
TIME 时间类型 格式为 hh:mm: ss
TIMESTAMP 时间类型yyyy-MM-dd hh:mm:ss 会自动赋值
DATETIME 日期时间类型yyyy-MM-dd hh:mm:ss


常用的约束
主键约束 PRIMARY KEY(保证数据的唯一性)不能重复,不能为NULL
唯一约束 UNIQUE[KEY]不能重复,可以为NULL
非空约束 NOT NULL
默认约束 DEFAULT
外键约束 FOREIGN KEY
自动增长 auto_incremen

基本的sql操作语句

查看所有数据库
SHOW DATABASES;
使用数据库
USER databas_name; 当然之后使用工具很少使用
删除表
DROP TABLE IF EXISTS table_name;
当前数据库中所有表
SHOW TABLES;
查看表的字段信息
DESC table_name;
在已知表中举例为USER增加一列image列
ALTER TABLE USER ADD image BLOB;
修改address列使其长度为60
ALTER TABLE USER MODIFY address VARCHAR(60);
删除image列一次只能删一列
ALTER TABLE USER DROP image;
修改表名
RENAME USER TO t_user;
查看创建表中的细节
SHOW CREATE TABLE USER ;
修改字符为Gbk
ALTER TABLE USER CHARACTER SET gbk;
将列名·NAME·修改为username;
ALTER TABLE USER CHANGE `name` username VARCHAR(20);

1、插入操作
语法INSERT INTO +TABLE名(列名1+列名2。。。。)VALUES(列值1,列值2。。)
列名与列值的类型、个数、顺序要一一对应。

​        可以把列名当做java中的形参,把列值当做实参。

​        参数不要超出列定义的长度。

​        如果插入空值,请使用NULL

​        插入的日期和字符一样,都使用单引号括起来。

```sql
SQL> CREATE TABLE student
(
   id INT NOT NULL,
   name VARCHAR(50),
   age INT,
   address VARCHAR(100)
);
```
如需要依次添加多个数据只需在多个插入值之间加个逗号。
INSERT INTO student(id,NAME,age,address) VALUES (1,'zhangsan',20,'北京海淀');
INSERT INTO student(id,NAME,age,address) VALUES (2,'lisi',22,'上海浦东');
INSERT INTO student(id,NAME,age,address) VALUES (3,'wangwu',23,'北京昌平');
注:插入中文需要设置编码 否则会报错。
修改方法
1、查看数据库信息
SHOW VARIABLES LIKE 'character%';
临时更改客户端和服务器结果集的编码

SET character_set_client=gbk;

SET character_set_results=gbk;
或者简单粗暴直接改
SET  NAMES  ‘gbk’;  

2、修改操作 UPDATE:
语法:UPDATE 表名 SET 列名1=列值1,列名2=列值2 ... WHERE 列名=值

练习:
将所有学生的年龄修改为25。
UPDATE student SET age=25;

将id为’1’的地址修改为“河北保定”。

UPDATE student SET address='河北保定' WHERE id=1;

将姓名为’曹操''的学生年龄改为50,地址改为"河南郑州"’。

UPDATE student SET age=50, address='河南郑州' WHERE NAME='曹操';

将所有学生的年龄加5岁。
UPDATE student SET age=age+5;   
3、删除操作
 删除表中名称为’zhangsan’的记录。;
 DELETE FROM student WHERE NAME='zhangsan';
 删除表中所有记录。
 DELETE FROM student ;
 
 使用TRUNCATE删除表中记录。(先把表删除,然后再创建空表)
 TRUNCATE TABLE student ;
- DELETE 删除表中的数据,表结构还在;删除后的数据使用日志可以找回。
- TRUNCATE 删除是把表直接DROP掉,然后再创建一个同样的新表。
- TRUNCATE 删除的数据不能找回。执行速度比DELETE快。
##### 2.6客户端工具

使用命令虽然可以完成基本操作,为了更方便用户操作和使用MySQL数据,市面上出现很多第三方的客户端管理工具比如:SQLyog和Navicat

演示:SQLyog的使用(网上下载-免费)

 

演示:Navicat的使用(付费软件)

 DQL数据查询(重点)

<think>首先,用户的问题是关于MySQL中UNION关键字的用法、使用场景和注意事项。我需要基于提供的引用内容来回答。 回顾引用: - 引用[1]:展示了使用UNION时如何添加额外列来区分不同查询的结果。示例是通过添加一个'source'列。 - 引用[2]:解释了UNION和UNION ALL的区别、核心作用、使用场景(如去重需求)、注意事项(列结构一致性、排序与别名)。 - 引用[3]:描述了UNION会去重并排序,而UNION ALL不会。 - 引用[4]:提到了验证列名相同、列名不同、列类型不同等情况下的使用对比。 用户查询:"我想了解mysql中UNION关键字的相关信息,可能包括用法、使用场景、注意事项等 请问mysql UNION关键字的用法、使用场景及注意事项" 所以,我需要覆盖: 1. 用法:如何写语法。 2. 使用场景:什么时候使用UNION或UNION ALL。 3. 注意事项:基于引用中的点。 结构化回答: - 系统级指令要求: - 行内数学表达式用$...$,但这个问题可能不需要数学公式。 - 独立公式用$$...$$,同样可能不适用。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾添加引用标识,如[^1]。 在回答中,我需要自然地引用来源。引用来自[^1]到[^4],所以我应该在相关部分添加这些引用。 大纲回答: 1. **引言**:简要介绍UNION关键字。 2. **用法**: - 基本语法。 - 添加额外列的技巧(引用[1])。 - 与UNION ALL的区别(引用[2]和[3])。 3. **使用场景**: - 需要去重时用UNION(引用[2])。 - 需要保留重复数据或性能优化时用UNION ALL(引用[2])。 - 示例场景(如合并表)。 4. **注意事项**: - 列结构一致性:列数、顺序、数据类型兼容(引用[2])。 - 排序与别名:只在最后一个SELECT后加ORDER BY;列名以第一个SELECT为准(引用[2])。 - 性能:UNION有额外排序和去重开销(引用[3])。 - 其他:如避免数据类型不匹配(引用[4])。 5. **总结**。 6. **生成相关问题**:以"§§相关问题§§"开头,列出几个问题。 确保回答清晰、逐步解释。 生成相关问题: - 基于主题,如: 1. UNION和UNION ALL的性能差异有多大? 2. 如何处理UNION中列名不同的情况? 3. UNION在哪些常见查询中使用? 4. 可以UNION多个表吗?如何操作? 回忆系统指令:"生成相关问题" 需要在回答末尾添加。 最后,格式: - 使用中文。 - 引用标识:在每个引用的点子末尾添加,如[^1]。 具体内容: - 用法: - 基本语法:SELECT ... UNION SELECT ... 或 UNION ALL。 - 添加标识列:引用[1]中的技巧。 - 使用场景: - UNION用于去重(引用[2])。 - UNION ALL用于高性能保留重复(引用[2])。 - 注意事项: - 列一致性(引用[2])。 - 排序位置(引用[2])。 - UNION的去重和排序行为(引用[3])。 - 数据类型兼容(引用[4])。 编写回答。 </think>### MySQL中UNION关键字的用法、使用场景及注意事项 在MySQL中,`UNION`关键字用于合并多个`SELECT`语句的结果集。它允许你将两个或多个查询的结果纵向拼接成一个结果集,常用于数据分析、报表生成等场景。以下基于站内引用内容,我将结构化地解释其用法、使用场景及注意事项。回答中会遵循MySQL的语法规则,并引用权威来源以确保准确性。 #### 1. **UNION关键字的用法** - **基本语法**:`UNION`通过组合多个`SELECT`语句实现,每个查询的列数和数据类型必须一致。语法格式为: ```sql SELECT column1, column2 FROM table1 UNION SELECT column1, column2 FROM table2; ``` - 默认情况下,`UNION`会自动去重重复行并对结果进行排序(基于所有列)。如果不需要去重,可以使用`UNION ALL`(稍后详述)。 - **添加标识列的技巧**:有时需要区分不同查询的来源,可以在每个`SELECT`中添加额外的列作为标识。例如,引用[1]展示了如何用字符串常量标注来源: ```sql SELECT column1, column2, 'res 1' AS source FROM table1 UNION SELECT column1, column2, 'res 2' AS source FROM table2; ``` 这样,结果中会多出一个`source`列,标明数据源自哪个查询(如'res 1'或'res 2'),便于后续分析[^1]。 - **与UNION ALL的区别**:`UNION`会去除重复行并排序,而`UNION ALL`则保留所有行(包括重复行)且不排序。例如,引用[3]指出:`UNION`在合并后自动筛选重复记录并进行排序运算,而`UNION ALL`直接返回所有数据[^3]。语法类似: ```sql SELECT column1 FROM table1 UNION ALL SELECT column1 FROM table2; -- 不删除重复行 ``` #### 2. **UNION关键字的使用场景** - **需要去重时优先用UNION**:当合并结果集时,如果期望消除重复记录(例如合并多个客户列表),`UNION`更合适。引用[2]提到一个典型场景:合并两个客户表并确保唯一ID,避免重复条目干扰分析[^2]: ```sql SELECT customer_id FROM table1 UNION SELECT customer_id FROM table2; -- 自动去重 ``` - **需要高性能或保留重复时用UNION ALL**:如果数据本身允许重复(如日志记录),或追求查询性能(避免排序和去重开销),应选用`UNION ALL`。引用[2]举例:统计日志数据时保留所有条目以提高速度[^2]: ```sql SELECT log_time FROM debug_logs UNION ALL SELECT log_time FROM error_logs; -- 保留重复行,性能更高 ``` - **其他常见场景**: - **合并历史数据和实时数据**:如引用[3]所述,`UNION`常用于过程表与历史表的结合,例如查询不同时间点的产品创建时间[^3]。 - **结构相似的多个表集成**:当多个表有相同列结构时(如不同部门的销售数据),使用`UNION`快速生成汇总报表。 #### 3. **UNION关键字的注意事项** - **列结构一致性**:所有`SELECT`语句的列数、列顺序和数据类型必须严格兼容。引用[2]强调:列数量和顺序需一致;数据类型需可兼容(如`VARCHAR`和`TEXT`可合并,但`INT`和`DATE`会报错)。例如: ```sql -- 合法:列名不同但数据类型兼容 SELECT name AS employee_name FROM employees UNION SELECT full_name FROM contractors; -- 结果以第一个SELECT的别名employee_name为准 -- 非法:列数不一致或类型不兼容 SELECT id, name FROM table1 UNION SELECT name FROM table2; -- 报错:列数不同 ``` 引用[4]建议在实际使用前测试数据类型兼容性(如验证数值列和字符列的合并可行性)[^4]。 - **排序与别名的规则**: - **排序限制**:如果需要对整个结果集排序,只能在最后一个`SELECT`后添加`ORDER BY`子句。引用[2]示例: ```sql SELECT name FROM employees UNION ALL SELECT name FROM contractors ORDER BY name; -- 整体排序,仅作用于最终结果 ``` 不能在每个`SELECT`单独排序,否则会报错[^2]。 - **别名处理**:结果集的列名以第一个`SELECT`语句指定的别名为准。例如,如果第一个查询使用`AS`重命名,后续查询的列名会被忽略[^2]。 - **性能开销**:`UNION`涉及去重和排序操作,可能降低查询效率(尤其大数据量时),而`UNION ALL`性能更高。引用[3]解释:`UNION`会触发排序运算来删除重复记录,增加额外开销[^3]。在实际应用中,优先用`UNION ALL`除非明确需要去重。 - **避免常见错误**: - **数据类型不匹配**:如引用[4]所述,确保所有列的数据类型兼容,否则会抛出错误(如尝试合并整数和日期列)[^4]。 - **重复数据问题**:如果误用`UNION`代替`UNION ALL`,可能导致意外丢失重复数据。因此在设计查询时,仔细评估是否需要去重。 #### 总结 MySQL的`UNION`关键字是合并查询结果的强大工具,适合去重场景(如集成唯一ID列表),而`UNION ALL`更适合高性能需求或保留重复数据(如日志分析)。使用时务必注意列结构一致性、排序位置和别名规则,以避免错误或性能瓶颈。通过添加标识列(如`AS source`)等技巧,可以提升结果可读性[^1]。在实际开发中,建议先用小数据集测试查询,确保兼容性和预期效果。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值