systemctl start mysql 开启数据库服务 netstat -antlupe|grep mysql 查看数据库的接口信息 mysql 测试能否打开数据库 mysql_secure_installation 数据库初始化,这里我们输入密码后全部选择y show variables like 'character%'; 查看字符集 mysqld --install MySQL 安装服务 net start MySQL 启动服务 net stop MySQL 停止服务 sc delete MySQL 删除服务 (出现问题时,可执行) drop database 数据库名称; 删除数据库 drop table 表名 删除表结构 mysql -uroot -p123 ##进入数据库(这里不要养成习惯因为输入密码时明文的) show variables like "log_error"; # 查看数据库的错误日志文件存放在哪 show databases; ##显示数据库 select database(); ##显示数据库 show tables; ##显示数据库中的表 select * from mysql.user; ##查询mysql库下的user表中的数据 desc 表名; ##查看表的数据结构 show create table 表名; 查询指定表的建表语句 flush privileges; ##刷新数据库信息 select host,user,password from user; ##查询user表中的host,user,password字段 select host,user,password from user where host="::1"##查询表中字段中有关::1的数据 create database online_judge default character set utf8mb4 default collate utf8mb4_general_ci; 创建数据库 select * from mysql.user; 查看所有用户 create user '用户名'@'主机名' identified by '密码'; 创建用户 alter user '用户名'@'主机名' identified with mysql_native_password by '新密码'; 修改密码 drop user '用户名'@'主机名'; 删除用户 show grants for '用户名'@'主机名'; 查询用户权限; 权限包括(ALL所有权限,ALL PRIVILEGES所有权限,SELECT,UPDATE,DELETE,ALTER修改表,DROP删除表/库/视图,CREATE创建表/库) grant 权限名 on 数据库名.表名 to '用户名'@'主机名'; 授予权限 grant all on *.* to mo@localhost identified by "密码"; 给mo账号授权 revoke 权限名 on 数据库名.表名 from '用户名'@'主机名'; 撤销权限 GRANT ALL ON *.* TO 'root'@'%'; #授权 root 用户的所有权限并设置远程访问,GRANT ALL ON 表示所有权限,% 表示通配所有 host,可以访问远程。如果报错“ERROR 1410 (42000): You are not allowed to create a user with GRANT”,则执行如下命令后重试 update user set host='%' where mysql.user='root'; create table 表名(字段 字段类型 约束 auto_increment primary key comment '注释') engine = 引擎 comment '注释'; 创建表 alter table 表名 add 字段名 类型(长度) 约束 comment '注释'; 添加表字段 alter table 表名 modify 字段名 新数据类型(长度); 修改字段的数据类型 alter table 表名 change 旧字段名 新字段名 类型(长度) 约束 comment '注释'; 修改字段名和字段类型 alter table 表名 drop 字段名; 删除字段 alter table 表名 rename 新表名; 修改表名 drop table if exists 表名; 删除表 truncate table 表名; 删除表并创建表 mysqldump -uroot -pmo --set-gtid-purged=off online_judge > /var/log/mysql/online_judge.sql 导出数据库表和数据 source sql文件名 导入数据库 Transaction create UNIQUE | FULLTEXT index 索引名 on 表名(字段名); 创建索引,UNIQUE | FULLTEXT 可选参数,可以不用写 select @@transaction_isolation; 查看事务隔离级别 set session|global transaction isolation level read uncommited|read commited|repeatable read|serializable; 设置事务隔离级别 start transaction; 开始事务 select @@autocommit; 查看事务提交方式 set @@autocommit = 0; 设置事务提交方式 commit; 提交事务 rollback; 回滚事务 select @@ show profiles; 查看语句执行耗时 show profile for query query_id; 查看指定query_id 的sql各个阶段耗时情况 show profile cpu for query query_id; 查看query_id的sql使用cpu情况 查询语句前加 desc 或 explain 用于查看sql语句执行情况 char类型,会用空白符填充未用的剩余字符,varchar则不会。 where是用于表中筛选查询,having用于在where和group 结果中查询。 having可以使用聚合函数,而where 不能。having用于group by之后。having执行顺序位于where之后。 常用函数 round(arg1,arg2)浮点数四舍五入取整。arg1存放值;arg2选填,保留小数点位数。 ceiling()向上取整, floor()向下取整, ABS()绝对值函数。 rand()返回一个0-1的随机数,随便给个数值参数就能得到稳定的值。 length(字符串)返回长度 upper()、lower()字符串转成大写或小写 trim()、ltrim()、rtrim()去除前后空格、去除前面空格,去除后面空格 left(‘字符串’,n);right(‘字符串’,n)返回字符串左侧或者右侧n个字符. substring(‘字符串’,起始位,截取长度)截取字符串,截取的字符串包括起始位,且从1开始数。 locate('子串','字符串')返回字符串中字符子串的起始位置,从1开始数。匹配失败返回0。 replace('字符串',a,b)在字符串中把a替换成b。 concat('a','b')把俩字符串拼成一个字符串 now()获取当前的日期时间;curdate()获取当前日期;curtime()获取当前时间; year(arg)提取参数中的年份;month(arg)提取参数中的月份;day(arg)获取参数中的时间是几号;hour();minute();second();dayname()获取星期几;参数格式 2023-01-19 17:55:05 extract(day from now())sql标准函数,提取from后面参数中的年份、月份、日期、时、分、秒; date_format(now(), '%Y %m %d')日期格式化函数, date_add(now(),interval 233 year )给日期添加天数、年、月、时、分、秒;正负数都可 date_sub(now(),interval 233 year )给日期减少天数、年、月、时、分、秒; datediff(now(),'2020-02-03')获取两个日期的间隔天数,前面的日期减后面的日期。 time_to_sec('20:02')时间转成秒数, IFNULL(字段名,'要替换的字符')如果字段值为null,则把null替换成要替换的字符 coalesce(字段名,arg1,arg2,...)如果字段为空,且第一个参数不为空,则返回第一个参数,如果第一个参数为空 第二个参数不为空,则返回第二个参数,以此类推。 IF(expression,value1,value2)如果表达式值为真,返回value1,否则返回value2。 CASE when expression then value1 ... when expression then value2 else value END 类似switch语句 创建 create user '用户名'@'localhost' IDENTIFIED by '用户密码' 创建用户 create view view_stuinfo as 查询语句; 创建视图 create table customes2 AS select * from customes; 复制一张customes表,主键和自增不会复制。 create table example 查询语句; 把查询语句的结果作为新表的数据。AS关键字可以省 删除 drop index 索引名 on 表名; 删除索引 查询 show global status like 'Com_______'; 查看表增删改查频率,七个_ show index from 表名; 查询表中的索引 select * from 表名 where 字段名 between 60 and 70; 查询范围内的数据 select DISTINCT address from student 去除重复字段 select * from customers where last_name regexp '^field|mac$|ge';查找姓氏是以field打头的或以mac结尾或中间有ge的人 regexp 用于匹配字符串; 选配参数:^ 固定开头 $ 固定结尾 | 或者 [] 括号内的每个字母和外面字符串分别组合并做模糊查询,例’[ge]m’ 等价于‘gm|em’ [a-h] a到h的之间的字母 select * from customers c JOIN orders o ON c.customer_id=o.customer_id; join关键字就是内连接 作用和平时写的where查询一样,left join是左连接,right join是右连接,以左连接为例,查询的结果会返回join关键字左边表的全部内容,不管是否满足条件。 select * from customers c JOIN orders o USING(customer_id,字段名),查询customer_id一样的记录,字段名必须在两个表中都存在, select id from customers UNION select id from orders; union 用于合并两个查询语句的结果,查询的列数必须一样。 EXISTS运算符会返回指令,而不是子查询中的结果。比IN运算符效率高。执行查询时,主查询语句查询clients表获取所有记录,依次循环每条记录,拿着当前记录的client_id传到子查询,只要在子查询中找到符合子查询条件的记录,就会返回true给EXISTS,最终就会在结果集中添加当前记录。例:select * from clients c where EXISTS (select client_id from invoices where client_id = c.client_id); ALL 用于子查询前面时,必须大于子查询返回的所有的值; select * from invoices where invoice_total > All(select invoice_total from invoices where client_id=3) ANY 匹配时,等于多个值中的任何一个就行, 类似于IN;举例:client_id IN(1,5,8) 等价于client_id = ANY(1,5,8) mysql主从配置 create User 'slave'@'%'IDENTIFIED BY 'mo'; grant REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'slave'@'%'; change master to master_host='192.168.0.102', master_user='slave', master_password='mo' , master_port=3307, master_log_file='mall-mysql-bin.000001', master_log_pos=617, master_connect_retry=30; start slave; //启动主从同步