day 34 数据表的操作

操作表

增:

  语法:create table 表名(

  字段名 列类型 [可选的参数], ### 记住加逗号

   字段名 列类型 [可选的参数], ### 记住加逗号

   字段名 列类型 [可选的参数] ### 最后一行不加逗号

  )chart utf8;

  列约束:(*********************)
  auto_increment : 自增 1 用于ID值
  primary key : 主键索引,加快查询速度, 列的值不能重复
  not noll    标识该字段不能为空
  default  为该字段设置默认值

  例子1:

    create table t1(
    id int,
    name char(5)
    )charset=utf8;

    Query OK, 0 rows affected (0.72 sec) #### 如果回显是queryok,代表创建成功

   增加数据
   语法:
      insert into 表名 (列1, 列2) values (值1,'值2');
      例子:
        insert into t1 (id, name) values (1, 'zekai');
        insert into t1 (id, name) values (1, 'zekai2');
      查询数据:
    语法:
      select 列1, 列2 from 表名; (*代表查询所有的列)
      例子:
        mysql> select * from t1;

        +------+-------+
        | id | name |
        +------+-------+
        | 1 | zekai |
        +------+-------+
        1 row in set (0.00 sec)

  例子2:

    create table t2(
      id int auto_increment primary key,
      name char(10)
    )charset=utf8;

              insert into t2 (name) values ('zekai1');

  例子3:

    create table t3(
      id int unsigned auto_increment primary key,
      name char(10) not null default 'xxx',
      age int not null default 0
    )charset=utf8;

    mysql> insert into t3 (age) values (10);
    Query OK, 1 row affected (0.05 sec)

    mysql> select * from t3;
    +----+------+-----+
    | id | name | age |
    +----+------+-----+
    | 1 | xxx | 10 |
    +----+------+-----+

  列类型

      create table 表名(
        字段名 列类型 unsigned [可选的参数], ### 记住加逗号
        字段名 列类型 [可选的参数], ### 记住加逗号
        字段名 列类型 [可选的参数] ### 最后一行不加逗号
        .....
      )charset=utf8; #### 后面加分号

      - 数字
        - 整型
        tinyint  (-128,127)  (0,255)
        smallint (-32768,32767)  (0,65535)
        int (**********)(-2 147 483 648,2 147 483 647)  (0,4 294 967 295)推荐使用
        mediumint
        bigint
    

        a.整数类型
        b.取值范围
        c.unsigned 加上代表不能取负数 只适用于整型

        应用场景:
          根据公司业务的场景,来选取合适的类型

      - 浮点型 (***********)
        create table t5(
          id int auto_increment primary key,
          salary decimal(16,10),
          num float
        )charset=utf8;

        float: 不一定精确 (m,d)m是数字总个数,d是小数点后个数
        decimal: 非常的精确的数字 (5000.23) decimal(6, 2) m是数字总个数(负号不算),d是小数点后个数。
   例子1:
      正好 10 位:
      mysql> insert into t5 (salary, num) values (500023.2312345678, 5000.2374837284783274832);
      Query OK, 1 row affected (0.04 sec)

      mysql> select * from t5;
      +----+-------------------+---------+
      | id | salary | num |
      +----+-------------------+---------+
      | 1 | 500023.2312345678 | 5000.24 |
      +----+-------------------+---------+
      1 row in set (0.00 sec)
   例子2:
      少于10位:用0  补足
      mysql> insert into t5 (salary, num) values (500023.231234567, 5000.2374837284783274832);
      Query OK, 1 row affected (0.04 sec)

      mysql> select * from t5;
      +----+-------------------+---------+
      | id | salary | num |
      +----+-------------------+---------+
      | 1 | 500023.2312345678 | 5000.24 |
      | 2 | 500023.2312345670 | 5000.24 |
      +----+-------------------+---------+
   例子3:
      多于10位:四舍五入
      mysql> insert into t5 (salary, num) values (500023.23123456789, 5000.2374837284783274832);
      Query OK, 1 row affected, 1 warning (0.03 sec)

      mysql> select * from t5;
      +----+-------------------+---------+
      | id | salary | num |
      +----+-------------------+---------+
      | 1 | 500023.2312345678 | 5000.24 |
      | 2 | 500023.2312345670 | 5000.24 |
      | 3 | 500023.2312345679 | 5000.24 |
      +----+-------------------+---------+

    - 字符串

      - char(长度) : 定长
        create table t6(
          id unsigned int auto_increment primary key,
          name char(10) not null default 'xxx',
        )charset=utf8;

      - varchar(长度):变长
        create table t6(
          id int auto_increment primary key,
          name varchar(10) not null default 'xxx'
        )charset=utf8;

     mysql> insert into t6 (name) values ('hello');
     Query OK, 1 row affected (0.03 sec)

        mysql> select * from t6;
        +----+-------+
     | id | name |
        +----+-------+
        | 1 | hello |
        +----+-------+
        1 row in set (0.00 sec)

        mysql> insert into t6 (name) values ('hellodbsabdsjabjdsa');
        ERROR 1406 (22001): Data too long for column 'name' at row 1

    区别:
      char: 定长, 无论插入的字符是多少个,永远固定占规定的长度
    场景:
      1. 身份证
      2. 手机号 char(11)
      3. md5加密之后的值,比如密码 等 char(32)

    varchar: 变长, 根据插入的字符串的长度来计算所占的字节数,但是有一个字节是用来保存字符串的大小的

    注意:如果, 不能确定插入的数据的大小, 一般建议使用 varchar(255)

    - 时间日期类型
      YEAR
        YYYY(1901/2155)

      DATE
        YYYY-MM-DD(1000-01-01/9999-12-31)

      TIME
        HH:MM:SS('-838:59:59'/'838:59:59')

      DATETIME (***************************)

        YYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59 Y)

      TIMESTAMP

        YYYYMMDD HHMMSS(1970-01-01 00:00:00/2037 年某时)

      例子:
        create table t8(
          d date,
          t time,
          dt datetime
        );
        mysql> insert into t8 values(now(),now(),now());
        Query OK, 1 row affected, 1 warning (0.08 sec)

        mysql> select * from t8;
        +------------+----------+---------------------+
        | d | t | dt |
        +------------+----------+---------------------+
        | 2019-10-29 | 10:49:51 | 2019-10-29 10:49:51 |
        +------------+----------+---------------------+
        1 row in set (0.00 sec)
        insert into t8 values(now(),now(),now());

        - 枚举
          列出所有的选项
          create table t9 (
            id int auto_increment primary key,
            gender enum('male','female')
          )charset utf8;

        mysql> insert into t9 (gender) values ('male');
        Query OK, 1 row affected (0.04 sec)

        mysql> insert into t9 (gender) values ('female');
        Query OK, 1 row affected (0.03 sec)

        mysql> insert into t9 (gender) values ('dshajjdsja');

猜你喜欢

转载自www.cnblogs.com/fjn839199790/p/11760128.html