Mysql语句+Linux指令一步入门

版权声明:之江学院 黄日超 https://blog.csdn.net/weixin_41474319/article/details/82865470

MySQL基础

登入MySQL

mysql -h 127.0.0.1 -u root -p 
分别表示需要登入的主机名 用户名 以密码登入

基于Navicat for Mac 实操MySqL

重要概念

进入Navicat后,会要求连接到一个已有的服务器,可以连接多个.默认连接到mysql服务器.服务器内一个独立的database就是一个模式

navicat快捷键

cmd+o 打开table
cmd+1 打开服务器目录
cmd+2 打开table object ddl
cmd++ 添加一行记录
cmd+- 删除一行记录

经验

  1. CREATE TABLE table_name()括号内最后一列column不可逗号结尾,必须直接挨着);
  2. 如下图
    image
  3. cmd+2快速查看表的对象信息,包括ddl里的源码与注释
  4. 如下图
    image
  5. 约束能保证数据库完整性,即不会出现错误数据.比如某个记录的PRIMARY_KEY居然是NULL

先修知识

计算机安全
  1. 保密性:权限分配
  2. 在给定威胁模型下,设计不同的安全方案
  3. 确定who are you what can you do
  4. An easy way:you userId and password is week under forced attacked.

linux指令集合

  1. unix 微软Dos+界面=windows

  2. unix(收费)→linux(免费版unix )→Android

  3. vim 可自成长的文本编辑器

终端窗口:
放大字体 control +
缩小字体 control -
Linux 文件系统(路径)
/ 根目录下
bin home usr
路径:描述文件所在的位置 相对,绝对
搜索指令:
grep 对文本进行模式查找,即正则表达式
-n 显示匹配行以及行号
-v 显示不包括匹配文本的所有行 求反
-i 忽略大小写
grep as ./123.txt 当前目录的123.txt文件中搜索 as 文本 并显示行号
grep -in “hello python” 123.txt 在123.txt文件中找hello python 语句

	模式查找:
		^a 行首模式,搜索以a开头的行
		ke$行尾模式   	搜索以ke结尾的行

特殊目录:

/	如:/home/zhizhen   第一个/是根目录 第二个/只是  目录分隔符   bin lib usr home 等归 根目录所有 全部/开头
cd ~	 返回当前用户在home里的主目录(/hoem/zhizhen)
cd . . 返回当前目录的上一级
.   当前目录  ./a.out 第一个点表示运行当前目录里的程序 不要默认地去 根目录下的bin里找程序

特殊文件命令:

touch filename 修改文件属性  可以用来灵活创建新文件
rm      filename 删除文件,不经回收站 , 只能硬盘拆掉,挂载到其他电脑上进行扫描恢复。
cp src dest 复制文件   
		cp code/a.c code.c 把当前目录下的a.c复制并保存为code.c 存在当前目录
		cp code/a.c . 	最后一处是.	把code里的a.c文件复制到当前目录下
mv src dest 移动文件   
		可修改名字,移动到当前目录的话,就是重命名

目录相关命令:

mkdir dir 创建一个空目录
	-p  创建连续的多层目录
rmdir     只能删除空目录   把Linux下的一切视作文件
rm -rf  删任意目录
cp -frp  复制目录 

网络相关命令:

ifconfig 网卡配置信息 
		ifconfig eth0(网卡编号) 192.168.1.8  配置网段
	ifconfig eht0 netmask(子网掩码) 255.255.255.0
ping ip 测试网络是否连通
ping 127.0.0.1 	ping本机地址,通过则说明网卡工作正常
ping www.baidu.com 测试外网

ssh user@服务器ip 加密远程登录服务器
telnet 服务器ip 内网登录专用 ,采用明码不安全

scp 双向安全复制
	scp -P port 01.py [email protected]:Desktop/01.py  
	把本地的01.py文件远程传送到ubuntu zhizhen用户的桌面上
	scp -P port [email protected]:Desktop/01.py 01.py 
	把zhizhen用户桌面上的01.py文件远程复制到本地

