阅读目录
一、存储引擎介绍
存储引擎即表类型,mysql根据不同的表类型会有不同的处理机制
https://www.cnblogs.com/baicai37/p/12827274.html
二、表介绍
表相当于文件,表中的一条记录就相当于文件的一行内容,不同的是,表中的一条记录有对应的标题,称为表的字段
id,name,qq,age称为字段,其余的,一行内容称为一条记录
三、创建表
#语法: create table 表名( 字段名1 类型[(宽度) 约束条件], 字段名2 类型[(宽度) 约束条件], 字段名3 类型[(宽度) 约束条件] ); #注意: 1. 在同一张表中,字段名是不能相同 2. 宽度和约束条件可选 3. 字段名和类型是必须的
4.最后一行不能有逗号
create table t6(
id int,
name char,
); 报错
创建表示例:
mysql> create table t1( -> id int, -> name varchar(50), -> password varchar(50) -> ); Query OK, 0 rows affected (0.02 sec) mysql> show tables; +-----------------------+ | Tables_in_userinfo_db | +-----------------------+ | baseinfo | | t1 | +-----------------------+ 2 rows in set (0.00 sec) mysql> desc t1; +----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | name | varchar(50) | YES | | NULL | | | password | varchar(50) | YES | | NULL | | +----------+-------------+------+-----+---------+-------+ 3 rows in set (0.02 sec) mysql>
"""补充""" # 宽度 一般情况下指的是对存储数据的限制 create table t7(name char); 默认宽度是1 insert into t7 values('jason'); insert into t7 values(null); 关键字NULL 针对不同的版本会出现不同的效果 5.6版本默认没有开启严格模式 规定只能存一个字符你给了多个字符,那么我会自动帮你截取 5.7版本及以上或者开启了严格模式 那么规定只能存几个 就不能超,一旦超出范围立刻报错 Data too long for .... """严格模式到底开不开呢?""" MySQL5.7之后的版本默认都是开启严格模式的 使用数据库的准则: 能尽量少的让数据库干活就尽量少 不要给数据库增加额外的压力 # 约束条件 null not null不能插入null create table t8(id int,name char not null); """ 宽度和约束条件到底是什么关系 宽度是用来限制数据的存储 约束条件是在宽度的基础之上增加的额外的约束 """
四、严格模式
# 如何查看严格模式 show variables like "%mode"; 也可以使用: select @@sql_mode; 模糊匹配/查询 关键字 like %:匹配任意多个字符 _:匹配任意单个字符 # 修改严格模式 set session 只在当前窗口有效 set global 全局窗口有效(重启MySQL后失效)
要想永久有效要在my.ini配置文件中的mysqld下的sql_mode修改
#启用严格模式 #NO_ENGINE_SUBSTITUTION非严格模式 set global sql_mode = 'STRICT_TRANS_TABLES'; 修改完之后 重新进入服务端即可
五、数据类型以及枚举和集合用法
https://www.cnblogs.com/baicai37/p/12828292.html
六、完整性约束
https://www.cnblogs.com/baicai37/p/12831515.html
七、表相关操作
对字段操作:
语法: 1. 修改表名 ALTER TABLE 表名 RENAME 新表名; 2. 增加字段 ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件…], ADD 字段名 数据类型 [完整性约束条件…]; ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件…] FIRST; #添加到最前面 ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件…] AFTER 字段名; #添加到指定字段名之后 3. 删除字段 ALTER TABLE 表名 DROP 字段名; 4. 修改字段(名称、类型或完整性约束)只有完整性约束条件可写可不写,其他必写 ALTER TABLE 表名 MODIFY 字段名 数据类型 [完整性约束条件…]; #修改字段类型 ALTER TABLE 表名 MODIFY 字段名 数据类型 [完整性约束条件…] first; #将字段修改为第一字段 ALTER TABLE 表名 MODIFY 字段名 数据类型 [完整性约束条件…] after 字段名; #将字段放在指定字段名之后 ALTER TABLE 表名 CHANGE 旧字段名 新字段名 旧数据类型 [完整性约束条件…]; ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…];
对表本身的操作:
#创建表 create table 表名( 字段名1 类型[(宽度) 约束条件], 字段名2 类型[(宽度) 约束条件], 字段名3 类型[(宽度) 约束条件] ); show tables; #查看当前数据库里有多少张表; desc t1;(describe) #查看t1表结构; flush privileges; #刷新权限; drop table t1; #删除表; show engines;查看MySQL存储引擎; show variables like '%storage_engine%'; #查看MySQL默认的存储引擎; alter table t1 engine=innodb; #修改MySQL t1表存储引擎;
八、复制表
复制表结构+记录 (key不会复制: 主键、外键和索引)
create table 表名 select * from 旧表; #只复制旧表内记录,以及表结构,不能复制主键 外键 ... mysql> create table new_service select * from service; #根据条件复制旧表 mysql> create table new1_service select * from service where id=1; #只复制旧表中id=1的记录以及表结构,不能复制主键、外键... Query OK, 0 rows affected (0.00 sec) Records: 0 Duplicates: 0 Warnings: 0
create table 表名 like 旧表; #不能复制旧表记录、主键、外键,只复制旧表结构 mysql> create table t4 like employees;