启动、关闭MySQL服务:
net stop mysql;
net start mysql;
查看mysql版本:
mysql -V
登录:
mysql -uroot -p密码;
退出:
exit;
查看mysql中有哪些数据库:
show databases;
使用某个数据库:
use 数据库名;
创建数据库:
create datebase 数据库名;
删除数据库:
drop database 数据库名;
查看某个数据库下有哪些表:
show tables;
查看mysql数据库的版本号:
select version();
查看当前使用的是哪个数据库?
select database();
导入一下提前准备好的数据:
mysql> source D:\course\03-MySQL\document\bjpowernode.sql
注意:路径中不要有中文!!!!
不看表中的数据,只看表的结构,有一个命令:
desc 表名;
(describe的缩写;)
查看表的创建语句
show create table 表名;
Like 可以实现模糊查询,
%匹配任意字符出现的个数
_只匹配一个字符
Like 中的表达式必须放到单引号中 双引号中,以下写法是错误的:
简单表定义
CREATE TABLE R( );
复制表
create table 新表名 as
select ...
from ...
删除表
DROP TABLE R;
更改关系模式
ALTER TABLE R Add 列名 数据类型 [NOT] NULL
ALTER TABLE R Drop 列名
默认值
系统默认的缺省值通常为NULL, 可以自定义,在定义表时在属性类型后加: Default 值
例 gender CHAR(1) DEFAULT ’?’;
常见的约束
a) 非空约束, not null
b) 唯一约束, unique
c) 主键约束, primary key
d) 外键约束, foreign key
SQL语言有两种说明主键的方式。
方式1:Create Table语句中,某属性说明之后加Primary Key
方式2:属性表之后,加Primary Key(属性1,属性2,…)
若主键有多个属性,则只能用方式2。
SQL的简单查询
SELECT [ ALL | DISTINCT ] select-list
FROM R
[ WHERE cond ]
group by [分组]
having [过滤分组后的数据,不可以单独的出现]
[ ORDER BY { expression | integer } [ ASC | DESC ],… ]
其中:
select-list :
* | { column-name | expression } [ AS alias-name ], ...
所有SQL语句的关键词、表名、列名大小写无关。
SQL语句可多行书写。
SQL语句用分号(英文)结尾。
SQL中的投影
SELECT子句如何构成?
* 表示所有属性,按缺省次序排列。
SELECT * FROM Movie;
可投影到若干属性:
SELECT title,length
FROM Movie;
AS 别名(改名运算,改变列名,AS可省略)
SELECT title AS name, length AS duration
FROM Movie;
表达式
SELECT title AS name, length*0.016667 AS lengthInHours
FROM Movie;
常量也可作为一列
SELECT title, length*0.016667 AS length, ‘hrs.' AS inHours
FROM Movie;
SQL中的选择
WHERE子句如何确定条件condition?
运算对象:属性、常量、别名
算术运算符: + - * /
比较运算符: = <> > >= < <= IS [NOT] NULL
逻辑运算符:NOT AND OR
字符串模式匹配LIKE
s [NOT] LIKE p, 其中s是一个字符串,p是包含%或下划线的字符串模式。
匹配规则:
p中普通字符只和s中完全相同的字符匹配;
%可与s中0个或多个字符匹配;
一个下划线可与s中一个任意字符(或汉字)匹配。
空值运算的规则
⒈对NULL和任何值(包括另一个NULL值)进行算术运算(×或÷),其结果仍然是空值。
⒉当使用比较运算符(=或>),比较NULL值和任意值(包括另一个NULL值),结果都是UNKNOWN值。
⒊正确判定x的值是否为NULL的方式是用表达式x is NULL或x is not NULL表示
Unknown值作为一个逻辑值,与True和False构成三值逻辑。
逻辑运算:NOT非、AND且、OR或
设:True=1;False=0;Unknown=0.5
那么 a AND b = Min(a,b)
a OR b = Max(a,b)
NOT a = 1 - a
输出的排序
ASC表示升序(缺省);DESC表示降序。
SELECT *
FROM Movie
WHERE studioName='Disney' AND year=1990
ORDER BY length DESC,title;
查询中并、交、差运算
A∪B = A union B;
A∩B 等价于 A = ANY(B) 等价于 A IN B;
A – B 等价于 A<>ALL(B) 等价于 A NOT IN B;
关系的条件表达式
[NOT] Exists (Subquery):当且仅当子查询结果非空,条件为真。
expression compare ANY (Subquery):比较子查询的结果的任意一个值。
expression compare ALL (Subquery):比较子查询结果的所有的值。
expression [NOT] IN (Subquery):当且仅当表达式的值出现在子查询的结果集中,条件为真。
CROSS JOIN就是笛卡尔积的SQL的表示形式,又称为交叉连接。
R1 JOIN R2 ON cond表示R1 condR2,表示为θ连接
等价于From R1, R2 Where cond
自然连接 R1 NATURAL JOIN R2
消除重复 Select distinct …
分组Group By :根据一列或几列的值把元组分成若干组,有相同分组值的元组作为一组,每个组再分别进行聚合运算。
在包含聚合运算的Select子句中,只有在Group By子句中出现的属性才能在Select子句中以非聚合形式出现。
Having子句 在分组聚合之后按某条件过滤分组,使用Having子句确定条件。
Where子句中关于常量的条件可以Having子句条件替代。
反之:Having子句中有关聚合变量的条件不能用Where条件替代。
插入 INSERT INTO R(A1,A2,…,An) VALUES (V1,V2,…,Vn);
若(A1,A2,…,An)不是R的所有属性,则未列出的属性取其缺省值。
若(A1,A2,…,An)省略,则(V1,V2,…,Vn)按属性的缺省次序排列。
另一种Insert语句:
INSERT INTO R(A1,A2,…, An)
SELECT B1,B2,…,Bn
FROM ...
WHERE ...
删除 DELETE FROM R WHERE cond;
关系R中满足条件cond的记录将被删除。条件省略将删除所有记录。
修改 UPDATE R SET A1=V1, A2=V2, …, An=Vn WHERE cond;
满足条件cond的每个记录的A1属性值改为V1, A2属性值改为V2, …
条件省略将修改所有记录。
CREATE USER 'username'@'host' IDENTIFIED BY 'password';
说明:
username:你将创建的用户名
host:指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost,如果想让该用户可以从任意远程主机登陆,可以使用通配符%
password:该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器
例子:
CREATE USER 'dog'@'localhost' IDENTIFIED BY '123456';
CREATE USER 'pig'@'192.168.1.101_' IDENDIFIED BY '123456';
CREATE USER 'pig'@'%' IDENTIFIED BY '123456';
CREATE USER 'pig'@'%' IDENTIFIED BY '';
CREATE USER 'pig'@'%';
GRANT privileges ON databasename.tablename TO 'username'@'host'
说明:
privileges:用户的操作权限,如SELECT,INSERT,UPDATE等,如果要授予所的权限则使用ALL
databasename:数据库名
tablename:表名,如果要授予该用户对所有数据库和表的相应操作权限则可用*表示,如*.*
例子:
GRANT SELECT, INSERT ON test.user TO 'pig'@'%';
GRANT ALL ON *.* TO 'pig'@'%';
GRANT ALL ON maindataplus.* TO 'pig'@'%';
注意:
用以上命令授权的用户不能给其它用户授权,如果想让该用户可以授权,用以下命令:
GRANT privileges ON databasename.tablename TO 'username'@'host' WITH GRANT OPTION;
SET PASSWORD FOR 'username'@'host' = PASSWORD('newpassword');
如果是当前登陆用户用:
SET PASSWORD = PASSWORD("newpassword");
SET PASSWORD FOR 'pig'@'%' = PASSWORD("123456");
REVOKE privilege ON databasename.tablename FROM 'username'@'host';
## 说明:
privilege, databasename, tablename:同授权部分
### 例子:
```html
REVOKE SELECT ON *.* FROM 'pig'@'%';
```
### 注意:
假如你在给用户`'pig'@'%'`授权的时候是这样的(或类似的):`GRANT SELECT ON test.user TO 'pig'@'%'`,则在使用`REVOKE SELECT ON *.* FROM 'pig'@'%';`命令并不能撤销该用户对test[数据](https://so.csdn.net/so/search?q=数据&spm=1001.2101.3001.7020)库中user表的`SELECT` 操作。相反,如果授权使用的是`GRANT SELECT ON *.* TO 'pig'@'%';`则`REVOKE SELECT ON test.user FROM 'pig'@'%';`命令也不能撤销该用户对test数据库中user表的`Select`权限。
具体信息可以用命令`SHOW GRANTS FOR 'pig'@'%';` 查看。
DROP USER 'username'@'host';
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~