day 34小结

1.操作表

​ 增:

create table 表名(

    字段名		列类型	[可选的参数],
    字段名		列类型	[可选的参数],
    字段名		列类型	[可选的参数]
    
)charset = utf8;

例子1:
	create table t1(
    
        id int ,
        name char(5)
        
    )charset = utf8;
    
Query OK, 0 rows affected (0.41 sec)  # 表示创建成功
增加数据语法:
	语法: insert into 表名 (列1,列2) values (值1,'值2');
	例子:	insert into t1 (id,name) values (1,'zekai');
		 
	
例子2:
	create table t1(
    
        id int auto_increment primary key,
        name char(5) not null default 'xxx',
        age int not null default 0
        
    )charset = utf8;
    
    表的约束:
    	auto_increment : 自增 1
    	primary key : 主键索引,加快查询速度
    	not null : 标识该字段不能为空
    	default : 为该字段设置默认值

​ 列类型:

  • 数字

    • 整型

      tinyint

      smallint

      int

      mediumint

      bigint

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

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

    • 浮点型

      float: 不一定精确

      cecimal: 非常精确的数字(5000.23) decimal(6.2) m是数字总数(符号不算) , d是小数点后个数

      mysql> create table t5(
          -> id int auto_increment primary key,
          -> salary decimal(16,10),
          -> num float
          -> )charset=utf8;
      Query OK, 0 rows affected (0.55 sec)                                                    
      
    • 字符串

      • 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.05 sec)
        
        mysql> select * from t6;
        +----+-------+
        | id | name  |
        +----+-------+
        |  1 | hello |
        +----+-------+
        1 row in set (0.00 sec)
        
        mysql> insert into t6 (name) values ('helloworldimthegod');
        ERROR 1406 (22001): Data too long for column 'name' at row 1 # 超过约定长度会报错
        

    ​ 区别:

    ​ char: 定长, 无论插入的字符是多少,永远固定占规定的长度

    ​ 应用场景: 1.身份证
    ​ 2.手机号
    ​ 3.md5加密后的值,如密码 等

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

  • 时间日期类型

    • time
      HH:MM:SS ('-838:59:59'/'838:59:59')
    • date
      YYYY-MM-DD(1000-01-01/9999-12-31)
    • 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 年某时)
    • year
      YYYY(1901/2155)

    例子:

    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.06 sec)
    
    mysql> select * from t8;
    +------------+----------+---------------------+
    | d          | t        | dt                  |
    +------------+----------+---------------------+
    | 2019-10-29 | 16:13:52 | 2019-10-29 16:13:52 |
    +------------+----------+---------------------+
    1 row in set (0.00 sec)
    
    
  • 枚举
    列出所有的选项

    create table t9(
    	id int auto_increment primary key,
        grnder enum('male','female')
    )charset utf8;
    
    mysql> insert into t9 (grnder) values ('male');
    Query OK, 1 row affected (0.13 sec)
    
    mysql> insert into t9 (grnder) values ('female');
    Query OK, 1 row affected (0.05 sec)
    
    mysql> insert into t9 (grnder) values ('asdgsadgkag');
    ERROR 1265 (01000): Data truncated for column 'grnder' at row 1
    

  • 修改表名

    alter table 旧表名 rename 新表名;
    
  • 增加字段

    alter table 表名
    add 字段名  列类型 [可选参数],
    add 字段名  列类型 [可选参数];
    
    mysql> alter table t5 add name varchar(32) not null default '';
    Query OK, 0 rows affected (0.53 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    上面添加的永远在最后一列之后
    
    
    alter table 表名
    add 字段名  列类型  [可选的参数] first;
    
    mysql> alter table t5 add name2 varchar(32) not null default '' first;
    Query OK, 0 rows affected (0.46 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    
    
    alter table 表名
    add 字段名  列类型  [可选参数]  after 字段名;
    mysql> alter table t5 add name4 varchar(32) not null default '' after name;
    Query OK, 0 rows affected (0.45 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    
  • 删除字段

    alter table 表名 drop 字段名;
    mysql> alter table t5 drop name;
    Query OK, 0 rows affected (0.41 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    
  • 修改字段

    alter table 表名 modify 字段名 数据类型 [完整性约束条件...];
    mysql> alter table t5 modify name2 char(11);
    Query OK, 1 row affected (0.82 sec)
    Records: 1  Duplicates: 0  Warnings: 0
    
    
    alter table 表名  change  旧字段名  新字段名  新数据类型  [完整性约束条件...];
    mysql> alter table t5 change name22 hobby varchar(32);
    Query OK, 0 rows affected (0.46 sec)
    Records: 0  Duplicates: 0  Warnings:
    
    # 注意:如将varchar类型转成int类型,原字段必须是数字,
    # 而且int的最大值是4294967295,原字段的值需要小于等于int的最大值才可以。
    
  • drop table 表名;  ### 线上禁用
    mysql> drop table t8;
    Query OK, 0 rows affected (0.23 sec)
    
  • mysql> show tables;
    +-----------------+
    | Tables_in_staff |
    +-----------------+
    | t1              |
    | t2              |
    | t5              |
    | t6              |
    | t9              |
    +-----------------+
    5 rows in set (0.00 sec)
    
  • 复制表结构:

    show create table t2;
    +-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | Table | Create Table                                                                                                                                                                                     |
    +-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | t2    | CREATE TABLE `t2` (
      `id` int(11) DEFAULT NULL,
      `name` varchar(50) DEFAULT NULL,
      `sex` enum('male','female') DEFAULT NULL,
      `age` int(3) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
    +-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    1 row in set (0.00 sec)
    
    mysql> create table t10 like t5;
    Query OK, 0 rows affected (0.41 sec)
    
    

操作表数据行

​ 增

  • 增加数据

    语法:
    	insert into 表名 (列1,列2) values ('值1','值2');
    	
    例子:
    	insert into t1 (id,name) values (1,'zekai');
    	
    	mysql> insert into t1 (name) select (name4) from t5;
    	Query OK, 1 row affected (0.06 sec)
    	Records: 1  Duplicates: 0  Warnings: 0
    
  • delete from 表名 where 条件;
    	mysql> delete from t5 where id=1;
    	mysql> delete from t5 where id>1;
    	mysql> delete from t5 where id>=1;
    	mysql> delete from t5 where id<1;
    	mysql> delete from t5 where id<=1;
    	mysql> delete from t5 where id>=1 and id<10;
    	Query OK, 1 row affected (0.06 sec)
    
    delete from 表名; 删除表中所有的数据
    
    mysql> insert into t5 (salary, num) values (500023.2312345679,  5000.24);
    Query OK, 1 row affected (0.08 sec)
    
    
    mysql> select * from t5;
    +----+-------------------+---------+
    | id | salary            | num     |
    +----+-------------------+---------+
    |  4 | 500023.2312345679 | 5000.24 |
    +----+-------------------+---------+
    1 row in set (0.00 sec)
    
    truncate 表名; #### 没有where条件的
    	mysql> truncate t5;
    	Query OK, 0 rows affected (0.25 sec)
    
    
    mysql> select * from t5;
     				Empty set (0.00 sec)
    
     				mysql> insert into t5 (salary, num) values (500023.2312345679,  5000.24);
     				Query OK, 1 row affected (0.06 sec)
    
     				mysql> select * from t5;
     				+----+-------------------+---------+
     				| id | salary            | num     |
     				+----+-------------------+---------+
     				|  1 | 500023.2312345679 | 5000.24 |
     				+----+-------------------+---------+
     				1 row in set (0.00 sec)
    

    区别:

    1. delete之后,插入数据从上一次主键自增加1开始, truncate则是从1开始
    2. delete删除, 是一行一行的删除, truncate:全选删除 truncate删除的速度是高于deleted
  • update 表名 set 列名1=新值1,列名2=新值2 where 条件;
     				mysql> update t66 set name='xxxx' where id=30;
     				Query OK, 1 row affected (0.04 sec)
     				Rows matched: 1  Changed: 1  Warnings: 0
    
     				mysql> update t66 set name='xxxx' where id<30;
     				mysql> update t66 set name='xxxx' where id<=30;
     				mysql> update t66 set name='xxxx' where id>=30;
     				mysql> update t66 set name='xxxx' where id>30;
     				mysql> update t66 set name='xxxx' where id>20 and id<32;
     				mysql> update t66 set name='xxxx' where id>20 or name='zekai';
    
     				Query OK, 1 row affected (0.04 sec)
     				Rows matched: 1  Changed: 1  Warnings: 0
    
  • 语法:
     				select 列1, 列2 from 表名;  (*代表查询所有的列)
     				select * from 表名;  (*代表查询所有的列)
     				select * from t66 where id>30 and id<40;
     				select * from t66 where id>30;
     				select * from t66 where id<30;
     				select * from t66 where id<=30;
     				select * from t66 where id>=30;
     				select * from t66 where id!=30;
     				select * from t66 where id<>30;
     					mysql> select * from t1;
     					+------+-------+
     					| id   | name  |
     					+------+-------+
     					|    1 | zekai |
     					+------+-------+
     					1 row in set (0.00 sec)
    
     				between..and...: 取值范围是闭区间
    
     					select * from t66 where id between 30 and 40;
     					mysql> select * from t66 where id between 31 and 33;
     					+----+--------+
     					| id | name   |
     					+----+--------+
     					| 31 | dsadsa |
     					| 32 | dsadsa |
     					| 33 | dsadsa |
     					+----+--------+
    
     				避免重复DISTINCT
     					mysql> select distinct name from t66;
     					+--------+
     					| name   |
     					+--------+
     					| xxxx   |
     					| hds    |
     					| dsadsa |
     					+--------+
     					3 rows in set (0.00 sec)
    
     				通过四则运算查询 (不要用)
     					mysql> select name, age*10 from t3;
     					+------+--------+
     					| name | age*10 |
     					+------+--------+
     					| xxx  |    100 |
     					+------+--------+
     					1 row in set (0.01 sec)
    
     					mysql> select name, age*10 as age from t3;
     					+------+-----+
     					| name | age |
     					+------+-----+
     					| xxx  | 100 |
     					+------+-----+
     					1 row in set (0.02 sec)
    
     				in(80,90,100):
    
     					mysql> select * from t66 where id in (23,34,11);
     					+----+------+
     					| id | name |
     					+----+------+
     					| 11 | xxxx |
     					| 23 | hds  |
     					+----+------+
     					2 rows in set (0.04 sec)
    
     				like : 模糊查询
     					以x开头:
     						mysql> select * from t66 where name like 'x%';
     						+----+------+
     						| id | name |
     						+----+------+
     						|  1 | xxxx |
     						|  2 | xxxx |
     						|  3 | xxxx |
     						|  4 | xxxx |
     						|  8 | xxxx |
     						|  9 | xxxx |
     						| 10 | xxxx |
     						| 11 | xxxx |
     						| 15 | xxxx |
     						| 16 | xxxx |
     						| 17 | xxxx |
     						| 18 | xxxx |
     						| 30 | xxxx |
     						+----+------+
     						13 rows in set (0.05 sec)
    
     					以x结尾:
     						mysql> select * from t66 where name like '%x';
     						+----+------+
     						| id | name |
     						+----+------+
     						|  1 | xxxx |
     						|  2 | xxxx |
     						|  3 | xxxx |
     						|  4 | xxxx |
     						|  8 | xxxx |
     						|  9 | xxxx |
     						| 10 | xxxx |
     						| 11 | xxxx |
     						| 15 | xxxx |
     						| 16 | xxxx |
     						| 17 | xxxx |
     						| 18 | xxxx |
     						| 30 | xxxx |
     						+----+------+
     						13 rows in set (0.00 sec)
    
     					包含x的:
     						mysql> select * from t66 where name like '%x%';
    

原文地址:https://www.cnblogs.com/LZF-190903/p/11762599.html