MySQL 目录
1、MySQL 8.0 引擎和索引
2、MySQL 8.0 查询数据
3、MySQL 8.0 操作数据库和数据表
4、Mysql 8.0 权限概述与授权(一)
5、Mysql 8.0 权限概述与授权(二)
6、Mysql 8.0 权限概述与授权(三)
7、持续更新中…
在MySQL 8.0 版本之前,默认字符集为latin1,uft8字符集指向的是utf8mb3。网站开发人员在数据库设计的时候往往会将编码修改为utf8字符集。如果遗忘修改默认的编码,就会出现乱码的问题。从MySQL 8.0 开始,数据库的默认编码将改成utf8mb4,从而避免上述乱码的问题。
在MySQL 8.0之前,自增主键AUTO_INCREMENT 的值如果大于max(primary key)+1,在MySQL 重启后,就会重置AUTO_INCREMENT=max(primary key)+1,这种现象在某些情况下会导致业务主键冲突或者其他难以发现的问题。从MySQL 8.0 开始,自增变量的持久化已经实现了。
CREATE DATABASE database_name;
---database_name 为要创建的数据库的名称,该名称不能与已经存在的数据库重名。
---数据库创建成功,可用SHOW DATABASES; 语句查看。
DROP DATABASES database_name;
---database_name 为要删除的数据库的名称,如果指定的数据库不存在,删除就会出错。
---在创建数据表之前,先要选择数据库,USE "<数据库名>";
CREATE TABLE <表名>(
字段名1 数据类型 [列级别约束条件] [默认值],
字段名2 数据类型 [列级别约束条件] [默认值],
……
);
---表名不区分大小写,不能使用SQL语言中的关键字,如DROP、ALTER、INSERT 作为表名。
ALTER TABLE <表名> ADD <新字段名> <数据类型>
[约束条件] [FIRST | AFTER 已存在字段];
---"新字段名"为需要添加的字段名称;FIRST 为可选参数,其作用是将新添加的字段设置为表的第一个字段;AFTER 为可选参数,其作用是将新添加的字段添加到指定的"已存在字段名"后面。
"创建一个table_name1表,表的结构和数据均来自于table_name2表。"
create table table_name1 select * from table_name2;
得到的是一个空结构表
"创建一个table_name1表,只复制table_name2表的结构,不要里面的数据。"
create table table_name1 select * from table_name2 where 0;
提示:"FIRST 或 AFTER 已存在字段名"用于指定新增字段在表中的位置,若SQL语句没有这两个参数,则默认将新添加的字段设置为数据表的最后列。
ALTER TABLE <旧表名> RENAME [TO] <新表名>;
ALTER TABLE <表名> MODIFY <字段名> <数据类型>;
---其中,"表名"指要修改数据类型的字段所在表的名称,"字段名"指需要修改的字段,"数据类型"指修改后字段的新数据类型。
ALTER TABLE <表名> CHANGE <旧字段名> <新字段名> <新数据类型>;
---其中,"旧字段名"指修改前的字段名;"新字段名"指修改后的字段名;"新数据类型"指修改后的数据类型,如果不需要修改字段的数据类型,那么将新数据设置成与原来一样即可,但数据类型不能为空。
ALTER TABLE <表名> MODIFY <字段1> <数据类型> FIRST|AFTER <字段2>;
UPDATE table_name
SET column_name1=value1,column_name2=value2,……,column_namen=valuen WHERE (condition);
---column_name1,column_name2,……,column_namen 为指定更新的字段的名称;value1,value2,……,valuen 为相对应的指定字段的更新值;condition 指定更新的记录需要满足的条件。更新多个列时,每个"列-值"对之间用逗号隔开,最后一列之后不需要逗号。
情况一:给全部字段添加数据;
INSERT INTO table_name (colum_list) VALUES (values_list);
INSERT INTO table_name VALUES (values_list);
---虽然使用INSERT插入数据时可以忽略插入数据的列名称,但是值如果不包含列名称,那么VALUES关键字后面的值不仅要求完整,而且顺序必须和表定义时列的顺序相同。如果表的结构被修改,那么对列进行增加、删除或者位置改变操作,这些操作将使得用这种方式插入数据时的顺序也同时改变。如果指定列名称,则不会收到表结构改变的影响。
情况二:给部分字段添加数据或指定字段插入数据;
INSERT INTO table_name(colum_list1,colum_list2) VALUES (values_list,values_list);
情况三:一次性插入多条数据;
INSERT INTO table_name (colum_list) VALUES
(values_list1),(values_list2),…,(values_listn);
---要保证每个插入值得类型和对应列的数据类型匹配,如果类型不同,就无法插入,并且MYSQL会产生错误。
提示:MYSQL执行单条INSERT语句插入多行数据比使用多条INSERT语句快,所以在插入多条记录时,最好使用单条INSERT语句的方式插入。
INSERT INTO table_name1 (column_list1) SELECT (column_list2) FROM table_name2 WHERE (condition);
---table_name1 指定待插入数据的表;column_list1 指定待插入数据的哪些列;table_name2 指定插入数据是从哪个表中查询出来的;column_list2 指定数据来源表的查询列,该列表必须和 column_list1 列表中的字段个数相同,数据类型相同;condition 指定 SELECT 语句的查询条件。
DELETE FROM table_name [WHERE <condition>];
---table_name 指定要执行删除操作的表;"[WHERE ]"为可选参数,指定删除条件,如果没有WHERE子句,那么DELETE 语句将删除表中的所有记录。
ALTER TABLE <表名> DROP <字段名>;
delete 清除数据后 增加一条数据后的序号还是连续的,而truncate 的序号是重新开始。
SELECT * FROM 表名;
SELECT <字段1>,<字段2>,<字段n> FROM 表名;
---字段必须是表名中有的