自我总结29

操作表

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

列约束

aoto_increment:自增
primary key:主键索引,加快查询速度,列的值不能重复
NOT NULL:标识该字段不能为空
DEFAULT:为该字段设置默认值

例子: (推荐)
      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)

列类型

数字

  - 整型
  
    tinyint
    smallint
    int   (************************) 推荐使用
    mediumint
    bigint

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

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



  - 浮点型 (***********)

	float:  不一定精确
	decimal: 非常的精确的数字   
decimal[(m[,d])] 
m是数字总个数(负号不算),d是小数点后个数。
m最大值为65,d最大值为30

输入的参数达不到d,添加0不上
输入的参数超过d就四舍五入



例子:
create table t5(
   id int auto_increment primary key,
   salary decimal(16,10),
   num float
)charset=utf8;


正好 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)

少于10位:
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 |
+----+-------------------+---------+

多于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: 定长, 无论插入的字符是多少个,永远固定占规定的长度
    场景:
        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');

修改表名

ALTER TABLE 旧表名 RENAME 新表名;

mysql> alter table t8 rename t88;
Query OK, 0 rows affected (0.19 sec)	

增加字段

ALTER TABLE 表名
	ADD 字段名 列类型 [可选的参数],
	ADD 字段名 列类型 [可选的参数];
上面添加的列永远是添加在最后一列之后


ALTER TABLE 表名
     ADD 字段名 列类型 [可选的参数] FIRST;


ALTER TABLE 表名
     ADD 字段名 列类型 [可选的参数] AFTER 字段名;

修改字段

ALTER TABLE 表名 MODIFY 字段名 数据类型 [完整性约束条件…];

ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…];

drop table 表名;  #### 线上禁用

mysql> drop table t9;
Query OK, 0 rows affected (0.18 sec)

show tables;查看该库里的所有的表



复制表结构:
show create table 表名;查看该创建的表


create table 表名1 like 表名

操作表数据行

insert into 表名 (列1, 列2) values (值1,'值2');


insert into t1 (id, name) values (1, 'zekai');
insert into t1 (id, name) values (1, 'zekai2');
insert into t1 (id, name) values (1, 'zekai2'),(2, 'zekai3'),(3,'zekai4');

delete from 表名 where 条件;
例子: mysql> delete from t5 where id=1;

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删除的速度是高于delete的

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;

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 |
+--------+




通过四则运算查询 (不要用)
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,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%';
     不让用

posted @ 2019-10-30 03:14  jzm1201  阅读(88)  评论(0编辑  收藏  举报