超级权限相关命令:

sudo 或者 su root 
reboot 重启
init 0   关机
sudo apt-get update 更新软件源 163
sudo apt-get install 安装
sudo apt-get upgrade 更新操作系统
sudo apt-get remove 卸载
sudo passwd zhizhen 修改指定用户的密码
sudo passwd root 为root用户设置密码可以开启root权限,仅第一次激活
su root 进入 exit退出

其他相关命令:

chmod 修改文件权限 
chmod mmm filename 
其中 m=r4+w2+x1 所以mmm=777满权限  

chmod 754 a.c     // 使 a.c文件 给自己满权限 给同部门的人能读能执行 给其他人只能读
	ls -l 第一列信息包括文件类型 权限
		文件类型
			- 普通文件
			d 目录文件
			l  快捷方式
		权限:
			r 读 w 写 x 执行  打开目录要有执行权限
			[1:3] 文件的所有者的权限
			[4:6] 文件的所有者的同部门用户的权限
			[7:9] 同机器上的其他用户的权限
		例如:
			drwxr-xr-x
ps -aux 推荐ps -au 查看当前用户使用的带终端的程序 
ln:	创硬盘链接文件(快捷方式) 若源文件被删除,链接文件不影响使用 
	ln code.c(源文件) link_code.c(快捷方式)
ln -s 源文件绝对路径 新文件: 类似于windows下的快捷方式 软链接,源文件被删,链接文件也会损坏,不可访问。
ln : 硬链接 ,相当于复制 

htop 软件:更详细的查看 cpu 与进程界面

Linux 中 文件数据与文件名是分开的,软连接空间内的数据时文件名地址,硬连接存储空间内的地址

kill - 9 进程代号
	杀命令
find -name  “*.py” 当前目录下查找所有.py文件
与tree 显示文件夹树状图命令 配合
tar :压缩 解压文件 
	-zcvf 创建压缩包 code.tar.gz code
	-zxvf 解压压缩包 code.tar.gz -C path

find path -name filename
	-name 以文件名为条件查找文件
	 path     默认当前目录

查看文件的相关命令
	cat 显示完整文件 
	head 显示文件开头部分
	more 只显示一屏幕 用回车或空格翻页 最佳 

Linux 常用terminal命令

*  ? 通配符 万能搭配符
	rm *.c   // 删除所有.c文件 注意:*可以匹配任意字符
	em 0?.c // 删除所有0开头的.c文件 注意: ?一次只能匹配一个符号

重定向

echo 在终端中显示参数 文本
	echo hello 相当于 echo=“hello” 	且 print(echo)	
>	重定向 把某个命令的本应该在终端上显示的执行结果 写入到制定文件中,文件存在则清空(动态),不存在则创建
	echo hello > a
	cat a
>>	追加式重定向 文件如果存在,则追加式写入
	例如  ls >> test
	tree >> test
	cat test

管道 |

LINUX允许将一个命令的输出 通过管道 做另外一个命令的输入(工作范围)
查询目录下的Do开头的文件
ls -an | grep -i do  只输出想要的内容
man   查询帮助手册
	1 系统命令
	2 系统函数
	3 C语言std库函数

ctrl+alt+t 快速打开终端
shift +Ctrl+t 快速打开新终端页
tab 自动补全路径 文件名 命令名
⬆️⤵️ 调出命令记录
clear 清理屏幕 ctrl+l
pwd	显示当前所在路径
cd  返回用户层目录
ls	显示当前目录有哪些文件
ls -a 显示隐藏文件
ls -l  显示详细信息

关机 shutdown

shutdown -C 不关机
shutdoen -r -now 立即重启
shutdown +10 十分钟后关机
shutdown 20:25今晚20:25关机

