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修改,修改完之后 重新启动mysql,再进入服务端就可以了
  
#启用严格模式 #NO_ENGINE_SUBSTITUTION非严格模式 set global sql_mode = 'STRICT_TRANS_TABLES'; 修改完,退出mysql,重新进入

五、数据类型以及枚举和集合用法

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;                                                          #查看当前数据库里有多少张表;
show create table 表名;                                                # 查看单表
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 1=2;     # 因为 1=2不成立,所以没有记录,但是表结构是复制了的

# 只复制满足条件的记录还有表结构
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;

 清空表

清空表:
            delete from t1; #如果有自增id,新增的数据,仍然是以删除前的最后一样作为起始。
            truncate table t1;数据量大,删除速度比上一条快,且如果有自增id也直接从零开始,

            auto_increment 表示:自增
            primary key 表示:约束(不能重复且不能为空);加速查找

 

posted @ 2020-05-04 22:11  耗油炒白菜  阅读(165)  评论(0编辑  收藏  举报