MySql常用语句更新(update...)
# MySQL CRUD
增加数据: insert into user(id,name,sex,age) value(11,"qaq","boy","23"); 查看数据: select * from user where id=11; 修改数据: update user set name="QAQ" where id=11; 删除数据: delete from user where id=11;
【其他相关】
# 刷新
flush privileges;
# 初始化Mysql后,查看密码
grep "password" /var/log/mysqld.log
# 修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '1qaz@WSX';
# 查看默认密码复杂度
SHOW VARIABLES LIKE 'validate_password%';
# 如需修改密码复杂度参考如下命令:
set global validate_password_policy=LOW; # 生产环境不建议 set global validate_password_length=7;
运算符:
select * from user where age>20;
= | 检查两个操作数的值是否相等,如果是,则条件变为真。 | (A = B) 不为 true. |
---|---|---|
!= | 检查两个操作数的值是否相等,如果值不相等,则条件变为真。 | (A != B) 为 true. |
> | 检查左操作数的值是否大于右操作数的值,如果是,则条件为真。 | (A > B) 不为 true. |
< | 检查左操作数的值是否小于右操作数的值,如果是,则条件为真。 | (A < B) 为 true. |
>= | 检查左操作数的值是否大于或等于右操作数的值,如果是,则条件为真。 | (A >= B) 不为 true. |
<= | 检查左操作数的值是否小于或等于右操作数的值,如果是,则条件变为真。 | (A <= B) 为 true. |
# 子查询:在select 中子查询总是从内向外处理。先处理括号内部的在处理括号外部的;
select name,age from user where name in(select name from buy);
# 多表查询:
select user.id,user.name,buy.shop from user,buy where user.name=buy.name;
JOIN: 如果表中有至少一个匹配,则返回行 select user.age,buy.shop from user inner join buy on user.name=buy.name; LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行 select user.age,buy.shop from user left join buy on user.name=buy.name; RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行 select user.age,buy.shop from user right join buy on user.name=buy.name;
联合查询:Union语句必须有两条或者以上的select语句,语句之间用union隔开。 每个查询必须包含相同的列、表达式或者聚合函数。 不过次序可以不统一。列数据的类型必须兼容类型不必完全相同。
select name from user union select name from buy; union all 不去重 select name from user union all select name from buy;
【函数】
返回当前用户: select user(); 返回数据库的版本号: select version(); 返回当前数据库名: select database(); 休眠参数给定的秒数: select sleep(5);
查看活动进程
show processlist
获取从字符串s中的第n个位置开始长度为len的字符串: substring(s,n,len) select substring(user(),2,3); length()/char_length(): char_length(str) 计算单位:字符 不管汉字还是数字或者是字母都算是一个字符 length(str) 计算单位:字节 utf8编码:一个汉字三个字节,一个数字或字母一个字节。 gbk编码:一个汉字两个字节,一个数字或字母一个字节。
【权限相关】
# 授权并建账号
grant all privileges on demo.* to 'demo'@'x.x.x.x' identified by '123456';
# 回收权限
revoke all on *.* from 'root'@'%';
【创建相关】
# create db
create database if not exists demo default character set = 'utf8';
#创建数据库
create_db_sql="create database IF NOT EXISTS ${DBNAME}" mysql -h<数据库IP> -P<数据库端口> -u<用户名>-p${PASSWORD} -e "<执行的SQL语句>"
#创建表
create_table_sql="create table IF NOT EXISTS ${TABLENAME} ( name varchar(20), id int(11) default 0 )" mysql -h<数据库IP> -P<数据库端口> -u<用户名>-p${PASSWORD} ${DBNAME} -e "$<执行的SQL语句>" create table user(id int, name varchar(20), password varchar(15)); # 创建常规表
#插入数据
insert_sql="insert into ${TABLENAME} values('billchen',2)" mysql -h<数据库IP> -P<数据库端口> -u<用户名>-p${PASSWORD} ${DBNAME} -e "<执行的SQL语句>" insert into user(id, name, password) value(1, "admin", "123456"); # 插入数据
【查询相关】
# 限制&排序&倒序
只返回固定数量的行数: select name,age from user limit 3; 排序: select name,age from user order by age; 倒序: select name,age from user order by age DESC;
# 统计
统计数量: select sex,count(*) from user group by sex; 统计数量并排序: select sex,count(*) from user group by sex order by count(*) desc;
# WHERE 子句
单个条件: select * from user where id=3; 多个条件: select * from user where age=18 and sex='boy'; select * from user where age=18 or sex='boy'; select * from user where age in (18,27); select * from user where name like '%y';
# view db grant
show create database demo;
#查询是否锁表
show OPEN TABLES where In_use > 0;
# view user&grant information
select user,password,host from mysql.user;
# 查询
select_sql="select * from ${TABLENAME}" mysql -h<数据库IP> -P<数据库端口> -u<用户名>-p${PASSWORD} ${DBNAME} -e "<执行的SQL语句>"
#更新数据
update_sql="update ${TABLENAME} set id=3" mysql -h<数据库IP> -P<数据库端口> -u<用户名>-p${PASSWORD} ${DBNAME} -e "<执行的SQL语句>" mysql -h<数据库IP> -P<数据库端口> -u<用户名>-p${PASSWORD} ${DBNAME} -e "<执行的SQL语句>"
【删除相关】
delete from mysql.user where user='root' and host = '%';
#删除数据
delete_sql="delete from ${TABLENAME}"
mysql -h<数据库IP> -P<数据库端口> -u<用户名>-p${PASSWORD} ${DBNAME} -e "<执行的SQL语句>"
mysql -h<数据库IP> -P<数据库端口> -u<用户名>-p${PASSWORD} ${DBNAME} -e "<执行的SQL语句>"
【忘记密码】
1. 停止服务
2. 修改配置文件/etc/my.cnf在[mysqld]下添加 skip-grant-tables后保存
3. 启动服务,使用空密码方式使用root用户登录
# 修改root密码
use mysql; update mysql.user set authentication_string=PASSWORD('1qaz@WSX') where User='root';
flush privileges;
4. 退出数据库并删除配置文件中的skip-grant-tables