MySQL 散记

  • 分类: 数据库
  • 发表日期:2021-11-24 16:45:00
  • 最后修改:2023-04-24 17:38:00

创建数据库

CREATE DATABASE IF NOT EXISTS 数据库名 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

DEFAULT CHARACTER SET utf8:数据库字符集。设置数据库的默认编码为utf8,utf8中间不要"-";

COLLATE utf8_general_ci:数据库校对规则。ci是case insensitive的缩写,意思是大小写不敏感;相对的是cs,即case sensitive,大小写敏感;还有一种是utf8_bin,是将字符串中的每一个字符用二进制数据存储,区分大小写。

如果建表的时候选择的是区别大小写的规则而查询的时候又暂时不想区别, 可以用类似 WHERE column_name COLLATE utf8_general_ci = 'xxx' 的写法改变查询使用的校对规则,新建数据 库时一般选用utf8_general_ci就可以了。

每一个数据库有一个数据库字符集和一个数据库校对规则,它不能够为空。CREATE DATABASE 和 ALTER DATABASE语句有一个可选的子句来指定数据库字符集和校对规则: 

CREATE DATABASE db_name 
[[DEFAULT] CHARACTER SET charset_name] 
[[DEFAULT] COLLATE collation_name]

ALTER DATABASE db_name 
[[DEFAULT] CHARACTER SET charset_name] 
[[DEFAULT] COLLATE collation_name]

查看编码

# 查看数据库编码:
SHOW CREATE DATABASE db_name;
# 查看表编码
SHOW CREATE TABLE tb_name;
# 查看字段编码
SHOW FULL COLUMNS FROM tb_name;

把表默认的字符集和所有字符列(CHAR,VARCHAR,TEXT)改为新的字符集:

ALTER TABLE tbl_name CONVERT TO CHARACTER SET character_name CHARACTER SET utf8 COLLATE utf8_general_ci 

数据导入与导出

# 导出
mysqldump -u用户名 -p密码 db_name>D:\db_name.sql 
# 导入
mysql -u用户名 -p密码 db_name<D:\db_name.sql

在一次实验中发现,虽然数据是导入了,但却改变了表字段的属性,不知道为什么,有时间再来研究下...

插入数据

insert into 表名 (`字段_1`, `字段_n`) values ("字段_1_value", "字段_n_value");

修改表名

ALTER TABLE table_name RENAME TO new_table_name

修改某条数据

UPDATE 表名 SET 字段=值 条件;
# UPDATE users SET name="xiaoming" WHERE id=1;

修改某个字段的默认值

ALTER TABLE 表名 ALTER COLUMN 字段名 SET DEFAULT 默认值;

修改字段属性及是否允许为空

# ALTER TABLE 表名 MODIFY COLUMN 字段名 字段类型  是否非空;
ALTER TABLE users MODIFY COLUMN address VARCHAR(255) NOT NULL;   #不为空
ALTER TABLE users MODIFY COLUMN address VARCHAR(255) DEFAULT NULL;   #可以为空

设置字段是否允许重复

# 设置唯一性
ALTER TABLE 表名 ADD UNIQUE(`字段名`);
# 撤销唯一性
ALTER TABLE 表明 DROP INDEX 字段名;

修改字段名

ALTER TABLE 表名 RENAME COLUMN 字段旧名 TO 字段新名

修改字段类型

ALTER TABLE 表名 ALTER COLUMN 字段名 数据类型

添加字段

ALTER TABLE 表名 ADD 字段名 数据类型 [UNIQUE] [unsigned] [DEFAULT NULL|NOT NULL]

删除字段

ALTER TABLE 表名 DROP COLUMN 字段名

删除某条数据

DELETE FROM 表名 WHERE 条件

清空表 更多

TRUNCATE 表名;

若出现如下的错误:

[Err] 1701 -Cannot truncate a table referenced in a foreign key constraint …

解决办法:

# 1、 取消外键约束
SET foreign_key_checks = 0;
# 2、 执行 truncate 命令
# 3、 添加外键约束
SET foreign_key_checks = 1;
# 4、 查看外键约束状态
SELECT @@FOREIGN_KEY_CHECKS; 

MySQL查询一段时间内分组每天的最晚记录

select a.* from ar_group_trend_hashrate a \
    join ( \
        select max(c.record_time) as MaxcreateTime, c.group_name, c.tt_node, c.gid from \
            ( \
                select convert(b.record_time, CHAR(10)) datetemp, b.group_name, b.tt_node, b.gid, b.record_time \
                from ar_group_trend_hashrate b \
                where b.record_time between date_sub(curdate(), interval 15 day) and curdate() \
                and b.gid in (1,2,3) \
            ) c \
        group by c.datetemp, c.gid \
    ) d \
where a.record_time = d.MaxcreateTime and a.gid = d.gid;

设置允许远程登录

查询mysql具体版本

SELECT @@VERSION

mysql版本8.0.13,在给新用户授权时,发生了变化。

出错的语句: 

grant all privileges on *.* to 'root'@'172.16.10.203' identified by  'password' with grant option

1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'identified by  'password' with grant option' at line 5, Time: 0.000000s

 正确方式:

#创建账户
create user 'root'@'172.16.10.203' identified by  'password'

#赋予权限,with grant option这个选项表示该用户可以将自己拥有的权限授权给别人
grant all privileges on *.* to 'root'@'172.16.10.203' with grant option

#刷新
flush privileges;

Mysql 解决1251- Client does not support authentication protocol requested by server...的问题

多字段联合唯一键

CREATE UNIQUE INDEX name ON table (column [, ...]);

 

post
2020年12月26日 19:59 原创
post
2021年2月24日 18:06 原创 草稿

记一次elasticsearch项目的部署

post
2021年3月25日 22:09 原创
post
2021年4月15日 20:59 原创
post
2021年4月18日 16:32 原创
post
2021年6月17日 16:16 原创
post
2021年7月30日 12:15 原创
post
2021年7月30日 15:07 原创
post
2021年7月30日 15:13 原创
post
2021年7月30日 15:24 原创
post
2021年7月30日 16:02 原创
post
2021年8月25日 16:11

0 评论

大哥整点话呗~