暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

DDL、DML、DCL基本应用

VFrog 2021-10-28
322
  • 库的定义

--- 创建数据库

    CREATE DATABASE zabbix CHARSET utf8mb4 COLLATE  utf8mb4_bin;


    --- 查看库情况

      SHOW DATABASES;
      SHOW CREATE DATABASE zabbix;


      --- 删除数据库(不代表生产操作)

        DROP DATABASE  zabbix;

        --- 修改数据库字符集

        --- 注意: 一定是从小往大了改,比如utf8--->utf8mb4.

        --- 目标字符集一定是源字符集的严格超集.

          CREATE DATABASE  zabbix;
          SHOW CREATE DATABASE zabbix;
          ALTER DATABASE zabbix CHARSET utf8mb4;


          • 关于库定义规范 

          --- 1.库名使用小写字符

          --- 2.库名不能以数字开头

          --- 3.不能是数据库内部的关键字

          --- 4.必须设置字符集.

          • DDL-表定义

          --- 建表

          表名,列名,列属性,表属性

          --- 列属性

            PRIMARY KEY      : 主键约束,表中只能有一个,非空且唯一.
            NOT NULL         : 非空约束,不允许空值
            UNIQUE KEY : 唯一键约束,不允许重复值
            DEFAULT          : 一般配合 NOT NULL 一起使用.
            UNSIGNED : 无符号,一般是配合数字列,非负数
            COMMENT : 注释
            AUTO_INCREMENT   : 自增长的列


              CREATE TABLE stu (
              id INT PRIMARY KEY NOT NULL AUTO_INCREMENT COMMENT '学号',
              sname VARCHAR(255) NOT NULL COMMENT '姓名',
              age TINYINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '年龄',
              gender ENUM('m','f','n') NOT NULL DEFAULT 'n' COMMENT '性别',
              intime DATETIME NOT NULL DEFAULT NOW() COMMENT '入学时间'
              )ENGINE INNODB CHARSET utf8mb4;

              • 建表规范

                --- 1. 表名小写字母,不能数字开头,
                --- 2. 不能是保留字符,使用和业务有关的表名
                --- 3. 选择合适的数据类型及长度
                --- 4. 每个列设置 NOT NULL + DEFAULT .对于数据0填充,对于字符使用有效字符串填充
                --- 5. 每个列设置注释
                --- 6. 表必须设置存储引擎和字符集
                --- 7. 主键列尽量是无关列数字列,最好是自增长
                --- 8. enum类型不要保存数字,只能是字符串类型


                --- 查询建表信息

                  SHOW TABLES;
                  SHOW CREATE TABLE stu;
                  DESC stu;


                  --- 创建一个表结构一样的表

                    CREATE TABLE test LIKE stu;

                    --- 删表(不代表生产操作)

                      DROP TABLE test;

                      --- 修改

                      --- 在stu表中添加qq列 *****

                        DESC stu;
                        ALTER TABLE stu ADD qq VARCHAR(20) NOT NULL COMMENT 'qq号';
                        pt-osc


                        --- 在sname后列 ***

                          ALTER TABLE stu ADD wechat VARCHAR(64) NOT NULL UNIQUE COMMENT '微信号' AFTER sname;

                          --- 在id列前加一个新列num ***

                            ALTER TABLE stu ADD num INT NOT NULL UNIQUE COMMENT '身份证' FIRST ;
                            DESC stu;


                            --- 把刚才添加的列都删掉(危险,不代表生产操作) ***

                              ALTER TABLE stu DROP num;
                              DESC stu;
                              ALTER TABLE stu DROP qq;
                              ALTER TABLE stu DROP wechat;


                              --- 修改sname数据类型的属性 ***

                                DESC stu;
                                ALTER TABLE stu MODIFY sname VARCHAR(64) NOT NULL COMMENT '姓名';


                                --- 将gender 改为 sex 数据类型改为 CHAR 类型 ***

                                  ALTER TABLE stu  CHANGE gender sex CHAR(4) NOT NULL COMMENT '性别';
                                  • DCL

                                    grant
                                    revoke


                                    • DML

                                      insert
                                      DESC stu;


                                      --- 最偷懒

                                        INSERT stu VALUES(1,'zs',18,'m',NOW());
                                        SELECT * FROM stu;


                                        --- 最规范

                                          INSERT INTO stu(id,sname,age,sex,intime)
                                          VALUES (2,'ls',19,'f',NOW());


                                          --- 针对性的录入数据

                                            INSERT INTO stu(sname,age,sex)
                                            VALUES ('w5',11,'m');


                                            --- 一次性录入多行

                                              INSERT INTO stu(sname,age,sex)
                                              VALUES
                                              ('aa',11,'m'),
                                              ('bb',12,'f'),
                                              ('cc',13,'m');


                                              -- update(一定要加where条件)

                                                UPDATE stu SET sname='aaa';
                                                SELECT * FROM stu;
                                                UPDATE stu SET sname='bb' WHERE id=6;


                                                -- delete (一定要有where条件)

                                                  DELETE FROM stu;
                                                  DELETE FROM stu WHERE id=9;


                                                  -- 生产中屏蔽delete功能

                                                  --- 使用update替代delete

                                                    ALTER TABLE stu ADD is_del TINYINT DEFAULT 0 ;
                                                    UPDATE stu SET is_del=1 WHERE id=7;
                                                    SELECT * FROM stu WHERE is_del=0;


                                                    删除语句的区别:

                                                      delete from table...       :逻辑上,逐行删除,数据行多,操作很慢。并没有真正从磁盘上删除,
                                                      只是在存储层面打标记,磁盘空间不立即释放。HWM高水位线不会降低
                                                      drop table ... :将表结构(元数据)和数据行物理层次删除
                                                      truncate table student :清空表段中的所有数据页。物理层次删除全表数据,磁盘空间立即释放,
                                                      HWM高水位线会降低



                                                      文章转载自VFrog,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                                      评论