vim文本编辑器

	1.键盘操作
	2.支持编程扩展(二次改造,自添加功能与插件)	

	基本用法:
		1、进入vim   
			vi filename 此时文档只能查找或修改
		2、编辑文档
			通过按键 i 进入插入模式
		3、先esc退出插入模式,然后原地输入大写ZZ(ctrl+zz)
							或者:wq 保持并退出 
		4、vim 三大模式:
			正常模式: vim默认模式	按键esc
			替换模式:R				
			插入模式:可以尽情编辑文档	按键i
				ctrl+i : tab
				ctrl+m:enter
				ctrl+z 保持退出
				ctrl+x 编译并执行
				ctrl+p\n 自动补全代码
				crtl+c = Esc
				i: 向前插入
				I:ctrl+i 光标跳到行首,再向前插入
				a:向前插入
				A:ctrl+a 光标跳到行尾,再向前插入
				o:在下一行新建一个空白行再进入插入模式
				O:在上一行新建一个空白行再进入插入模式
			替换功能	
				r :   原地替换一个字符
				cw/ce :原地删除一个单词,等待输入 ,替换一个单词
			
			撤销功能:
				u : 返回上一次操作,撤销一次操作 
				ctrl+r 撤销撤销操作 维持原操作
			删除操作:
				x  删除一个字符
				5x 删除5个字符
				dw 删除一个单词,不包括空格
				de 删除一个单词,包括空格
				d$ 删除到行尾
				dd 删除整行
				10dd 删除10行
			复制操作
				yy 复制
				10yy 复制10行
				p 粘贴到光标后
			移动操作:
				删加贴, x+p,删除的内容都在缓冲区中,配合p粘贴,可以达到移动的功能
		
			光标的移动: 
				h j k l 左 下 上 右
				shift+g 文尾
				gg         文头
				10G 或 10gg 跳到第十行  精准跳转!
				10+回车 原地向下跳十行
				vi fliename +10 打开后光标停在第十行
			行底模式:执行vim功能	按键 ‘:’
				 :wq 保持并退出
				:!+系统命令   临时用下系统命令 按回车返回vim
				:w 立即写入文件,ctrl+s
				:  w fliename 另存为
				:  x 保存并退出
				:X 加密并退出
				:set nu 显示行号 临时有效
				:set nonu 不显示行号 临时有效

ubuntu 自带手册vimtutor

图灵 图灵机 AI

冯诺依曼体系
CPU分 运算器,控制器,独立存储器(内存,DDR或SDR)
哈佛结构
CPU

DBS = DB + DBMS + DBA

正则匹配表达式

匹配st开头

select name from table where name regexp '^st'

匹配ok结尾

select name from table where name regexp 'ok$'

匹配包含mar

select name from table where name regexp 'mar'

匹配元音开头,ok结尾

select name from table where name regexp '^[aeiou] | ok$ '

模式

