/* 创建数据库testone */
create database testone;
/* 查询数据库testone */
show databases;
/* 选择数据库testone */
use testone;
/* 删除数据库testone */
drop database testone;
创建表
create table table_name (column_name column_type);
查看表结构
desc table_name;
查看所有表名
show tables;
插入数据
insert into 表名(列名1,列名2,…) values (值1,值2,…);
查询表中所有列的数据
select * from 表名;
删除表
drop table 表名;
数据库实体在系统中的位置:/var/lib/mysql/
表中每一列都新增数据
insert into 表名 values (值1,值2,…);
表中部分列新增数据
insert into 表名(列名1,列名2,…) values (值1,值2,…);
update 表名 set 列名1=值A,列名2=值B where 条件;
MySQL修改数据库管理员root密码语句
update mysql.user set authentication_string=password(“newpassword”) where user=”root”;
delete from table_name 表名 where 条件;
查询表中所有列数据
select * from 表名;
查询表中部分列数据
select 列名1,列名2,… from 表名;
操作符 | 描述 | 实例 |
---|---|---|
= | 等号,检测两个值是否相等,如果相等返回true | (A = B) 返回false。 |
<>, != | 不等于,检测两个值是否相等,如果不相等返回true | (A != B) 返回 true。 |
> | 大于号,检测左边的值是否大于右边的值, 如果左边的值大于右边的值返回true | (A > B) 返回false。 |
< | 小于号,检测左边的值是否小于右边的值, 如果左边的值小于右边的值返回true | (A < B) 返回 true。 |
>= | 大于等于号,检测左边的值是否大于或等于右边的值, 如果左边的值大于或等于右边的值返回true | (A >= B) 返回false。 |
<= | 小于等于号,检测左边的值是否小于或等于右边的值, 如果左边的值小于或等于右边的值返回true | (A <= B) 返回 true。 |
select * from 表名 where 列1=值1;
select * from 表名 where 列1=值1 and 列2=值2;
select * from 表名 where 列1=值1 or 列2=值2;
select * from Student where 列1 BETWEEN 值1 and 值2;
select * from Student where Sid in (值1,值2,值3);
select * from Student where Sname like ‘关键字%’;
% 为任意字符
用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。多个 SELECT 语句会删除重复的数据。
SELECT expression1, expression2, … expression_n
FROM tables
[WHERE conditions]
UNION [ALL]
SELECT expression1, expression2, … expression_n
FROM tables
[WHERE conditions];
其中选项 ALL 为包含重复数据,union 默认是去重复的。
select * from 表名 order by 列名;
默认是asc升序;降序是desc;
SELECT column_name, function(column_name)
FROM table_name
WHERE column_name 运算符 value
GROUP BY column_name;
INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。
select * from 表名 where 列名 is null;
select * from 表名 where 列名 is not null;
第7步:SELECT 查询列表
第1步:FROM 表名
第2步:JOIN 关联表
第3步:ON 关联条件
第4步:WHERE 筛选条件
第5步:GROUP BY 分组字段
第6步:HAVING 分组后筛选条件
第8步:ORDER BY 排序字段
第9步:LIMIT 输出限制
Global level:所有库,所有表的权限
Database level:某个数据库中所有表的权限
Table level:某个数据库中某个表的权限
Column level:表中某个字段的权限
grant 权限列表 on 库名.表名 to ‘用户名’@’客户端主机’ [identified by ‘密码’ with option参数];
all为所有权限,select为查询权限,update为更新权限,多个权限间用英文逗号,隔开
库名.表名
*.*:所有库所有表
库名.*:某个库下所有表
库名.表名:某个库下某个表
授予某个用户某些功能某个字段权限如下
grant SELECT (id), INSERT (name,age) ON mydb.mytbl to ‘用户名’@’主机地址’ identified by ‘登录密码’;
客户端主机
% 所有主机
192.168.2.% 即192.168.2网段所有主机
192.168.2.3 指定主机
localhost 指定主机,特指本机
with option
GRANT OPTION,用户被授予了某个权限,那么默认情况下,该用户是不能把这个权限授予给其他人的。但是可以使用 WITH GRANT OPTION 这个子句来让该用户可以将权限再授予给其他人。例如:grant SELECT (id), INSERT (name,age) ON mydb.mytbl to ‘用户名’@’主机地址’ identified by ‘登录密码’ with grant option;
show grants;
show grants for zhangsan@’192.168.174.132′;
REVOKE 权限列表 ON 数据库名 FROM 用户名@‘客户端主机’;
收回所有权限:REVOKE ALL PRIVILEGES ON *.* FROM 用户名@’主机地址’;
create user zhangsan@’192.168.174.132′ identified by ‘zhangsan.123’;
第一步:修改配置文件 /etc/my.cnf ,添加选项 skip-grant-tables 跳过密码验证
第二步:重启MySQL,无密码即可登录,修改密码
systemctl restart mysqld
mysql -uroot
update mysql.user set authentication_string=password(‘新密码’) where user=’root’ and host=’localhost’;
flush privileges;
第三步:注释掉 /etc/my.cnf 中跳过密码部分
#skip-grant-tables
-P 端口号 -h 主机地址
mysql -P 3306 -h 192.168.174.129 -uzhangsan -p’zhangsan.123′ -e ‘show databases;’