当前位置 博文首页 > 双鸭山?克里菲斯?北方孤星之堕:MySQL数据表相关操作的总结和测

    双鸭山?克里菲斯?北方孤星之堕:MySQL数据表相关操作的总结和测

    作者:[db:作者] 时间:2021-09-04 12:32

    0 前言

    总结了MySQL数据表的相关操作,建了一些表的样例且给出了部分测试代码,大家可以输入到MySQL中进行验证。我会及时回复评论区的问题,如果觉得本文有帮助欢迎点赞 😃。

    1 表的定义

    数据表是数据库最重要的组成部分之一,是其它对象的基础
    数据表是存储数据的数据结构
    数据表是包含了特定实体类型的数据
    数据表由行(row)和列(column)构成的二维网络
    数据表一定先有表结构,再有数据
    数据表至少有一列,可以没有行或者多行
    数据表名称要求唯一,而且不要包含特殊字符

    2 创建数据表

    2.1 增删数据表

    1. 建立:CREATE TABLE [IF NOT EXISTS] tbl_name(
      字段名称 字段类型 [完整性约束条件]

      )ENGINE=引擎名称 CHARSET=‘编码方式’;

    2. 删除:DROP TABLE [IF EXISTS] tbl_name[,tbl_name…]

    2.2 完整性约束条件

    1. PRIMARY KEY主键(标识符)
    2. AUTO_INCREMENT自增长 (插入新数据时自动加1和主键连用)
    3. FOREIGN KEY外键
    4. NOT NULL非空 (不能为NULL值)
    5. UNIQUE KEY唯一
    6. DEFAULT默认值 (初始值)

    3 查看数据库中的数据表以及表结构

    1. 查看数据库下的数据表
      SHOW TABLES
    2. 查看指定表的表结构
      DESC tbl_name
      DESCRIBE tbl_name
      SHOW COLUMNS FROM tbl_name

    4 修改表结构

    1. 修改表名
      ALTER TABLE tbl_name RENAME [TO|AS] new_name
      RENAME TABLE tbl_name TO new_name
    2. 添加字段
      ALTER TABLE tbl_name ADD 字段名称 字段类型 [完整性约束条件] [FIRST|AFTER 字段名称]
    3. 删除字段
      ALTER TABLE tbl_name DROP 字段名称
    4. 修改字段
      ALTER TABLE tbl_name MODIFY 字段名称 字段类型 [完整性约束条件] [FIRST|AFTER 字段名称]
    5. 修改字段名称
      ALTER TABLE tbl_name CHANGE 旧字段名称 新字段名称 字段类型 [完整性约束条件] [FIRST|AFTER 字段名称]
    6. 添加默认值
      ALTER TABLE tbl_name ALTER 字段名称 SET DEFAULT 默认值
    7. 删除默认值
      ALTER TABLE tbl_name ALTER 字段名称 DROP DEFAULT
    8. 添加主键
      ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] PRIMARY KEY[index_type] (字段名称,…)
    9. 删除主键
      ALTER TABLE tbl_name DROP PRIMARY KEY
    10. 添加唯一
      ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY] [索引名称](字段名称,…)
    11. 删除唯一
      ALTER TABLE tbl_name DROP {INDEX|KEY} index_name
    12. 修改表的存储引擎
      ALTER TABLE tbl_name ENGINE=存储引擎名称
    13. 设置自增长的值
      ALTER TABLE tbl_name AUTO_INCREMNET=值

    5 代码

    -- 测试主键
    CREATE TABLE IF NOT EXISTS user1(
    id INT PRIMARY KEY,
    username VARCHAR(20)
    );
    -- 查看创建表的标的定义
    SHOW CREATE TABLE user1;
    
    INSERT user1 VALUES(1,'king');
    INSERT user1 VALUES(13,'QUEEN');
    
    CREATE TABLE IF NOT EXISTS user2(
    id INT,
    username VARCHAR(20),
    card CHAR(18),
    PRIMARY KEY(id,card)
    );
    
    INSERT user2 VALUES(1,'king','111');
    
    INSERT user2 VALUES(1,'queen','112');
    
    CREATE TABLE IF NOT EXISTS user3(
    id INT KEY,
    username VARCHAR(20)
    );
    
    CREATE TABLE IF NOT EXISTS user4(
    id INT,
    username VARCHAR(20) KEY
    );
    
    
    -- 测试AUTO_INCREMENT
    CREATE TABLE IF NOT EXISTS user5(
    id SMALLINT KEY AUTO_INCREMENT,
    username VARCHAR(20)
    );
    
    INSERT user5 VALUES(1,'KING');
    INSERT user5(username) VALUES('queen1');
    
    INSERT user5 VALUES(111,'KING1');
    
    INSERT user5 VALUES(NULL,'AAAA');
    
    INSERT user5 VALUES(DEFAULT,'AAAA');
    
    
    
    CREATE TABLE IF NOT EXISTS user6(
    id SMALLINT KEY AUTO_INCREMENT,
    username VARCHAR(20)
    )AUTO_INCREMENT=100;
    
    INSERT user6(username) VALUES('queen1');
    -- 修改自增长的值
    ALTER TABLE user6 AUTO_INCREMENT =500;
    
    -- 测试NOT NULL
    CREATE TABLE IF NOT EXISTS user7(
    id INT UNSIGNED KEY AUTO_INCREMENT,
    username VARCHAR(20) NOT NULL,
    password CHAR(32) NOT NULL,
    age TINYINT UNSIGNED
    );
    
    INSERT user7(username,password) VALUES('KING','KING');
    
    INSERT user7(username,password,age) VALUES('KING1','KING1',12);
    
    INSERT user7(username,password) VALUES(NULL,NULL);
    
    
    -- 测试DEFAULT
    
    CREATE TABLE IF NOT EXISTS user8(
    id INT UNSIGNED KEY AUTO_INCREMENT,
    username VARCHAR(20) NOT NULL,
    password CHAR(32) NOT NULL,
    age TINYINT UNSIGNED DEFAULT 18,
    addr VARCHAR(50) NOT NULL DEFAULT '北京',
    sex ENUM('男','女','保密') NOT NULL DEFAULT '男'
    );
    
    INSERT user8(username,password) VALUES('KING','KING');
    
    INSERT user8 VALUES(2,'QUEEN','QUEEN',29,'上海','保密');
    
    INSERT user8 VALUES(3,'QUEEN','QUEEN',DEFAULT,DEFAULT,'保密');
    
    
    -- 测试UNIQUE KEY
    
    CREATE TABLE IF NOT EXISTS user9(
    id TINYINT UNSIGNED KEY AUTO_INCREMENT,
    username VARCHAR(20) NOT NULL UNIQUE,
    card CHAR(18) UNIQUE
    );
    
    INSERT user9(username) VALUES('A');
    INSERT user9(username,card) VALUES('B','111');
    
    INSERT user9(username,card) VALUES('B1',NULL);
    
    INSERT user9(username,card) VALUES('B2',NULL);
    
    
    --CREATE TABLE [IF NOT EXISTS] tbl_name(
    --字段名称 字段类型 [UNSIGNED|ZEROFILL] [NOT NULL] [DEFAULT 默认值] [[PRIMARY] KEY| UNIQUE [KEY]] [AUTO_INCREMENT]
    --)ENGINE=INNODB CHARSET=UTF8 AUTO_INCREMENT=100;
    
    -- 创建用户表
    CREATE TABLE IF NOT EXISTS user10(
    id SMALLINT UNSIGNED KEY AUTO_INCREMENT,
    username VARCHAR(20) NOT NULL UNIQUE,
    password CHAR(32) NOT NULL,
    email VARCHAR(50) NOT NULL DEFAULT '382771946@qq.com',
    age TINYINT UNSIGNED DEFAULT 18,
    sex ENUM('男','女','保密') DEFAULT '保密',
    addr VARCHAR(200) NOT NULL DEFAULT '北京',
    salary FLOAT(6,2),
    regTime INT UNSIGNED,
    face CHAR(100) NOT NULL DEFAULT 'default.jpg'
    );
    
    -- 将user10重命名成user11
    ALTER TABLE user10 RENAME TO user11;
    
    ALTER TABLE user11 RENAME AS user10;
    
    ALTER TABLE user10 RENAME user11;
    
    RENAME TABLE user11 TO user10;
    
    -- 添加card 字段 CHAR(18) 
    ALTER TABLE user10 ADD card CHAR(18);
    
    ALTER TABLE user10 ADD test1 VARCHAR(100) NOT NULL UNIQUE;
    
    ALTER TABLE user10 ADD test2 VARCHAR(20) NOT NULL FIRST;
    
    ALTER TABLE user10 ADD test3 INT NOT NULL DEFAULT 100 AFTER username;
    
    -- 选中一次表,完成多个操作
    ALTER TABLE user10 
    
    ADD test4 INT NOT NULL DEFAULT 123 AFTER password,
    
    ADD test5 FLOAT(6,2) FIRST,
    
    ADD test6 SET('A','B','C');
    
    -- 删除test6字段
    
    ALTER TABLE user10 DROP test6;
    
    -- 一次删除test2,test3,test4,test5
    ALTER TABLE user10 
    
    DROP test2,
    
    DROP test3,
    
    DROP test4,
    
    DROP test5;
    
    -- 添加test字段删除addr字段
    ALTER TABLE user10 
    
    ADD test INT UNSIGNED NOT NULL DEFAULT 10 AFTER sex,
    
    DROP addr;
    
    
    -- 将email VARCHAR(200) 
    
    ALTER TABLE user10 MODIFY email VARCHAR(200);
    
    
    ALTER TABLE user10 MODIFY email VARCHAR(50) NOT NULL DEFAULT '382771946@qq.com';
    
    -- 将card字段移动到test字段之后
    ALTER TABLE user10 MODIFY card CHAR(18) AFTER test;
    
    -- 将test字段修改为CHAR(32) NOT NULL DEFAULT '123' 移动到第一个位置
    ALTER TABLE user10 MODIFY test CHAR(32) NOT NULL DEFAULT '123' FIRST;
    
    -- 将test字段改为test1
    ALTER TABLE user10 CHANGE test test1 CHAR(32) NOT NULL DEFAULT '123';
    
    ALTER TABLE user10 CHANGE test1 test VARCHAR(200) NOT NULL AFTER username;
    
    ALTER TABLE user10 CHANGE test test INT;
    
    CREATE TABLE IF NOT EXISTS user11(
    id TINYINT UNSIGNED KEY AUTO_INCREMENT ,
    username VARCHAR(20) NOT NULL UNIQUE,
    age TINYINT UNSIGNED
    );
    ALTER TABLE user11 ALTER age SET DEFAULT 18;
    
    ALTER TABLE user11 ADD email VARCHAR(50) ;
    
    
    -- 删除默认值
    ALTER TABLE user11 ALTER age DROP DEFAULT;
    
    ALTER TABLE user11 ALTER email DROP DEFAULT;
    
    -- 添加主键
    CREATE TABLE IF NOT EXISTS test12(
    id INT
    );
    
    ALTER TABLE test12 ADD PRIMARY KEY(id);
    
    CREATE TABLE IF NOT EXISTS test13(
    id INT,
    card CHAR(18),
    username VARCHAR(20) NOT NULL
    );
    
    ALTER TABLE test13 ADD PRIMARY KEY(id,card);
    
    -- 删除test12表的主键
    ALTER TABLE test12 DROP PRIMARY KEY;
    
    ALTER TABLE test13 DROP PRIMARY KEY;
    
    ALTER TABLE test12 ADD CONSTRAINT symbol PRIMARY KEY index_type(id);
    
    
    CREATE TABLE IF NOT EXISTS test14(
    id INT UNSIGNED KEY AUTO_INCREMENT
    );
    
    ALTER TABLE test14 MODIFY id INT UNSIGNED;
    ALTER TABLE test14 DROP PRIMARY KEY ;
    
    -- 测试添加唯一索引
    CREATE TABLE IF NOT EXISTS user12(
    id TINYINT UNSIGNED KEY AUTO_INCREMENT,
    username VARCHAR(20) NOT NULL,
    card CHAR(18) NOT NULL,
    test VARCHAR(20) NOT NULL,
    test1 CHAR(32) NOT NULL
    );
    ALTER TABLE user12 ADD UNIQUE(username);
    
    ALTER TABLE user12 ADD CONSTRAINT symbol  UNIQUE KEY uni_card(card);
    
    ALTER TABLE user12 ADD CONSTRAINT symbol UNIQUE INDEX mulUni_test_test1(test,test1);
    
    --删除唯一索引
    ALTER TABLE user12 DROP INDEX username;
    
    ALTER TABLE user12 DROP KEY uni_card;
    
    ALTER TABLE user12 DROP KEY mulUni_test_test1;
    
    -- 修改表的存储引擎为MyISAM
    ALTER TABLE user12 ENGINE=MyISAM;
    
    -- 修改自增长值
    
    ALTER TABLE user12 AUTO_INCREMENT=100;
    
    -- 删除数据表
    DROP TABLE user12;
    
    DROP TABLE IF EXISTS user12;
    
    DROP TABLE IF EXISTS user11,user10,user9