外模式(程序为主):用户模式,用户能够看见和使用的局部data
模式(数据+程序):一个DB只允许一个模式
内模式(数据为主:物理存储结构,存储方式的描述
外模式/模式映射器:当模式改变时,对映射器做出相应修改,可使外模式不变,保证数据与程序的逻辑独立性
模式/内模式映射器:当模式改变时,对映射器修改,可使模式不变,保证数据与程序的物理独立性

关系概念

一个关系就是一张二维表
一个字段就是一个column
一个元组就是一个记录行
一个熟悉就是一行column 抽象为类型,具象为数值
域,变化范围{男,女}

关系范式

1NF column不可重复,去除冗余项
2NF 非key_column必须全部依赖key_column
3NF 在1NF与2NF的基础上,删除传递依赖

Oracle

并行处理,实时性,分布式关系数据库
索引-服务器

存储过程
是预编译SQL语句的集合

graph LR
    A(DB)-->|存储|B(Data与对象)
    B-->视图,索引,存储过程,触发器
F(减少冗余,独立易扩充,数据共享)

D(mdf主文件)-->C(ndf附文件)
C-->日志文件ldf

A-->F
D-->F

SQL基础语句

A database is formed by several related tables

1.什么是表

A table is formed by columns critical and rows much more

2.什么是查询与修改

An SQL query means DBMS how to filter and sort the useful data and confirm the key data you want

An query also means how DBMS to alter a table or schema

Holding on ahead ,if you happen to be familiar with SQL already.

I really hope you will be able to have a strong fundation for using SQL in your own project and beyond

3.表结构

Column seens like attribute as Table seens like Class,meanwhile,members of row we can always called instance

TABLE : Movies

Id Title Director Year
01 Toy Story John 1995
02 Toy Story2 John 1997

TABLE : Boxoffice

Id Local_sales Inter_sales Year
01 35550001 43213123 1995
02 54020312 56043312 1997

4.基础语法

SQL大小写不敏感,但是为了区分SQL语句与内容,SQL指令统一大写
查询的原理是依据SQL语句提取原表的内容重写生成一张副表,语句以分号结尾,一次查询只能用一次分号就够.

4.1 查询全体column

SELECT * FROM movies

4.2 查询01号电影的title,director

SELECT title,director FROM movies
WHERE id = 01

4.3 WHERE约束关系大全

  • =,!=,<,> 匹配数字

  • BETWEEN … AND … 匹配数字或字符范围

  • =,!= 匹配字符串

  • LIKE NOT LIKE 匹配正则字符串

  • IS NULL,IS NOT NULL 匹配非空元素

  • IN,NOT IN 匹配字符串列表 {“A”,“B”,“C”}

  • WHERE后面只能跟一个column的约束关系,有时不够用
    AND/OR 补充额外column的约束关系,最终定下集合

  • SQL语句的字符串元素们必须用"“引起,SQl语句无论是否字符串都不用”",避免二者混淆

4.4 "字符串"的通配符,

  • "%AT%“可匹配"SAT”,“ATS”,“SATS”,"SSATSS"等
  • "AT"可匹配"SAT"等,必须有字符替代

5.去重复 DISTINCT

SELECT DISTINCT director FROM table
  • DISTINCT column1,column2 则这两个属性为一组,两个属性完全相同才算重复,否则不丢弃

6.选中后排序

//选中属性列并去重
SELECT DISTINCT column1  
//要操作的表
FROM table
//根据column2中满足条件的元素,选中整体表范围
WHERE column2 like "John%"
    AND/OR
//根据column3中元素的顺序对整个表作排序
ORDER BY column3 ASC/DESC
ASC 自然排序
DESC 大数在前倒序
//显示个数与初始位置,针对原始范围来说
LIMIT 5 OFFSET 5 
//向下偏移OFFSET不写,默认为偏移量为0

7.连接两张表

7.1 选中来自两张表的columns

SELECT column1,column2 FROM table1
//若非对称则保留右边的表的全部元素,左边匹配不上就丢弃
RIGHT JOIN table2
//匹配两表的主键与外键
    ON table1.key_column = table2.key_column
//后续
WHERE 
 AND/OR
ORDER BY xxx ASC/DESC
LIMIT x OFFSET y
graph LR
选中并去重-->B(确定非对称关系)
B-->C(两表主键匹配)
C-->D(约束范围)
D-->E(正反排序)
E-->F(控制显示)
graph LR
A(SELECT DISTINCT column1,cloumn2)-->|FROM table|B(INNER JOIN table2)
B-->C(ON table1.key_column = table2.key_column)
C-->D(WHERE colunm3 LIKE "")
D-->E(ORDER ON column4 ASC/DESC)
E-->F(LIMIT 5 OFFSET 5)

7.表达式

SQL支持从现有属性里通过表达式算术计算生成新的属性
  • SELECT (column1+column2)/1000 AS column3
  • WHERE (column1+column2) < 1000

7.1 聚合表达(Compute聚合计算)

提取出需要的元素并创建为新的属性
  • COUNT(column1) AS column_count //属性内元素个数
  • MAX(column1) AS column_max //属性内元素的最大值
  • AVG(column1) AS column_avg //属性内元素的平均自
  • SUM(column1) AS column_sum //属性内元素的总和

8.分组聚合

GROUP BY column1 整张表都会根据column1里相同的元素划分到同一组
HAVING column2 LIKE "" 每组再根据HAVING的约束关系选定范围
  • GROUP一旦分组,SQL语句会分别对每组起作用,如最大,最小,平均,总和,个数
  • 故GROUP不是DISTINCT,DISTINCT是横向分组,且组内都相同才算重复
  • GROUP是column内相同的为一组

9.表结构 列们有哪些值

表结构,就是表的每一列可以包含的DATATYPE

9.1 行操作

删除行
  • DELETE FROM table WHERE column LIKE “”

    添加行 默认加到最后一行

  • INSERT INTO table
    (column1,column2,)
    VALUES (1,9.9,2831/100)

    更改行

  • UPDATE table SET(column1 = x,column2 = xx) WHERE

  • 若无WHERE则自动更改全部行

10.表模式

创建表,定义表模式,有哪些列
即每列的列名,数据结构,约束关系,DEFAULT值

10.1 创建表

CREATE TABLE table( column DataType TableConstrait DEFAULT values, another_column,)

10.2 列的约束类别(键级别)

PRIMARY KEY :主键
FOREIGN KEY :外键
AUTOINCREMENT :自动填充并递增
UNIQUE:唯一,不可重复
NOT NULL:不可为NULL
CHECK(表达式): 一个列先天性的范围约束或特点前缀\

10.3 DataType类别

graph LR
    String-->TEXT
    int-->INTEGER
    float-->FLOAT
    char-->CHARACTER
    chars-->VARCHAR
    
修改表ALTER TABLE table
  • INSERT INTO table只能添加一行,不能算修改表模式,更不能修改表关系
  • ALTER TABLE 会修改表模式
    • 对表增 ALTER TABLE table add column datatype
    • 对表删 ALTER TABLE table DROP column 因为必须选定column对象,所以不必担心把整张表都删了
    • 重命名 ALTER TABLE table RENAME TO new_table_name

阶段总结

For each Database has its own set of features and optimizations

SQL Server详解

创建数据库
create database mrkj
on // 定义主文件
(name = mrdat,
filename = 'G:\sql\mrkj.mdf',
size = 10,
maxsize = 100,
filegrowth = 5)
log on //定义日志文件
(name = mrlog,
filename = 'G:\sql\mrlog.ldf',
size = 8mb,
maxsize = 50mb,
filegrowth = 8mb)

修改数据库

将mrkj添加到MinRi数据库中
ALTER DATABASE MingRi
ADD FILE
(
NAME = mrkj
filename = 'G:\mrkj.ndf',
size = 10MB,
maxsize = 100MB,
filegrowth = 2MB
)
使用指令(存储过程)sp_renamedb修改数据库名
exec sp_renamedb 'mr','mrsoft'

删除数据库

系统db不可删,每次删完必须立即更新master
不可删正在运行的,
use db_student
drop database db_student
报错,请在别的数据库里删除db_student
use db_2018
go
drop database db_student

创建表

用户自定义数据类型,供创建表与添加列时使用
use db_sharp
//创建自定义数据类型
exec sp_addtype postcode,'char(8)','not null'
//删除数据类型
exec sp_droptype postcode
完整性 主键为not null

创建视图

把行操作或表操作修改过的表,用view以副表形式呈现出来
在正常的sql语句前加
USE db_2018
GO
CREATE VIEW view1
AS
SELECT ,,,
通过视图删除
use db_2018
go
drop view v1
go
通过视图删除数据
use db_2018
go
delete v1
where name = "zhang"
select * from v1
go

嵌套查询 WHERE语句的拓展

若column2只在table2里,可以简写成嵌套查询

SELECT column1,column2 FROM table1
RIGHT JOIN table2
    ON table1.key_column = table2.key_column
WHERE column2 > 90

若column2即在table1里,也在table2里,可以简写成嵌套查询

SELECT column1 FROM table1
WHERE column2=(SELECT column2 FROM table2 WHERE column2 > 90)
RIGHT JOIN的简写
SELECT * FROM table1
WHERE column2 IN(SELECT column2 FROM table2)
AVG(age) AS some 的简写
SELECT * FROM student
WHERE age < SOME
(SELECT AVG(age) FROM student)
UNION 将两表中根据同名column取得的列,合并到一起,以副表形式生成
默认UNION DISTINCT,有需要时可用UNION ALL

视图

  • 视图不占存储空间,只是一个副表,不可有排序,计算插入操作
  • 水平视图取行:creat view v1 as select * from table where (id = ‘0903’)
  • 投影视图取列:
  • 创建联合视图

索引

  • 索引是DB对象之一.为了加速对表中数据行的检索而创建的一种分散的存储结构.即加速检索记录
  • 在表外针对性建立一张针对该表的索引页面
create unique clustered index book_id_index
on book(book_id asc)
with
fillfactor = 50

存储过程

预先编译好的,存在sql server服务器上与特色DB向关联的SQL代码集合

  • 可以重复使用,减少我们的工作量
  • 提高性能,提前编译好了,直接用
  • 可以防止SQL注入,建议Grant,Deny,Revoke,权限在存储过程里使用
create proc spAAStudents
as
begin transaction
insert into . .students
value @name

if 
begin
rollback 

commit transaction

建立一个学生选课管理数据库。
表:学生表、班级表、教师表、课程表、学生选课表。
逻辑关系:每个学生有一个班级;每个班级对应一个班主任教师;每个教师只能当一个班的班主任

CREATE DATABASE stu_mangaer
USE stu_manager;

CREATE TABLE stu_tbl
(
    ID VARCHAR(255) PRIMARY KEY,
    NAME VARCHAR(10) NOT NULL,
    SEX VARCHAR(10),
    BIRTHDAY DADTE,
    CLASS_ID VARCHAR(255)
)

INSERT INTO STU_TBL
(ID,NAME,SEX,BIRTHDAY,CLASS_ID)
VALUES('121','HUANG','男',1995-07-18,'201320090109')


/* 建立数据库 */  
CREATE DATABASE STUDENT_MANAGER;  
USE STUDENT_MANAGER;  
  
/***** 建立student表 *****/
CREATE TABLE STUDENT_TBL  
(  
   STUDENT_ID         VARCHAR(255) PRIMARY KEY,  
   STUDENT_NAME       VARCHAR(10) NOT NULL,  
   STUDENT_SEX        VARCHAR(10),  
   STUDENT_BIRTHDAY   DATE,  
   CLASS_ID           VARCHAR(255)  
);  


  
/*插入学生数据*/  
INSERT INTO STUDENT_TBL (STUDENT_ID,  
                         STUDENT_NAME,  
                         STUDENT_SEX,  
                         STUDENT_BIRTHDAY,  
                         CLASS_ID)  
  VALUES   (123456,  
            '某某某',  
            '女',  
            '1980-08-01',  
            121546  
            )  
            

找出最晚入职的员工的所有信息

SELECT * FROM employees
WHERE hire_date = (SELECT max(hire_date) FROM employees)

可见 SELECT max(hire_date) FROM employees 本身就是一个表达式,等价于一个hire_date数据

找出倒数第三晚的员工

SELECT * FROM employees
ORDER BY hire_date DESC
LIMIT 2,1;

LIMIT 2,1表示先向下偏移2个元素,即从第三个元素开始显示,只显示一个元素.

事务

insert,update,delete 操作的数据量大时,需要用到事务transaction

原子性atomicity,一致性consistence,隔离性isolation,持久性durability
  • A:所有操作要么全部完成,要么回滚到事务前
  • C:保证DB的完整性,输入的类型要对,数据要合理,不能有null的地方一定不能null,比如key
  • I:

猜你喜欢

转载自blog.csdn.net/weixin_41474319/article/details/82865470
今日推荐