文章目录
1.配置
* 1 MySQL 服务启动
* 计算机管理—>服务—>MySQL—>手动开启关闭
* cmd—>services.msc 打开服务窗口
* 管理员身份打开cmd (win+R—>cmd—>shift+ctrl+enter)
```MySQL
* net start mysql 启动
* net stop mysql 关闭
```
* 2 MySQL 登录
```MySQL
* mysql -u root -p (本地服务器)
* mysql -h127.0.0.1 -u root -p
* mysql --host=127.0.0.1 --user=root --passport=root
```
0. 安装设置
重设密码
* alter user 'root'@'localhost' identified by 'new_password';
* flush privileges;
2. Basic Command 增删
* show databases; // 分号!
* create database <dbname>; // 创建数据库
* use <dbname>; // 连接数据库
* show tables; // 查看所有表的名称
* create table <table_name> // 创建表
(
列名a 数据类型(数据长度),
列名b 数据类型(数据长度),
列名c 数据类型(数据长度) //last没有逗号
);
-- 查看创建数据库/表的SQL语句 (即上述“创建表“的SQL)
* show create database db_name;
* show create table table_name;
* select * from <table_name>; // 查看表的内容
* insert into <table_name>(列名a,列名b) values(v1,v2); //表中插入数据
* drop database db_name; //删除数据库
* drop table table_name; //删除表
-- 查看表结构
* desc table_name;
3.数据类型
4. 约束分类
5. MySQL + VSCode
-
VScode 安装 MySQL、MySQL Syntax两个插件;
-
-
MySQL 点击+号—>localhost—>root—>password—>enter—>enter;
-
连接错误
- 解决办法:
. 进入mysql
. ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Password';
. flush privileges;
. vscode—> mysql —>refresh.
6. 查表SELECT FROM
6.1 条件查询
* select 列名1,列名2 form table_name where 限制条件; --列名顺序代表实际显示结果顺序
* select * from table; --查询所有的列, *——通配符
* 限制条件包括:> 、<、>=、<=、AND、OR、IN、NOT IN、LIKE+通配符_/%
* select name from table1 where age>20 OR age<30;
* select name from table1 where age IN (20,30); --查询age==20 || age==30的数据 not范围
* select name from table1 where phone LIKE '11__'; -- 下划线_代表 一个 未指定字符
* select name from table1 where phone LIKE '12%'; -- 百分号%代表 不定个 未指定字符
6.2 排序 ORDER BY
* select name from table1 order by; --默认升序
* select name from table1 order by ASC; --升序
* select name from table1 order by DESC; --降序
6.3 内置函数
- COUNT 函数可用于任何数据类型(因为它只是计数)
- SUM 、AVG 函数都只能对数字类数据类型做计算
- MAX 和 MIN 可用于数值、字符串或是日期时间数据类型
- 关键词AS可以给值重命名
6.4 子查询
“Tom” 所在部门做了几个工程
-
上面代码包含两个 SELECT 语句,第二个 SELECT 语句将返回一个集合的数据形式,然后被第一个 SELECT 语句用 in 进行判断。
-
HAVING 关键字可以的作用和 WHERE 是一样的,都是说明接下来要进行条件筛选操作。
-
区别在于 HAVING 用于对分组后的数据进行筛选
6.5 连接查询
- , where
- join on
内连接
笛卡尔积
select t1.name,t2.age from t1,t2
显示行数 = t1行数 * t2行数
外连接
7.删除修改
- 数据库\表
* drop database db_name; --=删除数据库
* db_name一般无法修改,create new database
重命名表
* rename TABLE old_name to new_name;
* alter TABLE old_name rename new_name;
* alter TABLE old_name rename to new_name;
删除表
* drop TABLE table_name;
- 表的一列
1.增加一列 ADD
* ALTER TABLE 表名字 ADD COLUMN 列名字 数据类型 约束;
或:
ALTER TABLE 表名字 ADD 列名字 数据类型 约束;
* 增加的列默认放在表的最右边,关键词 AFTER\FIRST-->可指定位置
* ALTER TABLE employee ADD weight INT(4) DEFAULT 120 AFTER age; --新增一列weight放在age列的后面
* ALTER TABLE employee ADD test INT(10) DEFAULT 11 FIRST; -- 新增一列放在第一列
2.删除一列 DROP
* ALTER TABLE 表名字 DROP COLUMN 列名字;
或:
ALTER TABLE 表名字 DROP 列名字;
3.修改一列 CHANGE (修改名称,数据类型,约束)
* ALTER TABLE 表名字 CHANGE 原列名 新列名 数据类型 约束;
* 数据类型不可忽略,否则change失败
* ALTER TABLE employee CHANGE height shengao INT(4) DEFAULT 170;
4.修改数据类型 MODIFY
* ALTER TABLE 表名字 MODIFY 列名字 新数据类型;
* 修改数据类型必须小心,可能会导致数据丢失
3.表中某个值(数据) UPDATE
1.修改表中某个值
* UPDATE 表名字 SET 列1=值1,列2=值2 WHERE 条件;
* UPDATE employee SET age=21,salary=2000 WHERE name='Tom';
* 不加where限制条件,则会修改全部列对应的值
2. 删除一行记录
* DELETE FROM 表名字 WHERE 条件;
* DELETE FROM employee where name='Tom';
8.数据库管理
- 索引:可以加快查询速度
- 视图:是一种虚拟存在的表
- 导入:从文件中导入数据到表
- 导出:从表中导出到文件中
- 备份:mysqldump 备份数据库到文件
- 恢复:从文件恢复数据库
8.1 索引
-
可加快查询速度
-
在使用 SELECT 语句查询的时候,语句中 WHERE 里面的条件,会自动判断有没有可用的索引。(即select语句无需添加新的关键词,自动判断)
-
具有唯一性的字段适合创建索引
-
当表中有大量记录时,若要对表进行查询,没有索引的情况是全表搜索:将所有记录一一取出,和查询条件进行对比,然后返回满足条件的记录。这样做会执行大量磁盘 I/O 操作,并花费大量数据库系统时间。
-
而如果在表中已建立索引,在索引中找到符合查询条件的索引值,通过索引值就可以快速找到表中的数据,可以大大加快查询速度。
1. 2种格式
* ALTER TABLE 表名字 ADD INDEX 索引名 (列名);
* CREATE INDEX 索引名 ON 表名字 (列名);
2.Example
* alter table employee add index idx_id(id); # 在employee表上的id列上建立名为idx_id的索引
* create index idx_name on employee (name); # 在employee表上的name列上建立名为idx_name的索引
8.2 视图
- 视图是从表中导出但是虚拟的表
- 数据库中只存放了视图的定义,而没有存放视图中的数据,这些数据存放在原来的表中;
- 使用视图查询数据时,数据库系统会从原来的表中取出对应的数据;
- 视图中的数据依赖于原来表中的数据,一旦表中数据发生改变,显示在视图中的数据也会发生改变;
- 在使用视图的时候,可以把它当作一张表。
1. 格式
* CREATE VIEW 视图名(列a,列b,列c) AS SELECT 列1,列2,列3 FROM 表名字;
2.Example
* create view v_emp(v_name,v_age) as select name,age from employee;
* select * from v_emp;
8.3 导入
- 导入纯文本文件
- 根据mysql的安全策略,操作之前,需先查看 secure_file_priv
- secure_file_priv值为 null, MYSQL服务禁止导入导出
- secure_file_priv值为 一目录名,MySQL服务只允许在这个目录中执行文件的导入和导出操作
- secure_file_priv值为 ‘’ ,(空,下图所示), 任何目录皆可执行文件的导入和导出操作
- windows 在my.ini文件中加入语句,即可修改
* show variables like '%secure%';
- 格式
* LOAD DATA INFILE '文件路径和文件名' INTO TABLE 表名字;
* load data infile 'C:/Users/Fernweh/Desktop/SQL6/in.txt' into table employee
fields terminated by',' -- 有分隔符的情况下
lines terminated by'\r\n'; --windows 回车换行-->CRLF;一定要加这句话!
* unix/ -->LF;则不用添加.
8.4 导出
1.格式
* SELECT 列1,列2 INTO OUTFILE '文件路径和文件名' FROM 表名字;
2. Example
* SELECT * INTO OUTFILE '/var/lib/mysql-files/out.txt' FROM employee;
*
8.4 备份
- 备份与导出的区别:导出的文件只是保存数据库中的数据;
- 而备份,则是把数据库的结构,包括数据、约束、索引、视图等全部另存为一个文件。
- mysqldump语句是在命令行中,not SQL语句,不加分号!
1.格式
* mysqldump -u root 数据库名>备份文件名; #备份整个数据库
* mysqldump -u root 数据库名 表名字>备份文件名; #备份整个表
2.Example
* mysqldump -u root -p mysql_shiyan > bak.sql
8.5 恢复
- 用备份文件恢复数据库
1.SQL语句
* use db_name;
* source C:/Users/Fernweh/Desktop/bak.sql;
2.命令行
* mysql -u root -p db_name < bak.sql
Problems
注意
:
- 如您发现本文档中有错误的地方,
- 或者您发现本文档中引用了他人的资料而未进行说明时,请联系我进行更正。
- 转载或使用本文档时,请作说明。
- 非常感谢
:)