MySQL数据库之表相关

阅读目录

一、存储引擎介绍

存储引擎即表类型,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;
原文地址:https://www.cnblogs.com/baicai37/p/12828489.html