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中EXISTS关键字的用法,我需要详细解释并提供示例。首先,我得回忆EXISTS的作用,它用于子查询中检查是否存在满足条件的记录。记得EXISTS是布尔操作符,返回TRUE或FALSE。 先要说明基本语法结构,比如SELECT ... WHERE EXISTS (subquery)。可能要和IN子句做对比,指出EXISTS和IN的区别,尤其是在性能方面,比如当子查询结果集大时EXISTS更高效,因为它在找到第一个匹配项后就会停止搜索。 然后需要举几个例子,比如查找有订单的用户,或者没有订单的用户,用EXISTS和NOT EXISTS。示例要具体,可能需要用到两个表,比如用户表和订单表,通过用户ID关联。 还要注意关联子查询中的条件,比如在子查询里用WHERE user.id = order.user_id,这样才能正确关联主查询和子查询的数据。需要解释为什么这样写,以及执行过程是怎样的。 另外,用户可能想知道EXISTS和JOIN的区别,可以简单提一下,比如EXISTS更适合检查存在性,而JOIN会返回具体的数据。但根据用户的问题,可能不需要深入讨论这个,但作为扩展可能会有帮助。 还要提醒用户在使用EXISTS时要注意子查询的效率,比如确保有合适的索引,避免全表扫描。比如在user_id上建立索引可能会提升查询速度。 可能用户会混淆EXISTS和IN,需要明确两者的适用场景。例如,当子查询结果集较小时,IN可能更合适,而当子查询结果集较大或需要关联条件时,EXISTS更高效。 最后,总结一下使用场景和最佳实践,帮助用户更好地理解和应用EXISTS关键字。确保示例的SQL语句正确,并且基于MySQL 5.7版本,如引用中提到的。 需要检查是否有遗漏的点,比如是否覆盖了基本用法、示例、与NOT EXISTS的结合使用,以及性能方面的建议。还要确保语句使用正确的LaTeX格式,数学表达式用$...$,独立公式用$$...$$,但在这个问题中可能用不上数学公式,主要是SQL代码和解释。</think>### MySQL EXISTS 关键字使用教程 #### 一、EXISTS 基本概念 EXISTS 是MySQL中的布尔运算符,用于检查子查询是否返回至少一行数据。其核心逻辑为: - 若子查询有结果,返回 **TRUE** - 若子查询无结果,返回 **FALSE** 语法格式为: ```sql SELECT column1, column2... FROM table1 WHERE EXISTS (subquery); ``` --- #### 二、使用示例 **示例表结构**: - `user` 表:存储用户信息(id, name) - `order` 表:存储订单信息(id, user_id, amount) **示例1:查询有订单的用户** ```sql SELECT * FROM user u WHERE EXISTS ( SELECT 1 FROM order o WHERE o.user_id = u.id ); ``` - **执行逻辑**:主查询逐行扫描 `user` 表,检查子查询中是否存在该用户的订单[^1] - **优化提示**:`order.user_id` 字段添加索引可提升性能 **示例2:查询无订单的用户(NOT EXISTS)** ```sql SELECT * FROM user u WHERE NOT EXISTS ( SELECT 1 FROM order o WHERE o.user_id = u.id ); ``` --- #### 三、EXISTS 与 IN 的对比 | 特性 | EXISTS | IN | |--------------------|---------------------------------|---------------------------------| | 执行机制 | 找到第一条匹配即停止 | 需完全遍历子查询结果 | | 性能优势场景 | 子查询结果集大时更高效 | 子查询结果集小时更简洁 | | 关联查询支持 | 支持通过WHERE关联主查询 | 需显式JOIN或WHERE关联 | --- #### 四、进阶用法 **多条件组合查询**: ```sql SELECT * FROM product p WHERE EXISTS ( SELECT 1 FROM inventory i WHERE i.product_id = p.id AND i.quantity > 100 ) AND p.price < 50; ``` **多层嵌套 EXISTS**: ```sql SELECT * FROM department d WHERE EXISTS ( SELECT 1 FROM employee e WHERE e.dept_id = d.id AND EXISTS ( SELECT 1 FROM salary s WHERE s.emp_id = e.id AND s.year = 2023 ) ); ``` --- #### 五、最佳实践 1. **优先使用关联子查询**:通过 `WHERE o.user_id = u.id` 建立主查询与子查询的关联 2. **避免全表扫描**:确保子查询的WHERE条件字段有索引 3. **选择 EXISTS 的场景**:当只需判断存在性而不需要具体数据时
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值