目录
首先,怎么安装,环境怎么调。
alter——改变(此段Al)
创建于删除数据库、表格
上一节进阶
预设值default编辑
关于插入顺序
有条件的删除DELETE FROM 表 WHERE 条件
多种语句组合查看
查看+排序编辑
LIMIT 2只取前2名
where major in(期望列表)
关掉安全更新
首先,怎么安装,环境怎么调。
一个简陋的8.4.0from
安装server 以及 workbench
MySQL :: Download MySQL Community Server (Archived Versions)
alter——改变(此段Al)
在MySQL中,ALTER关键字用于修改现有数据库对象的结构,如表(TABLE)、视图(VIEW)等。通过ALTER关键字,您可以添加、删除或修改表字段,改变字段的属性,以及执行其他与表结构相关的操作。
以下是ALTER关键字的一些常见用法:
1. **添加新字段**:
```sql
ALTER TABLE table_name ADD new_column datatype;
```
2. **删除字段**:
```sql
ALTER TABLE table_name DROP COLUMN column_name;
```
3. **修改字段类型或属性**:
```sql
ALTER TABLE table_name MODIFY COLUMN column_name new_datatype;
```
或
```sql
ALTER TABLE table_name CHANGE COLUMN old_column new_column new_datatype;
```
4. **重命名字段**:
```sql
ALTER TABLE table_name RENAME COLUMN old_column TO new_column;
```
5. **更改表的名称**:
```sql
ALTER TABLE old_table_name RENAME TO new_table_name;
```
6. **添加索引**:
```sql
ALTER TABLE table_name ADD INDEX index_name (column_name);
```
7. **添加主键约束**:
```sql
ALTER TABLE table_name ADD PRIMARY KEY (column_name);
```
8. **添加外键约束**:
```sql
ALTER TABLE table_name ADD FOREIGN KEY (column_name) REFERENCES other_table(other_column);
```
9. **添加唯一性约束**:
```sql
ALTER TABLE table_name ADD UNIQUE (column_name);
```
10. **添加默认值**:
```sql
ALTER TABLE table_name ALTER COLUMN column_name SET DEFAULT default_value;
```
11. **删除默认值**:
```sql
ALTER TABLE table_name ALTER COLUMN column_name DROP DEFAULT;
```
12. **修改存储引擎**:
```sql
ALTER TABLE table_name ENGINE = engine_name;
```
13. **修改字符集**:
```sql
ALTER TABLE table_name CHARACTER SET charset_name;
```
14. **修改排序规则**:
```sql
ALTER TABLE table_name COLLATE collate_name;
```
15. **添加分区**:
```sql
ALTER TABLE table_name ADD PARTITION ...;
```
16. **移除分区**:
```sql
ALTER TABLE table_name REMOVE PARTITIONING;
```
17. **优化表**:
```sql
ALTER TABLE table_name OPTIMIZE PARTITION partition_name;
```
18. **分析表**:
```sql
ALTER TABLE table_name ANALYZE PARTITION partition_name;
```
19. **检查表**:
```sql
ALTER TABLE table_name CHECK PARTITION partition_name;
```
在使用ALTER关键字时,请注意以下几点:
- 执行ALTER TABLE操作可能会锁定表,导致其他会话无法访问该表,直到操作完成。
- 对于大型表,某些类型的ALTER TABLE操作可能需要较长时间,因此最好在维护窗口期间执行这些操作。
- 在生产环境中执行ALTER TABLE之前,应在测试环境中充分测试以确保操作的稳定性和性能影响。
- 如果要保留原始数据,请在执行任何破坏性的ALTER TABLE操作之前备份您的表和数据。
总之,ALTER关键字是MySQL中管理和维护数据库结构的强大工具之一,但应谨慎使用,特别是在生产环境中。
创建于删除数据库、表格
#create database `sql_t`;#创建数据库
show databases;#看看已有的database们
use `sql_t`;#你要用哪个数据库
create table `tb1_t`(
`student_id` INT PRIMARY KEY,#作为住建
`name` VARCHAR(20),#字符串,长度最大20
`major` VARCHAR(20)#字符串,长度最大20
);
DESCRIBE `tb1_t`;#看看表格
ALTER TABLE `tb1_t` ADD gpa decimal (3,2);#增加属性(列:alter table 表 add 列名 属性(详细三位数,其中小数点后占两位);
alter TABLE `TB1_T` DROP column gpa;#删除属性: alter table 表 drop column 列名;
DROP TABLE `tb1_t`;#删除表格
上一节进阶
预设值default
插入时,没写major,但又缺省值。
有人说,直接update不加where ,就直接更新,但我好像是安全更新模式?
14:27:31 update `TB1_T` SET `GPA`=4 Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column. To disable safe mode, toggle the option in Preferences -> SQL Editor and reconnect. 0.000 sec
这个错误信息表明,您正在尝试更新一个表(`TB1_T`)中的记录,但没有提供WHERE子句来指定要更新哪些特定的行。在MySQL的“安全更新模式”下,这是不允许的,因为这可能会导致意外更新表中的所有行,这可能是非常危险的操作。
错误信息中的关键部分是:
- **Error Code: 1175**: 表示您在没有使用关键字段的情况下尝试更新表。
- **You are using safe update mode**: 表示MySQL客户端正在安全更新模式下运行。
- **and you tried to update a table without a WHERE that uses a KEY column**: 表示更新操作没有包含WHERE子句,或者WHERE子句没有使用关键字段(通常是主键或索引)。
为了解决这个问题,您有以下几个选择:
1. **添加WHERE子句**:在您的UPDATE语句中添加一个WHERE子句,以指定要更新的特定行。例如:
```sql
UPDATE `TB1_T` SET `GPA`=4 WHERE `student_id`=1; -- 假设`student_id`是表中的一个关键字段
```
2. **关闭安全更新模式**:如果您确实需要更新表中的所有行,并且知道这样做的后果,您可以关闭安全更新模式。这通常在MySQL客户端的偏好设置中进行,具体步骤如下:
- 打开MySQL客户端的偏好设置(Preferences)。
- 导航到SQL编辑器(SQL Editor)部分。
- 取消选中“安全更新”(Safe Updates)选项。
- 重新连接到数据库。
请注意,关闭安全更新模式时要非常小心,因为不正确的UPDATE语句可能会更改或删除大量数据。
以下是添加了WHERE子句的示例UPDATE语句:
```sql
UPDATE `TB1_T` SET `GPA`=4 WHERE `student_id` = 123; -- 用实际的条件替换`student_id` = 123
```
请确保在执行更新操作时,您确切知道自己在做什么,并且已经备份了重要数据。
这多出的一行不是行
关于插入顺序
是默认按照主键排的,我随便插的
有条件的删除DELETE FROM 表 WHERE 条件
多种语句组合查看
查看+排序
降序
LIMIT 2只取前2名
这里是先排序,再取前两名
SB的SQL,不能先按照A排序取前n行,在按b∪排序吗!
在SQL查询中,LIMIT子句必须放在ORDER BY子句之后。这是因为LIMIT是用来限制查询结果的行数,而ORDER BY是用来指定结果集的排序顺序。如果LIMIT放在ORDER BY之前,SQL解释器将无法知道如何对结果进行排序,因为排序是在限制行数之前发生的。
where major in(期望列表)
艹
错误信息指出您的SQL语句存在语法错误。在SQL中,WHERE子句必须放在ORDER BY子句之前。您当前的查询中WHERE子句放在了ORDER BY子句之后,这是不正确的。 以下是修正后的SQL语句:
行吧,where-》order by-》limit,顺序不能颠倒
关掉安全更新
set sql_safe_updates =0;#关掉安全更新
这样这句话可以执行,本来报错呢
删除整个表格drop table 表
创玩表格想删怎么办,delete是删除表内东西,想删除整个表,用drop table表名
外键 foreign key(列名)reference 表(列) on delete cascade
注意括号不能少
#create database `sql_t`;#创建数据库
set sql_safe_updates =0;#关掉安全更新
show databases;#看看已有的database们
use `sql_t`;#你要用哪个数据库
create table `tb1_t`(
`student_id` INT PRIMARY KEY,#作为住建
`name` VARCHAR(20),#字符串,长度最大20
`major` VARCHAR(20)DEFAULT'MATH'#预设值为math
);
ALTER TABLE `tb1_t` ADD gpa decimal (3,2);#增加属性(列:alter table 表 add 列名 属性(详细三位数,其中小数点后占两位);
alter TABLE `TB1_T` DROP column gpa;#删除属性: alter table 表 drop column 列名;INSERT INTO `TB1_T`(GPA,STUDENT_ID) VALUES (1.2,11);
INSERT INTO `TB1_T` VALUES(9,'RKW','BASKETBALL',5);
INSERT INTO `TB1_T` VALUES(17,'SD','BASKETBALL',4.99);
INSERT INTO `TB1_T` VALUES(7,'SENDO','BASKETBALL',4.98);
INSERT INTO `TB1_T` VALUES(27,'conan','fooTBALL',5.98);
DELETE FROM `TB1_T` WHERE STUDENT_ID=17;
DESCRIBE `tb1_t`;#看看表格的各类属性
update `tb1_t`
set `name`='heye'
where `name`=null;
select * from `tb1_t`;
select * from `tb1_t` where major in ('football','basketball')ORDER BY MAJOR aSC,GPA DESC ;#看看表格的值
update `TB1_T`
SET `GPA`=4 WHERE STUDENT_ID<>1
;
DROP TABLE `tb1_t`;#删除表格