数据表操作

数据表操作
--1.创建表(类似于一个excel表)
--基本语法
CREATE TABLE 表名(
            field1 type[完整性约束条件],
            field2 type,
            ...
            fieldn type
        )[CHARACTER SET XXX]; --创建一个员工表employee
mysql>CREATE TABLE employee(
            id INT PRIMARY KEY AUTO_INCREMENT,
            name VARCHAR(20),
            gender BIT DEFAULT 1,                -- gender CHAR(1)  DEFAULT 1   --或者 TINYINT(1)
            birthday DATE,
            entry_date DATE,
            job VARCHAR(20),
            salary DOUBLE(4,2) unsigned,
            resume TEXT                          -- 注意,这里作为最后一个字段不加逗号
  );
   
    /* 约束:
       PRIMARY KEY (非空且唯一):能够唯一区分出当前记录的字段称为主键!
       UNIQUE 唯一
       NOT NULL 非空
       AUTO_INCREMENT 主键字段必须是数字类型。使用AUTO_INCREMENT设置字段值自动增加。
       外键约束 FOREIGN KEY  */ --2.查看表信息
    DESC 表名; --查看表结构,即查看表的字段信息,其中包括字段名、字段类型等信息
 
    SHOW COLUMNS FROM 表名;  --查看表结构
 
    SHOW TABLES; --查看当前数据库中的所有的表
 
    SHOW CREATE TABLE 表名; --查看当前数据库表建表语句 --3.修改表结构
   --(1)增加列(字段)      --默认在表已有字段的后面添加
      ALTER TABLE 表名 ADD [COLUMN] 列名 类型[完整性约束条件][FIRST|AFTER 字段名];
  --ALTER TABLE user ADD addr VARCHAR(20) NOT NULL UNIQUE FIRST/AFTER username;
                                                         --FIRST用于将新添加的字段设置为表的第一个字段
               --AFTER用于将新添加的字段添加到指定的"已存在字段名"的后面
               
  --添加多个字段
   ALTER TABLE employee
    ADD addr VARCHAR(20),
    ADD age  INT FIRST,
    ADD depart VARCHAR(20) AFTER name;    --(2)修改一列类型
      ALTER TABLE 表名 MODIFY 列名 类型 [完整性约束条件][FIRST|AFTER 字段名];
  --ALTER TABLE employee MODIFY age TINYINT DEFAULT 20;
  --ALTER TABLE employee MODIFY age TINYINT AFTER id;
  
   --(3)修改列名
      ALTER TABLE 表名 CHANGE [COLUMN] 列名 新列名 类型 [完整性约束条件][FIRST|AFTER 字段名];
  --ALTER TABLE employee CHANGE age Age INT DEFAULT 28 FIRST;    --(4)删除一列
      ALTER TABLE 表名 DROP [COLUMN] 列名;
      --思考:删除多列呢?
   ALTER TABLE 表名 DROP [COLUMN] 列名1,
        DROP [COLUMN] 列名2;
   --删一个填一个呢?
      ALTER TABLE employee
            ADD salary FLOAT(6,2) UNSIGNED NOT NULL AFTER name,
            DROP addr;       --(5)修改表名
      RENAME TABLE 表名 to 新表名;
  
   --(6)修该表所用的字符集   
      ALTER TABLE student CHARACTER SET utf8;
      ALTER TABLE student CHARACTER SET gbk;
  
--4.删除表
    DROP TABLE 表名;
 
表的约束
      PRIMARY KEY  --主键约束,用于唯一标识对应的记录
   FOREIGN KEY  --外键约束
   NOT NULL     --非空约束
   UNIQUE       --唯一性约束
   DEFAULT      --默认值约束,用于设置字段的默认值
  
主键约束  --唯一标识表中的记录
    --语法:
        字段名 数据类型 PRIMARY KEY
  单字段主键
mysql>CREATE TABLE users(
            id INT PRIMARY KEY,
            name VARCHAR(20),
            city VARCHAR(20)
        );
    主键字段特点:非空且唯一   多字段联合主键
mysql>CREATE TABLE users2(
            id INT,
            name VARCHAR(20),
            city VARCHAR(20),
            PRIMARY KEY(name,id)
          );
    <1> 一张表只能有一个主键
    <2> 主键类型不一定非是整型
 
 --添加主键,
   ALTER TABLE 表名 ADD PRIMARY KEY(字段名称,...);
    --删除主键
   ALTER TABLE users DROP PRIMARY KEY;
 --每张表必须有主键
mysql> CREATE TABLE test5(num INT AUTO_INCREMENT);
    ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key
 --修改如下
mysql>CREATE TABLE test(num INT PRIMARY KEY AUTO_INCREMENT);
 
 --思考,如何删除主键?
   ALTER TABLE test MODIFY id INT;   -- auto_increment没了,但这样写主键依然存在,所以还要加上下面这句
      ALTER TABLE test DROP PRIMARY KEY;-- 仅仅用这句也无法直接删除主键
非空约束  --字段的值不能为NULL
    字段名 数据类型 NOT NULL
mysql>CREATE TABLE users3(
            id INT PRIMARY KEY,
   name VARCHAR(20) NOT NULL,
   grade FLOAT
  );
唯一约束  --用于保证数据表中字段的唯一性,即表中字段的值不能重复出现。
mysql>CREATE TABLE users4(
   id INT PRIMARY KEY,
   stu_id INT UNIQUE,
   name VARCHAR(20) NOT NULL
  );
默认约束  --用于给数据表中的字段制定默认值,即当在表中插入一条新纪录时,如果没有给这个字段赋值,那么,数据库系统会自动为这个字段插入默认值。
mysql>CREATE TABLE users5(
   id INT PRIMARY KEY AUTO_INCREMENT,
   stu_id INT UNIQUE,
   grade FLOAT DEFAULT 0
  );
上一篇:【洛谷P1313 计算系数】


下一篇:5、建表过程与字符类型额意义